module Network.Wai.Application.Classic.Redirect (
redirectApp
) where
import Control.Monad.IO.Class (liftIO)
import Data.ByteString.Char8
import Network.HTTP.Types
import Network.Wai
import Network.Wai.Application.Classic.Field
import Network.Wai.Application.Classic.Path
import Network.Wai.Application.Classic.Types
redirectApp :: ClassicAppSpec -> RedirectRoute -> Application
redirectApp cspec route req = do
liftIO $ logger cspec req status Nothing
return $ responseLBS status hdr ""
where
path = fromByteString $ rawPathInfo req
src = redirectSrc route
dst = redirectDst route
rurl = "http://" `append` pathByteString (dst </> (path <\> src))
hdr = addServer cspec $ locationHeader rurl
status = movedPermanently301