-- | -- -- Since 3.0.9 module Network.Wai.Middleware.Routed ( routedMiddleware , hostedMiddleware ) where import Network.Wai import Data.ByteString (ByteString) import Data.Text (Text) -- | Apply a middleware based on a test of pathInfo -- -- example: -- -- > let corsify = routedMiddleWare ("static" `elem`) addCorsHeaders -- -- Since 3.0.9 routedMiddleware :: ([Text] -> Bool) -- ^ Only use middleware if this pathInfo test returns True -> Middleware -- ^ middleware to apply the path prefix guard to -> Middleware -- ^ modified middleware routedMiddleware pathCheck middle app req | pathCheck (pathInfo req) = middle app req | otherwise = app req -- | Only apply the middleware to certain hosts -- -- Since 3.0.9 hostedMiddleware :: ByteString -- ^ Domain the middleware applies to -> Middleware -- ^ middleware to apply the path prefix guard to -> Middleware -- ^ modified middleware hostedMiddleware domain middle app req | hasDomain domain req = middle app req | otherwise = app req hasDomain :: ByteString -> Request -> Bool hasDomain domain req = maybe False (== domain) mHost where mHost = requestHeaderHost req