Skip to content

Commit 16b318f

Browse files
authored
Merge pull request #1385 from haskell/wip/doc-builder-tls
BuildClient: Port to http-client-tls
2 parents 2b8e5f6 + 795b85c commit 16b318f

File tree

3 files changed

+160
-135
lines changed

3 files changed

+160
-135
lines changed

exes/BuildClient.hs

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
{-# LANGUAGE PatternGuards #-}
22
{-# LANGUAGE ScopedTypeVariables #-}
3+
{-# LANGUAGE OverloadedStrings #-}
34
module Main (main) where
45

5-
import Network.HTTP hiding (password)
6-
import Network.Browser
6+
import Network.HTTP.Types.Header
7+
import Network.HTTP.Types.Status
78
import Network.URI (URI(..))
89
import Distribution.Client
910
import Distribution.Client.Cron (cron, rethrowSignalsAsExceptions,
@@ -26,6 +27,7 @@ import Control.Applicative as App
2627
import Control.Exception
2728
import Control.Monad
2829
import Control.Monad.Trans
30+
import qualified Data.ByteString.Char8 as BSS
2931
import qualified Data.ByteString.Lazy as BS
3032
import qualified Data.Map as M
3133

@@ -878,20 +880,28 @@ uploadResults :: Verbosity -> BuildConfig -> DocInfo -> Maybe FilePath
878880
uploadResults verbosity config docInfo
879881
mdocsTarballFile buildReportFile buildLogFile testLogFile coverageFile installOk =
880882
httpSession verbosity "hackage-build" version $ do
881-
-- Make sure we authenticate to Hackage
882-
setAuthorityGen (provideAuthInfo (bc_srcURI config)
883-
(Just (bc_username config, bc_password config)))
884883
case mdocsTarballFile of
885884
Nothing -> return ()
886885
Just docsTarballFile ->
887886
putDocsTarball config docInfo docsTarballFile
888887

889888
putBuildFiles config docInfo buildReportFile buildLogFile testLogFile coverageFile installOk
890889

890+
withAuth :: BuildConfig -> Request -> Request
891+
withAuth config req =
892+
noRedirects $ applyBasicAuth (BSS.pack $ bc_username config) (BSS.pack $ bc_password config) req
893+
891894
putDocsTarball :: BuildConfig -> DocInfo -> FilePath -> HttpSession ()
892-
putDocsTarball config docInfo docsTarballFile =
893-
requestPUTFile (docInfoDocsURI config docInfo)
894-
"application/x-tar" (Just "gzip") docsTarballFile
895+
putDocsTarball config docInfo docsTarballFile = do
896+
body <- liftIO $ BS.readFile docsTarballFile
897+
req <- withAuth config <$> mkUploadRequest "PUT" uri mimetype mEncoding [] body
898+
runRequest req $ \rsp -> do
899+
rsp' <- responseReadBSL rsp
900+
checkStatus uri rsp'
901+
where
902+
uri = docInfoDocsURI config docInfo
903+
mimetype = "application/x-tar"
904+
mEncoding = Just "gzip"
895905

896906
putBuildFiles :: BuildConfig -> DocInfo -> Maybe FilePath
897907
-> FilePath -> Maybe FilePath -> Maybe FilePath -> Bool -> HttpSession ()
@@ -902,22 +912,17 @@ putBuildFiles config docInfo reportFile buildLogFile testLogFile coverageFile in
902912
coverageContent <- liftIO $ traverse readFile coverageFile
903913
let uri = docInfoReports config docInfo
904914
body = encode $ BR.BuildFiles reportContent (Just logContent) testContent coverageContent (not installOk)
905-
setAllowRedirects False
906-
(_, response) <- request Request {
907-
rqURI = uri,
908-
rqMethod = PUT,
909-
rqHeaders = [Header HdrContentType "application/json",
910-
Header HdrContentLength (show (BS.length body))],
911-
rqBody = body
912-
}
913-
case rspCode response of
914-
--TODO: fix server to not do give 303, 201 is more appropriate
915-
(3,0,3) -> return ()
916-
_ -> do checkStatus uri response
915+
let headers = [ (hAccept, BSS.pack "application/json") ]
916+
req <- withAuth config <$> mkUploadRequest (BSS.pack "PUT") uri "application/json" Nothing headers body
917+
runRequest req $ \rsp -> do
918+
case statusCode $ responseStatus rsp of
919+
--TODO: fix server to not do give 303, 201 is more appropriate
920+
303 -> return ()
921+
_ -> do rsp' <- responseReadBSL rsp
922+
checkStatus uri rsp'
917923
fail "Unexpected response from server."
918924

919925

920-
921926
-------------------------
922927
-- Command line handling
923928
-------------------------

hackage-server.cabal

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,9 @@ library
409409
build-depends:
410410
, HStringTemplate ^>= 0.8
411411
, HTTP ^>= 4000.3.16 || ^>= 4000.4.1
412+
, http-client ^>= 0.7 && < 0.8
413+
, http-client-tls ^>= 0.3
414+
, http-types >= 0.10 && < 0.13
412415
, QuickCheck >= 2.14 && < 2.16
413416
, acid-state ^>= 0.16
414417
, async ^>= 2.2.1
@@ -454,6 +457,7 @@ library
454457
, stm ^>= 2.5.0
455458
, stringsearch ^>= 0.3.6.6
456459
, tagged ^>= 0.8.5
460+
, transformers ^>= 0.6
457461
, xhtml >= 3000.2.0.0 && < 3000.4
458462
, xmlgen ^>= 0.6
459463
, xss-sanitize ^>= 0.3.6
@@ -506,7 +510,7 @@ executable hackage-build
506510

507511
build-depends:
508512
-- version constraints inherited from hackage-server
509-
, HTTP
513+
, http-types
510514

511515
-- Runtime dependency only;
512516
-- TODO: we have no proper support for this kind of dependencies in cabal

0 commit comments

Comments
 (0)