packages feed

warp-tls-uid-0.1.0.0: src-test/testWarpTLS.hs

{-# LANGUAGE PackageImports, OverloadedStrings, RankNTypes, KindSignatures #-}

import Data.Function (on)

import Network.Wai.Handler.WarpTLS.UID (runTLSSocketWithID, tlsSettings, Group, User)
-- import Network.Wai.Handler.WarpTLS (runTLSSocket, tlsSettings)

import Data.Char
import Control.Applicative
import Control.Exception
import System.Environment

import Data.Conduit.Network (bindPort)

import Network.Socket (sClose)
import Network.HTTP.Types.Status (status200)
import Network.Wai (responseLBS) -- (Response, responseLBS, Application)
import Network.Wai.Handler.Warp (HostPreference(HostAny), defaultSettings)

cutSpaces :: String -> String
cutSpaces = takeWhile $ not . isSpace

guid :: (Group, User)
guid = ("yesod", "yesod")

main :: IO ()
main = do
	args <- getArgs
	tlss <- case args of
		[crt, key] -> return $ tlsSettings crt key
		[] -> (tlsSettings `on` cutSpaces)
			<$> readFile "crt.path"
			<*> readFile "key.path"
		_ -> error "wrong argument number"
	bracket (bindPort 3000 HostAny) sClose $ \sock ->
		runTLSSocketWithID tlss defaultSettings sock guid $ \_ -> do
				print ("hello" :: String)
				return $ responseLBS status200
					[("Content-Type", "text/plain")] "PONG"