Proxy package:snap-core
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
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.
no proxy, leave the request alone
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