packages feed

yesod-session-persist-0.0.0.2: internal/Session/Timing/Timeout.hs

module Session.Timing.Timeout
  ( Timeout (..)
  , defaultTimeout
  ) where

import Internal.Prelude

import Time

-- | How long sessions are allowed to live
--
-- See 'defaultTimeout'.
data Timeout a = Timeout
  { idle :: Maybe a
  -- ^ The amount of time a session will remain active in case there
  --   is no activity in the session
  --
  -- This is used both on the client side (by setting the cookie expires fields)
  -- and on the server.
  --
  -- Setting to 'Nothing' removes the idle timeout.
  , absolute :: Maybe a
  -- ^ The maximum amount of time a session can be active
  --
  -- This is used both on the client side (by setting the cookie expires fields)
  -- and on the server side.
  --
  -- Setting to 'Nothing' removes the absolute timeout.
  }
  deriving stock (Eq, Show, Generic, Functor)

instance Arbitrary a => Arbitrary (Timeout a) where
  arbitrary = genericArbitrary
  shrink = genericShrink

-- | Default timeouts
--
--   - idle = 8 hours
--   - absolute = 30 days
defaultTimeout :: Timeout NominalDiffTime
defaultTimeout =
  Timeout
    { idle = Just $ hours 8
    , absolute = Just $ days 30
    }