mirror of
https://github.com/typeable/wai.git
synced 2025-01-03 19:53:02 +03:00
81 lines
2.3 KiB
Haskell
81 lines
2.3 KiB
Haskell
{-# LANGUAGE OverloadedStrings #-}
|
|
import Network.Wai
|
|
import Network.Wai.Handler.Warp (defaultSettings, setPort)
|
|
import Network.Wai.Handler.WarpTLS
|
|
import Network.HTTP.Types (status200)
|
|
import Blaze.ByteString.Builder (copyByteString)
|
|
import Data.Monoid
|
|
import qualified Data.Conduit as C
|
|
import qualified Data.Conduit.List as CL
|
|
import Network.HTTP.ReverseProxy
|
|
import Network.HTTP.Conduit
|
|
|
|
main = do
|
|
putStrLn "https://localhost:3009/"
|
|
--manager <- newManager def
|
|
runTLS (tlsSettings "certificate.pem" "key.pem")
|
|
{ onInsecure = AllowInsecure
|
|
} (setPort 3009 defaultSettings) app
|
|
|
|
app req f = f $
|
|
case rawPathInfo req of
|
|
"/builder/withlen" -> builderWithLen
|
|
"/builder/nolen" -> builderNoLen
|
|
"/file/withlen" -> fileWithLen
|
|
"/file/nolen" -> fileNoLen
|
|
"/source/withlen" -> sourceWithLen
|
|
"/source/nolen" -> sourceNoLen
|
|
"/secure" -> responseLBS status200 [] $ if isSecure req then "secure" else "insecure"
|
|
x -> index x
|
|
|
|
builderWithLen = responseBuilder
|
|
status200
|
|
[ ("Content-Type", "text/plain")
|
|
, ("Content-Length", "4")
|
|
]
|
|
$ copyByteString "PONG"
|
|
|
|
builderNoLen = responseBuilder
|
|
status200
|
|
[ ("Content-Type", "text/plain")
|
|
]
|
|
$ copyByteString "PONG"
|
|
|
|
sourceWithLen = responseStream
|
|
status200
|
|
[ ("Content-Type", "text/plain")
|
|
, ("Content-Length", "4")
|
|
]
|
|
$ \sendChunk _flush -> sendChunk $ copyByteString "PONG"
|
|
|
|
sourceNoLen = responseStream
|
|
status200
|
|
[ ("Content-Type", "text/plain")
|
|
]
|
|
$ \sendChunk _flush -> sendChunk $ copyByteString "PONG"
|
|
|
|
fileWithLen = responseFile
|
|
status200
|
|
[ ("Content-Type", "text/plain")
|
|
, ("Content-Length", "4")
|
|
]
|
|
"pong.txt"
|
|
Nothing
|
|
|
|
fileNoLen = responseFile
|
|
status200
|
|
[ ("Content-Type", "text/plain")
|
|
]
|
|
"pong.txt"
|
|
Nothing
|
|
|
|
index p = responseBuilder status200 [("Content-Type", "text/html")] $ mconcat $ map copyByteString
|
|
[ "<p><a href='/builder/withlen'>builder withlen</a></p>\n"
|
|
, "<p><a href='/builder/nolen'>builder nolen</a></p>\n"
|
|
, "<p><a href='/file/withlen'>file withlen</a></p>\n"
|
|
, "<p><a href='/file/nolen'>file nolen</a></p>\n"
|
|
, "<p><a href='/source/withlen'>source withlen</a></p>\n"
|
|
, "<p><a href='/source/nolen'>source nolen</a></p>\n"
|
|
, p
|
|
]
|