11{-# LANGUAGE PatternGuards #-}
22{-# LANGUAGE ScopedTypeVariables #-}
3+ {-# LANGUAGE OverloadedStrings #-}
34module 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
78import Network.URI (URI (.. ))
89import Distribution.Client
910import Distribution.Client.Cron (cron , rethrowSignalsAsExceptions ,
@@ -26,6 +27,7 @@ import Control.Applicative as App
2627import Control.Exception
2728import Control.Monad
2829import Control.Monad.Trans
30+ import qualified Data.ByteString.Char8 as BSS
2931import qualified Data.ByteString.Lazy as BS
3032import qualified Data.Map as M
3133
@@ -51,6 +53,7 @@ import Paths_hackage_server (version)
5153
5254import Data.Aeson (eitherDecode , encode , parseJSON )
5355import Data.Aeson.Types (parseEither )
56+ import Distribution.Server.Framework (resp )
5457
5558data Mode = Help [String ]
5659 | Init URI [URI ]
@@ -878,20 +881,28 @@ uploadResults :: Verbosity -> BuildConfig -> DocInfo -> Maybe FilePath
878881uploadResults verbosity config docInfo
879882 mdocsTarballFile buildReportFile buildLogFile testLogFile coverageFile installOk =
880883 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)))
884884 case mdocsTarballFile of
885885 Nothing -> return ()
886886 Just docsTarballFile ->
887887 putDocsTarball config docInfo docsTarballFile
888888
889889 putBuildFiles config docInfo buildReportFile buildLogFile testLogFile coverageFile installOk
890890
891+ withAuth :: BuildConfig -> Request -> Request
892+ withAuth config req =
893+ noRedirects $ applyBasicAuth (BSS. pack $ bc_username config) (BSS. pack $ bc_password config) req
894+
891895putDocsTarball :: BuildConfig -> DocInfo -> FilePath -> HttpSession ()
892- putDocsTarball config docInfo docsTarballFile =
893- requestPUTFile (docInfoDocsURI config docInfo)
894- " application/x-tar" (Just " gzip" ) docsTarballFile
896+ putDocsTarball config docInfo docsTarballFile = do
897+ body <- liftIO $ BS. readFile docsTarballFile
898+ req <- withAuth config <$> mkUploadRequest " PUT" uri mimetype mEncoding [] body
899+ runRequest req $ \ rsp -> do
900+ rsp' <- responseReadBSL rsp
901+ checkStatus uri rsp'
902+ where
903+ uri = docInfoDocsURI config docInfo
904+ mimetype = " application/x-tar"
905+ mEncoding = Just " gzip"
895906
896907putBuildFiles :: BuildConfig -> DocInfo -> Maybe FilePath
897908 -> FilePath -> Maybe FilePath -> Maybe FilePath -> Bool -> HttpSession ()
@@ -902,22 +913,17 @@ putBuildFiles config docInfo reportFile buildLogFile testLogFile coverageFile in
902913 coverageContent <- liftIO $ traverse readFile coverageFile
903914 let uri = docInfoReports config docInfo
904915 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
916+ let headers = [ (hAccept, BSS. pack " application/json" ) ]
917+ req <- withAuth config <$> mkUploadRequest (BSS. pack " PUT" ) uri " application/json" Nothing headers body
918+ runRequest req $ \ rsp -> do
919+ case statusCode $ responseStatus rsp of
920+ -- TODO: fix server to not do give 303, 201 is more appropriate
921+ 303 -> return ()
922+ _ -> do rsp' <- responseReadBSL rsp
923+ checkStatus uri rsp'
917924 fail " Unexpected response from server."
918925
919926
920-
921927-------------------------
922928-- Command line handling
923929-------------------------
0 commit comments