module Yesod.Session.Cookie.Logic
( setCookie
, CookieContext (..)
) where
import Internal.Prelude
import Yesod.Core.Types (Header)
import Yesod.Session.Cookie.SetCookie
import Yesod.Session.Options
import Yesod.Session.SaveResult
import Yesod.Session.SessionType
data CookieContext = CookieContext
{ CookieContext -> Maybe ByteString
cookie :: Maybe ByteString
, CookieContext -> Maybe Session
load :: Maybe Session
, CookieContext -> SaveResult Session
save :: SaveResult Session
}
setCookie :: Options tx m -> CookieContext -> [Header]
setCookie :: forall (tx :: * -> *) (m :: * -> *).
Options tx m -> CookieContext -> [Header]
setCookie Options tx m
options = \case
CookieContext {$sel:save:CookieContext :: CookieContext -> SaveResult Session
save = SaveResult Session
Frozen} ->
[]
CookieContext {$sel:save:CookieContext :: CookieContext -> SaveResult Session
save = SaveResult Session
Deleted} ->
Maybe Session -> [Header]
cookiesForSession Maybe Session
forall a. Maybe a
Nothing
CookieContext {$sel:save:CookieContext :: CookieContext -> SaveResult Session
save = Saved Session
s} ->
Maybe Session -> [Header]
cookiesForSession (Session -> Maybe Session
forall a. a -> Maybe a
Just Session
s)
CookieContext {$sel:save:CookieContext :: CookieContext -> SaveResult Session
save = SaveResult Session
NoChange, $sel:load:CookieContext :: CookieContext -> Maybe Session
load = Just Session
s} ->
Maybe Session -> [Header]
cookiesForSession (Session -> Maybe Session
forall a. a -> Maybe a
Just Session
s)
CookieContext {$sel:save:CookieContext :: CookieContext -> SaveResult Session
save = SaveResult Session
NoChange, $sel:load:CookieContext :: CookieContext -> Maybe Session
load = Maybe Session
Nothing, $sel:cookie:CookieContext :: CookieContext -> Maybe ByteString
cookie = Maybe ByteString
Nothing} ->
[]
CookieContext {$sel:save:CookieContext :: CookieContext -> SaveResult Session
save = SaveResult Session
NoChange, $sel:load:CookieContext :: CookieContext -> Maybe Session
load = Maybe Session
Nothing, $sel:cookie:CookieContext :: CookieContext -> Maybe ByteString
cookie = Just ByteString
_} ->
Maybe Session -> [Header]
cookiesForSession Maybe Session
forall a. Maybe a
Nothing
where
cookiesForSession :: Maybe Session -> [Header]
cookiesForSession :: Maybe Session -> [Header]
cookiesForSession = Options tx m -> Maybe (SessionKey, Time UTCTime) -> [Header]
forall (tx :: * -> *) (m :: * -> *).
Options tx m -> Maybe (SessionKey, Time UTCTime) -> [Header]
makeSetCookieHeaders Options tx m
options (Maybe (SessionKey, Time UTCTime) -> [Header])
-> (Maybe Session -> Maybe (SessionKey, Time UTCTime))
-> Maybe Session
-> [Header]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Session -> (SessionKey, Time UTCTime))
-> Maybe Session -> Maybe (SessionKey, Time UTCTime)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Session
s -> (Session
s.key, Session
s.time))