module Web.Apiary.ClientSession
( I.Session
, I.SessionConfig(..), I.KeySource(..)
, I.embedKeyConfig, I.embedDefaultKeyConfig
, initSession
, getSessionConfig
, setSession
, csrfToken
, setSessionWith
, session
, checkToken
, module Web.Apiary.Cookie
) where
import Web.Apiary
import Data.Apiary.Extension
import Data.Apiary.Proxy
import qualified Web.Apiary.ClientSession.Internal as I
import Web.Apiary.Cookie (deleteCookie)
import qualified Data.ByteString as S
import Control.Monad.Apiary.Filter.Internal.Strategy
initSession :: MonadIO m => I.SessionConfig -> Initializer' m I.Session
initSession c = initializer $ I.withSession c return
setSession :: (Has I.Session exts, MonadIO m)
=> S.ByteString -> S.ByteString
-> ActionT exts m ()
setSession k v = do
sess <- getExt (Proxy :: Proxy I.Session)
I.setSession sess k v
getSessionConfig :: (Has I.Session exts, Monad m)
=> ActionT exts m I.SessionConfig
getSessionConfig = do
sess <- getExt (Proxy :: Proxy I.Session)
return $ I.sessionConfig sess
setSessionWith :: (Has I.Session exts, MonadIO m)
=> I.SessionConfig
-> S.ByteString -> S.ByteString
-> ActionT exts m ()
setSessionWith cfg k v = do
sess <- getExt (Proxy :: Proxy I.Session)
I.setSession sess { I.sessionConfig = cfg } k v
session :: (Has I.Session exts, Query a, Strategy w, MonadIO actM)
=> S.ByteString -> w a
-> ApiaryT exts (SNext w prms a) actM m ()
-> ApiaryT exts prms actM m ()
session k w m = do
sess <- apiaryExt (Proxy :: Proxy I.Session)
I.session sess k w m
csrfToken :: (Has I.Session exts, MonadIO m) => ActionT exts m S.ByteString
csrfToken = getExt (Proxy :: Proxy I.Session) >>= I.csrfToken
checkToken :: (Has I.Session exts, MonadIO actM)
=> ApiaryT exts prms actM m () -> ApiaryT exts prms actM m ()
checkToken m = do
sess <- apiaryExt (Proxy :: Proxy I.Session)
I.checkToken sess m