#if defined(__GLASGOW_HASKELL__) && (__GLASGOW_HASKELL__ >= 702)
#endif
module Data.IterIO.Http.Support.Responses (
render
, redirectTo
, redirectBack
, respond404
, respondStat
) where
import Control.Monad.Trans.State
import qualified Data.ByteString.Char8 as S
import qualified Data.ByteString.Lazy.Char8 as L
import Data.IterIO
import Data.IterIO.Http.Support.Action (Action, ActionState(..), requestHeader)
import Data.IterIO.Http
respond404 :: Monad m => Action t b m ()
respond404 = modify $
\s -> s { actionResp = resp404 $ actionReq s }
respondStat :: Monad m => HttpStatus -> Action t b m ()
respondStat status = modify $
\s -> s { actionResp = (actionResp s) { respStatus = status} }
redirectTo :: Monad m
=> String
-> Action t b m ()
redirectTo path = modify $
\s -> s { actionResp = resp303 path }
redirectBack :: Monad m => Action t b m ()
redirectBack = do
mhdr <- requestHeader (S.pack "referer")
maybe (fail "Referer header not set") (redirectTo . S.unpack) mhdr
render :: Monad m
=> String
-> L.ByteString
-> Action t b m ()
render ctype text = modify $ \s -> s { actionResp = mkResp $ actionResp s }
where len = (S.pack "Content-Length", S.pack . show . L.length $ text)
ctypeHeader = (S.pack "Content-Type", S.pack ctype)
mkResp resp = resp { respHeaders = ctypeHeader : (len : respHeaders resp)
, respBody = inumPure text }