module Main where import Data.Maybe import Data.Record.Label import Control.Concurrent.STM import Control.Concurrent import Control.Monad.State import Network.Protocol.Http import Network.Protocol.Uri import Network.Salvia.Httpd import Network.Salvia.Handlers.Default import Network.Salvia.Handlers.Printer import Network.Salvia.Handlers.Error import Network.Salvia.Handlers.FileSystem import Network.Salvia.Handlers.Redirect import Network.Salvia.Advanced.ExtendedFileSystem import Network.Salvia.Handlers.Login (readUserDatabase, UserPayload) import Network.Salvia.Handlers.Session (mkSessions, Sessions) import Network.Salvia.Handlers.PathRouter import Network.Salvia.Handlers.File {- turn of logging? [127.0.0.1:4958] 0 GET /zoe -> ?[32m200 OK?[0;39;49m error "AAAAp" in Parser.hs -} -- these requests fail: -- localhost:8080/?commands=[ -- localhost:8080/?commands=%5b main = do { let handler = do { params <- hParameters ; liftIO $ putStrLn $ show params ; let commandsStr = case lookup "commands" params of Just (Just commandsStr) -> commandsStr _ -> "" ; sendStr $ "CommandsString is " ++ commandsStr } ; defaultC <- defaultConfig ; tId <- forkIO $ start (defaultC {listenPort = 8080}) $ hSimple handler ; putStrLn "Press to terminate server" ; getLine ; killThread tId } hFakeDir :: FilePath -> Handler () -> Handler () -> Handler () hFakeDir dir handler def = hPath dir (hRedirect $ fromJust $ parseURI (dir ++ "/")) $ hPrefix dir handler $ def {- hPathRouter [ ("/", hFileResource "editor.xml") , ("/favicon.ico", hFileResource "favicon.ico") ] $ hFakeDir "/img" (hFileSystem "img") $ hFakeDir "/handle" (do { liftIO $ putStrLn "handle" ; params <- hParameters ; liftIO $ putStrLn $ show params ; let commandsStr = case lookup "commands" params of Just (Just commandsStr) -> commandsStr _ -> "" ; sendStr $ "CommandsString is " ++ commandsStr }) $ do { badRequest <- getM (path % uri % request) ; hCustomError BadRequest $ "Unhandled request" ++ show badRequest } main = do { defaultC <- defaultConfig ; count <- atomically $ newTVar 0 ; let myHandler = const $ -- hExtendedFileSystem "." do { -- req <- gets request ; --if (null $ path $ uri req) || (last $ path $ uri req) /= '/' --then hRedirect (modPath (++"/") $ uri req) --else dirHandler dirName ; sendStrLn $ "foekoe" -- ++ show (queryParams (uri req)) } ; sessions <- mkSessions :: IO (Sessions (UserPayload ())) ; start (defaultC {listenPort = 8080}) $ hDefault count sessions myHandler -- ; start (defaultC {listenPort = 8080}) $ hExtendedFileSystem "." } -} {- does not work: ; start (defaultC {listenPort = 8080}) $ do { hPrinter ; hError BadRequest ; sendStrLn [] ; sendStrLn "bla" ; error "handler" } -} {- do { s <- get ; liftIO $ putStrLn $ show $ request s ; liftIO $ putStrLn $ show $ response s ; liftIO $ putStrLn $ show $ sock s ; liftIO $ putStrLn $ show $ address s ; sendHeaders ; return () } -}