{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-} module App where ------------------------------------------------------------------------------ import Control.Lens import Control.Monad import Prelude hiding (catch) ------------------------------------------------------------------------------ import Snap import Snap.Snaplet.Auth import Snap.Snaplet.Session import Snap.Snaplet.SqliteSimple import Snap.Snaplet.Auth.Backends.SqliteSimple import Snap.Snaplet.Session.Backends.CookieSession ------------------------------------------------------------------------------ data App = App { _sess :: Snaplet SessionManager , _db :: Snaplet Sqlite , _auth :: Snaplet (AuthManager App) } makeLenses ''App instance HasSqlite (Handler b App) where getSqliteState = with db get ------------------------------------------------------------------------------ appInit :: SnapletInit App App appInit = makeSnaplet "app" "Test application" Nothing $ do s <- nestSnaplet "sess" sess $ initCookieSessionManager "site_key.txt" "sess" (Just 3600) -- Initialize auth that's backed by an sqlite database d <- nestSnaplet "db" db sqliteInit a <- nestSnaplet "auth" auth $ initSqliteAuth sess d return $ App s d a