-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Cookie-based session management for the Simple web framework -- -- Adds cookie-based session management to simple Controllers. To -- add to an application, declare the Controller setting's type an -- instance of HasSession, and wrap routes with -- withSession. For example: -- --
-- data AppSettings = ... -- -- instance HasSession AppSettings where -- ... ---- --
-- controllerApp settings $ withSessions $ do -- routeName \"posts\" $ ... ---- -- Then, in your controllers you can seemlessly get and set keys from the -- session: -- --
-- get "/profile" $ do -- muserId <- sessionLookup "current_user_id" -- case muserIf of -- Nothing -> respond $ redirectTo "/login" -- Just userId -> [handle request] --@package simple-session @version 2.0.0 -- | Adds cookie-based session management to simple Controllers. To -- add to an application, declare the Controller setting's type an -- instance of HasSession, and wrap routes with -- withSession. For example: -- --
-- data AppSettings = ... -- -- instance HasSession AppSettings where -- ... ---- --
-- controllerApp settings $ withSessions $ do -- routeName \"posts\" $ ... --module Web.Simple.Session -- | Plaintext mapping of the session map. Both keys and values are -- ByteStrings. type Session = Map ByteString ByteString -- | Instances of this class can be used as states by a Controller -- to manage cookie-based user sessions. Instances must minimally -- implement getSession and setSession. -- -- By default, the secret session key is taken from the environment -- variable "SESSION_KEY", or a default dummy key is used if the -- environment variable "ENV" is set to "development". You can override -- this behaviour by implementing the sessionKey method. -- -- The default generated cookie always uses the httponly option, -- and the secure option if the request is over HTTPS. You can -- override this behavior, as well as other cookie options (e.g. the -- path, expiration and domain) by implementing the -- sessionBaseCookie method. -- -- If the controller state contains a dedicated field of type 'Maybe -- Session', a reasonable implementation would be: -- --
-- data MyAppSettings = MyAppSettings { myAppSess :: Maybe Session, ...}
--
-- instance HasSession MyAppSettings where
-- getSession = myAppSess <$> controllerState
-- setSession sess = do
-- cs <- controllerState
-- putState $ cs { myAppSess = sess }
--
class HasSession hs
-- | Returns the secret session key. The default implementation uses the
-- "SESSION_KEY" environment variable. If it is not present, and the
-- "ENV" environment variable is set to "development", a dummy, hardcoded
-- key is used.
sessionKey :: HasSession hs => Controller hs ByteString
-- | Returns the cached session for the current request, or nothing if the
-- session has not been set yet for this request.
getSession :: HasSession hs => hs -> Maybe Session
-- | Stores a parsed or changed session for the remainder of the
-- request.This is used both for cached a parsed session cookie as well
-- as for serializing to the "Set-Cookie" header when responding.
setSession :: HasSession hs => Session -> Controller hs ()
sessionBaseCookie :: HasSession hs => Controller hs SetCookie
-- | A middleware wrapper around a Controller that sets the
-- "Set-Cookie" header in the HTTP response if the Session is present,
-- i.e. if it was accessed/modified by the Controller.
withSession :: HasSession hs => Controller hs a -> Controller hs a
-- | Lookup a key from the current Requests session.
sessionLookup :: HasSession hs => ByteString -> Controller hs (Maybe ByteString)
-- | Insert or replace a key in the current Requests session.
sessionInsert :: HasSession hs => ByteString -> ByteString -> Controller hs ()
-- | Remove a key from the current Requests session.
sessionDelete :: HasSession hs => ByteString -> Controller hs ()
-- | Clear the entire Session.
sessionClear :: HasSession hs => Controller hs ()
-- | Returns the current Session, either from the getSession
-- cache or by parsing the cookie from the Request using
-- sessionFromCookie.
session :: HasSession hs => Controller hs Session
-- | Parses and validates a serialized Session given the secret. If
-- the Session is invalid (i.e. the hmac does not match), an empty
-- Session is returned.
parseSession :: ByteString -> ByteString -> Session
-- | Serializes a Session by applying a sha256 hmac with the given
-- secret key to the serialized Session (using
-- renderSimpleQuery), base64 encoding the result, and prepending
-- it to the serialized Session.
dumpSession :: ByteString -> Session -> ByteString
-- | Adds a "Set-Cookie" with the given key-value tuple to the
-- Response. The path set on the cookie is "/", meaning it applies
-- to all routes on the domain, and no expiration is set.
addCookie :: (ByteString, ByteString) -> SetCookie -> Response -> Response
instance Web.Simple.Session.HasSession (GHC.Maybe.Maybe Web.Simple.Session.Session)