module Yesod.Session.Options
( Options (..)
, defaultOptions
, hoistOptions
) where
import Internal.Prelude
import Comparison
import Data.Time qualified as Time
import Randomization
import Session.KeyRotation
import Session.Timing.Options
import Session.TransportSecurity
import Time
import Yesod.Core (SessionMap)
import Yesod.Session.Embedding.Map
import Yesod.Session.Embedding.Options
data Options tx m = Options
{ forall (tx :: * -> *) (m :: * -> *). Options tx m -> Text
cookieName :: Text
, forall (tx :: * -> *) (m :: * -> *).
Options tx m -> TimingOptions NominalDiffTime
timing :: TimingOptions NominalDiffTime
, forall (tx :: * -> *) (m :: * -> *).
Options tx m -> TransportSecurity
transportSecurity :: TransportSecurity
, forall (tx :: * -> *) (m :: * -> *).
Options tx m -> SessionEmbeddings
embedding :: SessionEmbeddings
, forall (tx :: * -> *) (m :: * -> *). Options tx m -> m UTCTime
clock :: m UTCTime
, forall (tx :: * -> *) (m :: * -> *).
Options tx m -> m (Randomization tx)
randomization :: m (Randomization tx)
, forall (tx :: * -> *) (m :: * -> *).
Options tx m -> Comparison SessionMap -> Maybe KeyRotation
keyRotationTrigger :: Comparison SessionMap -> Maybe KeyRotation
}
defaultOptions :: Options IO IO
defaultOptions :: Options IO IO
defaultOptions =
Options
{ $sel:cookieName:Options :: Text
cookieName = Text
"session-key"
, $sel:timing:Options :: TimingOptions NominalDiffTime
timing = TimingOptions NominalDiffTime
defaultTimingOptions
, $sel:transportSecurity:Options :: TransportSecurity
transportSecurity = TransportSecurity
AllowPlaintextTranport
, $sel:clock:Options :: IO UTCTime
clock = IO UTCTime
Time.getCurrentTime
, $sel:randomization:Options :: IO (Randomization IO)
randomization = IO (Randomization IO)
defaultRandomization
, $sel:embedding:Options :: SessionEmbeddings
embedding =
SessionEmbeddings
{ $sel:keyRotation:SessionEmbeddings :: SessionMapEmbedding KeyRotation
keyRotation = Text -> SessionMapEmbedding KeyRotation
forall a k.
(Read a, Show a) =>
k -> Embedding (MapOperations k ByteString) () a
showReadKeyEmbedding Text
"session-key-rotation"
, $sel:freeze:SessionEmbeddings :: SessionMapEmbedding SessionFreeze
freeze = Text -> SessionMapEmbedding SessionFreeze
forall a k.
(Read a, Show a) =>
k -> Embedding (MapOperations k ByteString) () a
showReadKeyEmbedding Text
"session-freeze"
}
, $sel:keyRotationTrigger:Options :: Comparison SessionMap -> Maybe KeyRotation
keyRotationTrigger = Maybe KeyRotation -> Comparison SessionMap -> Maybe KeyRotation
forall a b. a -> b -> a
const Maybe KeyRotation
forall a. Maybe a
Nothing
}
hoistOptions
:: Functor m2
=> (forall a. tx1 a -> tx2 a)
-> (forall a. m1 a -> m2 a)
-> Options tx1 m1
-> Options tx2 m2
hoistOptions :: forall (m2 :: * -> *) (tx1 :: * -> *) (tx2 :: * -> *)
(m1 :: * -> *).
Functor m2 =>
(forall a. tx1 a -> tx2 a)
-> (forall a. m1 a -> m2 a) -> Options tx1 m1 -> Options tx2 m2
hoistOptions forall a. tx1 a -> tx2 a
f forall a. m1 a -> m2 a
g Options {m1 UTCTime
m1 (Randomization tx1)
Text
TransportSecurity
TimingOptions NominalDiffTime
SessionEmbeddings
Comparison SessionMap -> Maybe KeyRotation
$sel:cookieName:Options :: forall (tx :: * -> *) (m :: * -> *). Options tx m -> Text
$sel:timing:Options :: forall (tx :: * -> *) (m :: * -> *).
Options tx m -> TimingOptions NominalDiffTime
$sel:transportSecurity:Options :: forall (tx :: * -> *) (m :: * -> *).
Options tx m -> TransportSecurity
$sel:embedding:Options :: forall (tx :: * -> *) (m :: * -> *).
Options tx m -> SessionEmbeddings
$sel:clock:Options :: forall (tx :: * -> *) (m :: * -> *). Options tx m -> m UTCTime
$sel:randomization:Options :: forall (tx :: * -> *) (m :: * -> *).
Options tx m -> m (Randomization tx)
$sel:keyRotationTrigger:Options :: forall (tx :: * -> *) (m :: * -> *).
Options tx m -> Comparison SessionMap -> Maybe KeyRotation
cookieName :: Text
timing :: TimingOptions NominalDiffTime
transportSecurity :: TransportSecurity
embedding :: SessionEmbeddings
clock :: m1 UTCTime
randomization :: m1 (Randomization tx1)
keyRotationTrigger :: Comparison SessionMap -> Maybe KeyRotation
..} =
Options
{ $sel:clock:Options :: m2 UTCTime
clock = m1 UTCTime -> m2 UTCTime
forall a. m1 a -> m2 a
g m1 UTCTime
clock
, $sel:randomization:Options :: m2 (Randomization tx2)
randomization = (forall a. tx1 a -> tx2 a)
-> Randomization tx1 -> Randomization tx2
forall (m :: * -> *) (m' :: * -> *).
(forall a. m a -> m' a) -> Randomization m -> Randomization m'
hoistRandomization tx1 a -> tx2 a
forall a. tx1 a -> tx2 a
f (Randomization tx1 -> Randomization tx2)
-> m2 (Randomization tx1) -> m2 (Randomization tx2)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m1 (Randomization tx1) -> m2 (Randomization tx1)
forall a. m1 a -> m2 a
g m1 (Randomization tx1)
randomization
, Text
TransportSecurity
TimingOptions NominalDiffTime
SessionEmbeddings
Comparison SessionMap -> Maybe KeyRotation
$sel:cookieName:Options :: Text
$sel:timing:Options :: TimingOptions NominalDiffTime
$sel:transportSecurity:Options :: TransportSecurity
$sel:embedding:Options :: SessionEmbeddings
$sel:keyRotationTrigger:Options :: Comparison SessionMap -> Maybe KeyRotation
cookieName :: Text
timing :: TimingOptions NominalDiffTime
transportSecurity :: TransportSecurity
embedding :: SessionEmbeddings
keyRotationTrigger :: Comparison SessionMap -> Maybe KeyRotation
..
}