module Hack.Handler.Kibro (run) where import Hack import Kibro import Network.CGI hiding (Html) import Network.URI import Data.Default import Prelude hiding ((.), (^)) import MPSUTF8 import System.IO get_env = do uri <- requestURI request_method' <- requestMethod let script_name' = "" let path_info' = uri.uriPath let query_string' = uri.uriQuery server_name' <- serverName server_port' <- serverPort hack_input' <- getBody def { request_method = request_method'.read , script_name = script_name' , path_info = path_info' , query_string = query_string'.remove_question_mark , server_name = server_name' , server_port = server_port' , hack_input = hack_input' , hack_errors = \x -> hPutStr stderr (x.u2b) } .return where remove_question_mark = dropWhile (is '?') handle app = do env <- get_env response <- app env .liftIO -- set response response.headers.mapM_ (splash setHeader) response.status.show.setHeader "Status" response.body.output run :: Application -> IO () run app = startKibro [("", handle app)]