packages feed

tighttp-0.0.0.0: examples/gets.hs

{-# LANGUAGE OverloadedStrings, PackageImports #-}

import Control.Applicative
import Control.Monad
import "monads-tf" Control.Monad.Trans
import System.Environment
import Data.Pipe
import Network
import Network.TigHTTP.Client
import Network.TigHTTP.Types
import Network.PeyoTLS.ReadFile
import "crypto-random" Crypto.Random

import qualified Data.ByteString as BS
import qualified Network.PeyoTLS.Client as P

main :: IO ()
main = do
	addr : pth : _ <- getArgs
	ca <- readCertificateStore [
		"cacert.sample_pem",
		"/etc/ssl/certs/GeoTrust_Global_CA.pem",
		"/etc/ssl/certs/DigiCert_High_Assurance_EV_Root_CA.pem",
		"/etc/ssl/certs/GlobalSign_Root_CA.pem" ]
	h <- connectTo addr $ PortNumber 443
	g <- cprgCreate <$> createEntropyPool :: IO SystemRNG
	(`P.run` g) $ do
		t <- P.open' h addr ["TLS_RSA_WITH_AES_128_CBC_SHA"] [] ca
		P.getNames t >>= liftIO . print
		p <- request t $ get addr 443 pth
		void . runPipe $
			responseBody p =$= (printP `finally` liftIO (putStrLn ""))

printP :: MonadIO m => Pipe BS.ByteString () m ()
printP = await >>= maybe (return ()) (\s -> liftIO (BS.putStr s) >> printP)