tsweb-0.1.0.0: src/Example/Main.hs
module Example.Main where
import Example.Types
import Example.Views
import TsWeb.Routing (dbwrite, get, getpost, path, post, runroute)
import TsWeb.Routing.Auth (auth)
import TsWeb.Session (patchConfig)
import TsWeb.Types (TsWebStateM)
import TsWeb.Types.Db (ReadOnlyPool, ReadWritePool, pool)
import qualified Web.Spock as Spock
import Web.Spock ((<//>), root, text, var)
import Web.Spock.Config (PoolOrConn(..), defaultSpockCfg, spc_csrfProtection)
import Web.Spock.Core (SpockCtxT)
main :: IO ()
main = do
rwpool <- pool "localhost" "tsweb" "tsweb" 1 12 1
ropool <- pool "localhost" "tsweb" "tsweb" 1 12 1
spockCfg <-
patchConfig (_dbSession db) ropool rwpool <$>
defaultSpockCfg sess PCNoDatabase ()
Spock.runSpock
8080
(Spock.spock (spockCfg {spc_csrfProtection = False}) (routes ropool rwpool))
where
sess :: SessionData
sess = SessionData (UserId Nothing) False
routes ::
ReadOnlyPool -> ReadWritePool -> SpockCtxT () (TsWebStateM SessionData) ()
routes ropool rwpool =
runroute ropool rwpool $
path
#root
root
(do get index
get $ auth userP userindex
get $ auth adminP adminindex
post $ text "post\n") .
path #admin "admin" (get $ auth adminP adminindex) .
path #users "users" (getpost users) .
path
#user
("users" <//> var)
(do TsWeb.Routing.get $ viewuser
dbwrite $ post makeuser) .
path #login ("login" <//> var) (post login) .
path #logind "login" (get loginstat) . path #logout "logout" (getpost logout)