snap-core-1.0.2.1: Snap: A Haskell Web Framework (core interfaces and types)

Safe HaskellNone
LanguageHaskell2010

Snap.Util.Proxy

Description

This module provides facilities for patching incoming Requests to correct the value of rqClientAddr if the snap server is running behind a proxy.

Example usage:

m :: Snap ()
m = undefined  -- code goes here

applicationHandler :: Snap ()
applicationHandler = behindProxy X_Forwarded_For m

Synopsis

Documentation

data ProxyType Source #

What kind of proxy is this? Affects which headers behindProxy pulls the original remote address from.

Currently only proxy servers that send X-Forwarded-For or Forwarded-For are supported.

Constructors

NoProxy

no proxy, leave the request alone

X_Forwarded_For

Use the Forwarded-For or X-Forwarded-For header

behindProxy :: MonadSnap m => ProxyType -> m a -> m a Source #

Rewrite rqClientAddr if we're behind a proxy.

Example:

ghci> :set -XOverloadedStrings
ghci> import qualified Data.Map as M
ghci> import qualified Snap.Test as T
ghci> let r = T.get "/foo" M.empty >> T.addHeader "X-Forwarded-For" "1.2.3.4"
ghci> let h = getsRequest rqClientAddr >>= writeBS)
ghci> T.runHandler r h
HTTP/1.1 200 OK
server: Snap/test
date: Fri, 08 Aug 2014 14:32:29 GMT

127.0.0.1
ghci> T.runHandler r (behindProxy X_Forwarded_For h)
HTTP/1.1 200 OK
server: Snap/test
date: Fri, 08 Aug 2014 14:33:02 GMT

1.2.3.4