yesod-session-persist-0.0.0.2: internal/Yesod/Session/Manager.hs
module Yesod.Session.Manager
( SessionManager (..)
, sessionKeyAppearsReasonable
, checkedSessionKeyFromCookieValue
, newSessionKey
) where
import Internal.Prelude
import Session.Key
import Yesod.Session.Options
import Yesod.Session.Storage.Operation
-- | Server-wide state for the session mechanism
data SessionManager tx m = SessionManager
{ keyManager :: SessionKeyManager tx
-- ^ A random session key generator
, storage :: forall a. StorageOperation a -> tx a
-- ^ The storage backend
, options :: Options tx m
, runDB :: forall a. tx a -> m a
}
sessionKeyAppearsReasonable :: SessionManager tx m -> SessionKey -> Bool
sessionKeyAppearsReasonable SessionManager {keyManager = SessionKeyManager {check}} = check
checkedSessionKeyFromCookieValue
:: SessionManager tx m -> ByteString -> Maybe SessionKey
checkedSessionKeyFromCookieValue x =
sessionKeyFromCookieValue
>=> (\v -> guard (sessionKeyAppearsReasonable x v) $> v)
newSessionKey :: SessionManager tx m -> m SessionKey
newSessionKey SessionManager {keyManager, runDB} =
runDB keyManager.new