{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DoAndIfThenElse #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Web.Spock.SessionActions
( SessionId,
sessionRegenerateId,
sessionDestroy,
getSessionId,
readSession,
writeSession,
modifySession,
modifySession',
modifyReadSession,
)
where
import Web.Spock.Action
import Web.Spock.Internal.Monad ()
import Web.Spock.Internal.SessionManager
import Web.Spock.Internal.Types
sessionRegenerateId :: SpockActionCtx ctx conn sess st ()
sessionRegenerateId :: forall ctx conn sess st. SpockActionCtx ctx conn sess st ()
sessionRegenerateId =
()
-> ActionCtxT () (WebStateM conn sess st) ()
-> ActionCtxT ctx (WebStateM conn sess st) ()
forall (m :: * -> *) ctx' a ctx.
MonadIO m =>
ctx' -> ActionCtxT ctx' m a -> ActionCtxT ctx m a
runInContext () (ActionCtxT () (WebStateM conn sess st) ()
-> ActionCtxT ctx (WebStateM conn sess st) ())
-> ActionCtxT () (WebStateM conn sess st) ()
-> ActionCtxT ctx (WebStateM conn sess st) ()
forall a b. (a -> b) -> a -> b
$
ActionCtxT
()
(WebStateM conn sess st)
(SessionManager
(ActionCtxT () (WebStateM conn sess st)) conn sess st)
ActionCtxT
()
(WebStateM conn sess st)
(SpockSessionManager
(SpockConn (ActionCtxT () (WebStateM conn sess st)))
(SpockSession (ActionCtxT () (WebStateM conn sess st)))
(SpockState (ActionCtxT () (WebStateM conn sess st))))
forall (m :: * -> *).
HasSpock m =>
m (SpockSessionManager
(SpockConn m) (SpockSession m) (SpockState m))
getSessMgr ActionCtxT
()
(WebStateM conn sess st)
(SessionManager
(ActionCtxT () (WebStateM conn sess st)) conn sess st)
-> (SessionManager
(ActionCtxT () (WebStateM conn sess st)) conn sess st
-> ActionCtxT () (WebStateM conn sess st) ())
-> ActionCtxT () (WebStateM conn sess st) ()
forall a b.
ActionCtxT () (WebStateM conn sess st) a
-> (a -> ActionCtxT () (WebStateM conn sess st) b)
-> ActionCtxT () (WebStateM conn sess st) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= SessionManager
(ActionCtxT () (WebStateM conn sess st)) conn sess st
-> ActionCtxT () (WebStateM conn sess st) ()
forall (m :: * -> *) conn sess st.
SessionManager m conn sess st -> m ()
sm_regenerateSessionId
sessionDestroy :: SpockActionCtx ctx conn sess st ()
sessionDestroy :: forall ctx conn sess st. SpockActionCtx ctx conn sess st ()
sessionDestroy = ()
-> ActionCtxT () (WebStateM conn sess st) ()
-> ActionCtxT ctx (WebStateM conn sess st) ()
forall (m :: * -> *) ctx' a ctx.
MonadIO m =>
ctx' -> ActionCtxT ctx' m a -> ActionCtxT ctx m a
runInContext () (ActionCtxT () (WebStateM conn sess st) ()
-> ActionCtxT ctx (WebStateM conn sess st) ())
-> ActionCtxT () (WebStateM conn sess st) ()
-> ActionCtxT ctx (WebStateM conn sess st) ()
forall a b. (a -> b) -> a -> b
$ ActionCtxT
()
(WebStateM conn sess st)
(SessionManager
(ActionCtxT () (WebStateM conn sess st)) conn sess st)
ActionCtxT
()
(WebStateM conn sess st)
(SpockSessionManager
(SpockConn (ActionCtxT () (WebStateM conn sess st)))
(SpockSession (ActionCtxT () (WebStateM conn sess st)))
(SpockState (ActionCtxT () (WebStateM conn sess st))))
forall (m :: * -> *).
HasSpock m =>
m (SpockSessionManager
(SpockConn m) (SpockSession m) (SpockState m))
getSessMgr ActionCtxT
()
(WebStateM conn sess st)
(SessionManager
(ActionCtxT () (WebStateM conn sess st)) conn sess st)
-> (SessionManager
(ActionCtxT () (WebStateM conn sess st)) conn sess st
-> ActionCtxT () (WebStateM conn sess st) ())
-> ActionCtxT () (WebStateM conn sess st) ()
forall a b.
ActionCtxT () (WebStateM conn sess st) a
-> (a -> ActionCtxT () (WebStateM conn sess st) b)
-> ActionCtxT () (WebStateM conn sess st) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= SessionManager
(ActionCtxT () (WebStateM conn sess st)) conn sess st
-> ActionCtxT () (WebStateM conn sess st) ()
forall (m :: * -> *) conn sess st.
SessionManager m conn sess st -> m ()
sm_destroySession
getSessionId :: SpockActionCtx ctx conn sess st SessionId
getSessionId :: forall ctx conn sess st. SpockActionCtx ctx conn sess st SessionId
getSessionId =
()
-> ActionCtxT () (WebStateM conn sess st) SessionId
-> ActionCtxT ctx (WebStateM conn sess st) SessionId
forall (m :: * -> *) ctx' a ctx.
MonadIO m =>
ctx' -> ActionCtxT ctx' m a -> ActionCtxT ctx m a
runInContext () (ActionCtxT () (WebStateM conn sess st) SessionId
-> ActionCtxT ctx (WebStateM conn sess st) SessionId)
-> ActionCtxT () (WebStateM conn sess st) SessionId
-> ActionCtxT ctx (WebStateM conn sess st) SessionId
forall a b. (a -> b) -> a -> b
$
ActionCtxT
()
(WebStateM conn sess st)
(SessionManager
(ActionCtxT () (WebStateM conn sess st)) conn sess st)
ActionCtxT
()
(WebStateM conn sess st)
(SpockSessionManager
(SpockConn (ActionCtxT () (WebStateM conn sess st)))
(SpockSession (ActionCtxT () (WebStateM conn sess st)))
(SpockState (ActionCtxT () (WebStateM conn sess st))))
forall (m :: * -> *).
HasSpock m =>
m (SpockSessionManager
(SpockConn m) (SpockSession m) (SpockState m))
getSessMgr ActionCtxT
()
(WebStateM conn sess st)
(SessionManager
(ActionCtxT () (WebStateM conn sess st)) conn sess st)
-> (SessionManager
(ActionCtxT () (WebStateM conn sess st)) conn sess st
-> ActionCtxT () (WebStateM conn sess st) SessionId)
-> ActionCtxT () (WebStateM conn sess st) SessionId
forall a b.
ActionCtxT () (WebStateM conn sess st) a
-> (a -> ActionCtxT () (WebStateM conn sess st) b)
-> ActionCtxT () (WebStateM conn sess st) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= SessionManager
(ActionCtxT () (WebStateM conn sess st)) conn sess st
-> ActionCtxT () (WebStateM conn sess st) SessionId
forall (m :: * -> *) conn sess st.
SessionManager m conn sess st -> m SessionId
sm_getSessionId
writeSession :: forall sess ctx conn st. sess -> SpockActionCtx ctx conn sess st ()
writeSession :: forall sess ctx conn st. sess -> SpockActionCtx ctx conn sess st ()
writeSession sess
d =
do
mgr <- ActionCtxT
ctx
(WebStateM conn sess st)
(SessionManager
(ActionCtxT () (WebStateM conn sess st)) conn sess st)
ActionCtxT
ctx
(WebStateM conn sess st)
(SpockSessionManager
(SpockConn (ActionCtxT ctx (WebStateM conn sess st)))
(SpockSession (ActionCtxT ctx (WebStateM conn sess st)))
(SpockState (ActionCtxT ctx (WebStateM conn sess st))))
forall (m :: * -> *).
HasSpock m =>
m (SpockSessionManager
(SpockConn m) (SpockSession m) (SpockState m))
getSessMgr
runInContext () $ sm_writeSession mgr d
modifySession :: (sess -> sess) -> SpockActionCtx ctx conn sess st ()
modifySession :: forall sess ctx conn st.
(sess -> sess) -> SpockActionCtx ctx conn sess st ()
modifySession sess -> sess
f =
(sess -> (sess, ())) -> SpockActionCtx ctx conn sess st ()
forall sess a ctx conn st.
(sess -> (sess, a)) -> SpockActionCtx ctx conn sess st a
modifySession' ((sess -> (sess, ())) -> SpockActionCtx ctx conn sess st ())
-> (sess -> (sess, ())) -> SpockActionCtx ctx conn sess st ()
forall a b. (a -> b) -> a -> b
$ \sess
sess -> (sess -> sess
f sess
sess, ())
modifySession' :: (sess -> (sess, a)) -> SpockActionCtx ctx conn sess st a
modifySession' :: forall sess a ctx conn st.
(sess -> (sess, a)) -> SpockActionCtx ctx conn sess st a
modifySession' sess -> (sess, a)
f =
do
mgr <- ActionCtxT
ctx
(WebStateM conn sess st)
(SessionManager
(ActionCtxT () (WebStateM conn sess st)) conn sess st)
ActionCtxT
ctx
(WebStateM conn sess st)
(SpockSessionManager
(SpockConn (ActionCtxT ctx (WebStateM conn sess st)))
(SpockSession (ActionCtxT ctx (WebStateM conn sess st)))
(SpockState (ActionCtxT ctx (WebStateM conn sess st))))
forall (m :: * -> *).
HasSpock m =>
m (SpockSessionManager
(SpockConn m) (SpockSession m) (SpockState m))
getSessMgr
runInContext () $ sm_modifySession mgr f
modifyReadSession :: (sess -> sess) -> SpockActionCtx ctx conn sess st sess
modifyReadSession :: forall sess ctx conn st.
(sess -> sess) -> SpockActionCtx ctx conn sess st sess
modifyReadSession sess -> sess
f =
(sess -> (sess, sess)) -> SpockActionCtx ctx conn sess st sess
forall sess a ctx conn st.
(sess -> (sess, a)) -> SpockActionCtx ctx conn sess st a
modifySession' ((sess -> (sess, sess)) -> SpockActionCtx ctx conn sess st sess)
-> (sess -> (sess, sess)) -> SpockActionCtx ctx conn sess st sess
forall a b. (a -> b) -> a -> b
$ \sess
sess ->
let x :: sess
x = sess -> sess
f sess
sess
in (sess
x, sess
x)
readSession :: SpockActionCtx ctx conn sess st sess
readSession :: forall ctx conn sess st. SpockActionCtx ctx conn sess st sess
readSession =
()
-> ActionCtxT () (WebStateM conn sess st) sess
-> ActionCtxT ctx (WebStateM conn sess st) sess
forall (m :: * -> *) ctx' a ctx.
MonadIO m =>
ctx' -> ActionCtxT ctx' m a -> ActionCtxT ctx m a
runInContext () (ActionCtxT () (WebStateM conn sess st) sess
-> ActionCtxT ctx (WebStateM conn sess st) sess)
-> ActionCtxT () (WebStateM conn sess st) sess
-> ActionCtxT ctx (WebStateM conn sess st) sess
forall a b. (a -> b) -> a -> b
$
do
mgr <- ActionCtxT
()
(WebStateM conn sess st)
(SessionManager
(ActionCtxT () (WebStateM conn sess st)) conn sess st)
ActionCtxT
()
(WebStateM conn sess st)
(SpockSessionManager
(SpockConn (ActionCtxT () (WebStateM conn sess st)))
(SpockSession (ActionCtxT () (WebStateM conn sess st)))
(SpockState (ActionCtxT () (WebStateM conn sess st))))
forall (m :: * -> *).
HasSpock m =>
m (SpockSessionManager
(SpockConn m) (SpockSession m) (SpockState m))
getSessMgr
sm_readSession mgr