module Web.Apiary.Cookie
(
setCookie
, deleteCookie
, cookie
, cookie'
, module Web.Cookie
) where
import Web.Apiary.Wai
import Web.Apiary
import Web.Cookie (SetCookie(..))
import qualified Web.Cookie as Cookie
import Control.Monad.Apiary.Filter.Internal
import Control.Monad.Apiary.Filter.Internal.Strategy
import Data.Maybe
import Data.Time
import Data.Monoid
import Data.Apiary.Document
import Blaze.ByteString.Builder
import Text.Blaze.Html
import qualified Data.ByteString as S
cond :: (a -> Bool) -> (a -> b) -> (a -> b) -> a -> b
cond p t f a = if p a then t a else f a
cookie :: (Strategy w, Query p, Monad actM)
=> S.ByteString
-> w p
-> ApiaryT exts (SNext w prms p) actM m ()
-> ApiaryT exts prms actM m ()
cookie k p = function (DocPrecondition $ toHtml (show k) <> " cookie required") $ \l r ->
readStrategy (readQuery . Just) ((k ==) . fst) p (cookie' r) l
cookie' :: Request -> [(S.ByteString, S.ByteString)]
cookie' =
concatMap Cookie.parseCookies .
mapMaybe (cond (("cookie" ==) . fst) (Just . snd) (const Nothing)) .
requestHeaders
deleteCookie :: Monad m => S.ByteString -> ActionT exts m ()
deleteCookie k = setCookie def { setCookieName = k
, setCookieExpires = Just $ UTCTime (ModifiedJulianDay 0) 0
, setCookieMaxAge = Just 0
}
setCookie :: Monad m => SetCookie -> ActionT exts m ()
setCookie =
addHeader "set-cookie" . toByteString . Cookie.renderSetCookie