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