module Web.Spock
(
spock, SpockM, SpockAction
, spockT, SpockT, ActionT
, get, post, C.head, put, delete, patch, defRoute
, subcomponent, Http.StdMethod (..)
, combineRoute
, request, header, cookie, body, jsonBody, jsonBody', files, UploadedFile (..)
, params, param, param'
, setStatus, setHeader, redirect, jumpNext, setCookie, setCookie', bytes, lazyBytes
, text, html, file, json, blaze
, middleware
, PoolOrConn (..), ConnBuilder (..), PoolCfg (..)
, HasSpock (runQuery, getState), SpockConn, SpockState, SpockSession
, SessionCfg (..)
, readSession, writeSession, modifySession, clearAllSessions
, requireBasicAuth
, SafeAction (..)
, safeActionPath
, runForm
, getSpockHeart, runSpockIO, WebStateM, WebState
)
where
import Web.Spock.Core
import Web.Spock.Digestive
import Web.Spock.Monad
import Web.Spock.SafeActions
import Web.Spock.SessionManager
import Web.Spock.Types
import qualified Web.Spock.Core as C
import Control.Monad.Trans.Reader
import Control.Monad.Trans.Resource
import Data.Pool
import qualified Network.HTTP.Types as Http
spock :: Int -> SessionCfg sess -> PoolOrConn conn -> st -> SpockM conn sess st () -> IO ()
spock port sessionCfg poolOrConn initialState defs =
do sessionMgr <- createSessionManager sessionCfg
connectionPool <-
case poolOrConn of
PCPool p ->
return p
PCConn cb ->
let pc = cb_poolConfiguration cb
in createPool (cb_createConn cb) (cb_destroyConn cb)
(pc_stripes pc) (pc_keepOpenTime pc)
(pc_resPerStripe pc)
let internalState =
WebState
{ web_dbConn = connectionPool
, web_sessionMgr = sessionMgr
, web_state = initialState
}
runM m = runResourceT $ runReaderT (runWebStateM m) internalState
spockT port runM $
do hookSafeActions
defs
middleware (sm_middleware sessionMgr)
writeSession :: sess -> SpockAction conn sess st ()
writeSession d =
do mgr <- getSessMgr
(sm_writeSession mgr) d
modifySession :: (sess -> sess) -> SpockAction conn sess st ()
modifySession f =
do mgr <- getSessMgr
(sm_modifySession mgr) f
readSession :: SpockAction conn sess st sess
readSession =
do mgr <- getSessMgr
sm_readSession mgr
clearAllSessions :: SpockAction conn sess st ()
clearAllSessions =
do mgr <- getSessMgr
sm_clearAllSessions mgr