module Network.Wai.Middleware.StripHeaders (
stripHeader,
stripHeaders,
stripHeaderIf,
stripHeadersIf,
) where
import Data.ByteString (ByteString)
import qualified Data.CaseInsensitive as CI
import Network.Wai (
Middleware,
Request,
ifRequest,
mapResponseHeaders,
modifyResponse,
)
import Network.Wai.Internal (Response)
stripHeader :: ByteString -> (Response -> Response)
ByteString
h = (ResponseHeaders -> ResponseHeaders) -> Response -> Response
mapResponseHeaders ((Header -> Bool) -> ResponseHeaders -> ResponseHeaders
forall a. (a -> Bool) -> [a] -> [a]
filter (\Header
hdr -> Header -> HeaderName
forall a b. (a, b) -> a
fst Header
hdr HeaderName -> HeaderName -> Bool
forall a. Eq a => a -> a -> Bool
/= ByteString -> HeaderName
forall s. FoldCase s => s -> CI s
CI.mk ByteString
h))
stripHeaders :: [ByteString] -> (Response -> Response)
[ByteString]
hs =
let hnames :: [HeaderName]
hnames = (ByteString -> HeaderName) -> [ByteString] -> [HeaderName]
forall a b. (a -> b) -> [a] -> [b]
map ByteString -> HeaderName
forall s. FoldCase s => s -> CI s
CI.mk [ByteString]
hs
in (ResponseHeaders -> ResponseHeaders) -> Response -> Response
mapResponseHeaders ((Header -> Bool) -> ResponseHeaders -> ResponseHeaders
forall a. (a -> Bool) -> [a] -> [a]
filter (\Header
hdr -> Header -> HeaderName
forall a b. (a, b) -> a
fst Header
hdr HeaderName -> [HeaderName] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [HeaderName]
hnames))
stripHeaderIf :: ByteString -> (Request -> Bool) -> Middleware
ByteString
h Request -> Bool
rpred =
(Request -> Bool) -> Middleware -> Middleware
ifRequest Request -> Bool
rpred ((Response -> Response) -> Middleware
modifyResponse ((Response -> Response) -> Middleware)
-> (Response -> Response) -> Middleware
forall a b. (a -> b) -> a -> b
$ ByteString -> Response -> Response
stripHeader ByteString
h)
stripHeadersIf :: [ByteString] -> (Request -> Bool) -> Middleware
[ByteString]
hs Request -> Bool
rpred =
(Request -> Bool) -> Middleware -> Middleware
ifRequest Request -> Bool
rpred ((Response -> Response) -> Middleware
modifyResponse ((Response -> Response) -> Middleware)
-> (Response -> Response) -> Middleware
forall a b. (a -> b) -> a -> b
$ [ByteString] -> Response -> Response
stripHeaders [ByteString]
hs)