snap-core-1.0.5.1: Snap: A Haskell Web Framework (core interfaces and types)
Safe HaskellSafe-Inferred
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