module Web.Spock.Shared
(
runSpock, spockAsApp
, SpockAction, ActionT
, request, header, cookie
, preferredFormat, ClientPreferredFormat(..)
, body, jsonBody, jsonBody'
, files, UploadedFile (..)
, params, param, param'
, setStatus, setHeader, redirect, jumpNext, setCookie, setCookie', deleteCookie, bytes, lazyBytes
, text, html, file, json, stream, response
, middlewarePass, modifyVault, queryVault
, PoolOrConn (..), ConnBuilder (..), PoolCfg (..)
, HasSpock (runQuery, getState), SpockConn, SpockState, SpockSession
, requireBasicAuth
, SessionCfg (..), SessionPersistCfg(..), SessionId
, readShowSessionPersist
, getSessionId, readSession, writeSession, modifySession, clearAllSessions
, getSpockHeart, runSpockIO, WebStateM, WebState
)
where
import Web.Spock.Internal.Monad
import Web.Spock.Internal.SessionManager
import Web.Spock.Internal.Types
import Web.Spock.Internal.CoreAction
import Control.Monad
import System.Directory
import qualified Web.Spock.Internal.Wire as W
import qualified Network.Wai as Wai
import qualified Network.Wai.Handler.Warp as Warp
runSpock :: Warp.Port -> IO Wai.Middleware -> IO ()
runSpock port mw =
do putStrLn ("Spock is running on port " ++ show port)
app <- spockAsApp mw
Warp.run port app
spockAsApp :: IO Wai.Middleware -> IO Wai.Application
spockAsApp = liftM W.middlewareToApp
getSessionId :: SpockAction conn sess st SessionId
getSessionId =
getSessMgr >>= sm_getSessionId
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
readShowSessionPersist :: (Read a, Show a) => FilePath -> SessionPersistCfg a
readShowSessionPersist fp =
SessionPersistCfg
{ spc_load =
do isThere <- doesFileExist fp
if isThere
then do str <- readFile fp
return (read str)
else return []
, spc_store = writeFile fp . show
}