@@ -1,9 +1,23 @@
1+{-# LANGUAGE OverloadedStrings #-}
1−module Network.Wai.Middleware.Vhost (vhost) where
2+module Network.Wai.Middleware.Vhost (vhost, redirectWWW) where
3import Network.Wai
4import Network.Wai
6+import Network.HTTP.Types as H
7+import qualified Data.Text.Encoding as TE
8+import Data.Text (Text)
9+import qualified Data.ByteString as BS
5vhost :: [(Request -> Bool, Application)] -> Application -> Application
11vhost :: [(Request -> Bool, Application)] -> Application -> Application
6vhost vhosts def req =
12vhost vhosts def req =
7 case filter (\(b, _) -> b req) vhosts of
13 case filter (\(b, _) -> b req) vhosts of
8 [] -> def req
14 [] -> def req
9 (_, app):_ -> app req
15 (_, app):_ -> app req
17+redirectWWW :: Text -> Application -> Application -- W.MiddleWare
18+redirectWWW home app req =
19+ if BS.isPrefixOf "www" $ serverName req
20+ then return $ responseLBS H.status301
21+ [ ("Content-Type", "text/plain") , ("Location", TE.encodeUtf8 home) ] "Redirect"