schedule-planner-1.0.1.0: src/SchedulePlanner/Server.hs
{-# LANGUAGE OverloadedStrings #-}
{-|
Module : $Header$
Description : functions necessary for deploying the application as a webservice
Copyright : (c) Justus Adam, 2015
License : LGPL-3
Maintainer : development@justusadam.com
Stability : experimental
Portability : POSIX
Uses happstack and blaze to create a deployable service instance of this software.
-}
module SchedulePlanner.Server (server, app) where
import Network.Wai.Handler.Warp (run)
import Network.Wai (responseLBS, lazyRequestBody,
Application, requestHeaders)
import Data.ByteString.Lazy (ByteString)
import Network.HTTP.Types (status200, HeaderName, Header,
methodPost, methodOptions)
import qualified Data.ByteString as BS (ByteString, intercalate)
{-|
The 'Application' used for the server instance.
-}
app :: (ByteString -> ByteString) -> Application
app app' request respond =
lazyRequestBody request >>=
respond . responseLBS status200 headers . app'
where
headers = [
("Access-Control-Allow-Origin", "http://justus.science"),
("Access-Control-Allow-Methods", "POST"),
("Access-Control-Allow-Headers", "Content-Type")
]
{-|
Run the server.
-}
server :: Int -> (ByteString -> ByteString) -> IO ()
server port = run port . app