Add timeouts to State, not implemented yet.
This commit is contained in:
parent
e27b932c17
commit
35ff03dfce
@ -1,3 +1,4 @@
|
|||||||
|
-- | Yesod server-side session support.
|
||||||
module Web.ServerSession.Frontend.Yesod
|
module Web.ServerSession.Frontend.Yesod
|
||||||
( -- * Using server-side sessions
|
( -- * Using server-side sessions
|
||||||
simpleBackend
|
simpleBackend
|
||||||
@ -5,7 +6,13 @@ module Web.ServerSession.Frontend.Yesod
|
|||||||
-- * Invalidating session IDs
|
-- * Invalidating session IDs
|
||||||
, forceInvalidate
|
, forceInvalidate
|
||||||
, ForceInvalidate(..)
|
, ForceInvalidate(..)
|
||||||
|
-- * State configuration
|
||||||
|
, setCookieName
|
||||||
|
, setAuthKey
|
||||||
|
, setIdleTimeout
|
||||||
|
, setAbsoluteTimeout
|
||||||
|
, State
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Web.ServerSession.Core (ForceInvalidate(..))
|
import Web.ServerSession.Core
|
||||||
import Web.ServerSession.Frontend.Yesod.Internal
|
import Web.ServerSession.Frontend.Yesod.Internal
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
-- | Internal module exposing the guts of the package. Use at
|
||||||
|
-- your own risk. No API stability guarantees apply.
|
||||||
module Web.ServerSession.Frontend.Yesod.Internal
|
module Web.ServerSession.Frontend.Yesod.Internal
|
||||||
( simpleBackend
|
( simpleBackend
|
||||||
, backend
|
, backend
|
||||||
|
|||||||
@ -7,15 +7,17 @@ module Web.ServerSession.Core
|
|||||||
|
|
||||||
-- * For serversession frontends
|
-- * For serversession frontends
|
||||||
, SessionMap
|
, SessionMap
|
||||||
, State(..)
|
, State
|
||||||
, createState
|
, createState
|
||||||
, setAuthKey
|
|
||||||
, loadSession
|
, loadSession
|
||||||
, saveSession
|
, saveSession
|
||||||
, SaveSessionToken
|
, SaveSessionToken
|
||||||
, forceInvalidateKey
|
, forceInvalidateKey
|
||||||
-- ** To be re-exported by frontends
|
-- ** To be re-exported by frontends
|
||||||
, setCookieName
|
, setCookieName
|
||||||
|
, setAuthKey
|
||||||
|
, setIdleTimeout
|
||||||
|
, setAbsoluteTimeout
|
||||||
, ForceInvalidate(..)
|
, ForceInvalidate(..)
|
||||||
) where
|
) where
|
||||||
|
|
||||||
|
|||||||
@ -13,6 +13,8 @@ module Web.ServerSession.Core.Internal
|
|||||||
, createState
|
, createState
|
||||||
, setCookieName
|
, setCookieName
|
||||||
, setAuthKey
|
, setAuthKey
|
||||||
|
, setIdleTimeout
|
||||||
|
, setAbsoluteTimeout
|
||||||
, loadSession
|
, loadSession
|
||||||
, saveSession
|
, saveSession
|
||||||
, SaveSessionToken(..)
|
, SaveSessionToken(..)
|
||||||
@ -206,6 +208,45 @@ setAuthKey :: Text -> State s -> State s
|
|||||||
setAuthKey val state = state { authKey = val }
|
setAuthKey val state = state { authKey = val }
|
||||||
|
|
||||||
|
|
||||||
|
-- | Set the idle timeout for all sessions. This is used both on
|
||||||
|
-- the client side (by setting the cookie expires fields) and on
|
||||||
|
-- the server side (the idle timeout is enforced even if the
|
||||||
|
-- cookie expiration is ignored). Setting to @Nothing@ removes
|
||||||
|
-- the idle timeout entirely.
|
||||||
|
--
|
||||||
|
-- \"[The idle timemout] defines the amount of time a session
|
||||||
|
-- will remain active in case there is no activity in the
|
||||||
|
-- session, closing and invalidating the session upon the defined
|
||||||
|
-- idle period since the last HTTP request received by the web
|
||||||
|
-- application for a given session ID.\"
|
||||||
|
-- (<https://www.owasp.org/index.php/Session_Management_Cheat_Sheet#Idle_Timeout Source>)
|
||||||
|
--
|
||||||
|
-- Defaults to 7 days.
|
||||||
|
setIdleTimeout :: Maybe DiffTime -> State s -> State s
|
||||||
|
setIdleTimeout (Just d) _ | d <= 0 = error "serversession/setIdleTimeout: Timeout should be positive."
|
||||||
|
setIdleTimeout val state = state { idleTimeout = val }
|
||||||
|
|
||||||
|
|
||||||
|
-- | Set the absolute timeout for all sessions. This is used both on
|
||||||
|
-- the client side (by setting the cookie expires fields) and on
|
||||||
|
-- the server side (the absolute timeout is enforced even if the
|
||||||
|
-- cookie expiration is ignored). Setting to @Nothing@ removes
|
||||||
|
-- the absolute timeout entirely.
|
||||||
|
--
|
||||||
|
-- \"[The absolute timeout] defines the maximum amount of time a
|
||||||
|
-- session can be active, closing and invalidating the session
|
||||||
|
-- upon the defined absolute period since the given session was
|
||||||
|
-- initially created by the web application. After invalidating
|
||||||
|
-- the session, the user is forced to (re)authenticate again in
|
||||||
|
-- the web application and establish a new session.\"
|
||||||
|
-- (<https://www.owasp.org/index.php/Session_Management_Cheat_Sheet#Absolute_Timeout Source>)
|
||||||
|
--
|
||||||
|
-- Defaults to 60 days.
|
||||||
|
setAbsoluteTimeout :: Maybe DiffTime -> State s -> State s
|
||||||
|
setAbsoluteTimeout (Just d) _ | d <= 0 = error "serversession/setAbsoluteTimeout: Timeout should be positive."
|
||||||
|
setAbsoluteTimeout val state = state { absoluteTimeout = val }
|
||||||
|
|
||||||
|
|
||||||
-- | Load the session map from the storage backend. The value of
|
-- | Load the session map from the storage backend. The value of
|
||||||
-- the session cookie should be given as argument if present.
|
-- the session cookie should be given as argument if present.
|
||||||
--
|
--
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user