module Web.Apiary.Cookie.Internal where
import Web.Apiary.Wai
import Web.Apiary
import Web.Cookie
import Data.Maybe
import Data.Proxy
import Data.Time
import Control.Monad.Apiary.Filter.Internal
import Control.Monad.Apiary.Filter.Internal.Strategy
import Blaze.ByteString.Builder
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 a, Functor n, Monad n)
=> S.ByteString
-> Proxy (w a)
-> ApiaryT (SNext w as a) n m b
-> ApiaryT as n m b
cookie k p = function $ \l r -> readStrategy (readQuery . Just) ((k ==) . fst) p (cookie' r) l
cookie' :: Request -> [(S.ByteString, S.ByteString)]
cookie' =
concatMap parseCookies .
mapMaybe (cond (("cookie" ==) . fst) (Just . snd) (const Nothing)) .
requestHeaders
deleteCookie :: Monad m => S.ByteString -> ActionT m ()
deleteCookie k = setCookie def { setCookieName = k
, setCookieExpires = Just $ UTCTime (ModifiedJulianDay 0) 0
, setCookieMaxAge = Just 0
}
setCookie :: Monad m => SetCookie -> ActionT m ()
setCookie =
addHeader "set-cookie" . toByteString . renderSetCookie