Skip to content
Snippets Groups Projects
Commit 0863b468 authored by Duncan Coutts's avatar Duncan Coutts Committed by Mikhail Glushenkov
Browse files

Force cabal upload to always use digest auth and never basic auth.

(cherry picked from commit 3d1e7dbd)
parent 71efef51
No related branches found
No related tags found
No related merge requests found
...@@ -17,8 +17,8 @@ import Network.HTTP.Proxy ( Proxy(..), fetchProxy) ...@@ -17,8 +17,8 @@ import Network.HTTP.Proxy ( Proxy(..), fetchProxy)
import Network.URI import Network.URI
( URI (..), URIAuth (..) ) ( URI (..), URIAuth (..) )
import Network.Browser import Network.Browser
( BrowserAction, browse ( BrowserAction, browse, setAllowBasicAuth, setAuthorityGen
, setOutHandler, setErrHandler, setProxy, setAuthorityGen, request) , setOutHandler, setErrHandler, setProxy, request)
import Network.Stream import Network.Stream
( Result, ConnError(..) ) ( Result, ConnError(..) )
import Control.Monad import Control.Monad
...@@ -76,10 +76,10 @@ getHTTP :: Verbosity ...@@ -76,10 +76,10 @@ getHTTP :: Verbosity
-> Maybe String -- ^ Optional etag to check if we already have the latest file. -> Maybe String -- ^ Optional etag to check if we already have the latest file.
-> IO (Result (Response ByteString)) -> IO (Result (Response ByteString))
getHTTP verbosity uri etag = liftM (\(_, resp) -> Right resp) $ getHTTP verbosity uri etag = liftM (\(_, resp) -> Right resp) $
cabalBrowse verbosity (return ()) (request (mkRequest uri etag)) cabalBrowse verbosity Nothing (request (mkRequest uri etag))
cabalBrowse :: Verbosity cabalBrowse :: Verbosity
-> BrowserAction s () -> Maybe (String, String)
-> BrowserAction s a -> BrowserAction s a
-> IO a -> IO a
cabalBrowse verbosity auth act = do cabalBrowse verbosity auth act = do
...@@ -88,8 +88,8 @@ cabalBrowse verbosity auth act = do ...@@ -88,8 +88,8 @@ cabalBrowse verbosity auth act = do
setProxy p setProxy p
setErrHandler (warn verbosity . ("http error: "++)) setErrHandler (warn verbosity . ("http error: "++))
setOutHandler (debug verbosity) setOutHandler (debug verbosity)
auth setAllowBasicAuth False
setAuthorityGen (\_ _ -> return Nothing) setAuthorityGen (\_ _ -> return auth)
act act
downloadURI :: Verbosity downloadURI :: Verbosity
......
...@@ -15,12 +15,10 @@ import qualified Distribution.Client.BuildReports.Anonymous as BuildReport ...@@ -15,12 +15,10 @@ import qualified Distribution.Client.BuildReports.Anonymous as BuildReport
import qualified Distribution.Client.BuildReports.Upload as BuildReport import qualified Distribution.Client.BuildReports.Upload as BuildReport
import Network.Browser import Network.Browser
( BrowserAction, request ( request )
, Authority(..), addAuthority )
import Network.HTTP import Network.HTTP
( Header(..), HeaderName(..), findHeader ( Header(..), HeaderName(..), findHeader
, Request(..), RequestMethod(..), Response(..) ) , Request(..), RequestMethod(..), Response(..) )
import Network.TCP (HandleStream)
import Network.URI (URI(uriPath), parseURI) import Network.URI (URI(uriPath), parseURI)
import Data.Char (intToDigit) import Data.Char (intToDigit)
...@@ -51,12 +49,7 @@ upload verbosity repos mUsername mPassword paths = do ...@@ -51,12 +49,7 @@ upload verbosity repos mUsername mPassword paths = do
else targetRepoURI{uriPath = uriPath targetRepoURI `FilePath.Posix.combine` "upload"} else targetRepoURI{uriPath = uriPath targetRepoURI `FilePath.Posix.combine` "upload"}
Username username <- maybe promptUsername return mUsername Username username <- maybe promptUsername return mUsername
Password password <- maybe promptPassword return mPassword Password password <- maybe promptPassword return mPassword
let auth = addAuthority AuthBasic { let auth = Just (username, password)
auRealm = "Hackage",
auUsername = username,
auPassword = password,
auSite = uploadURI
}
flip mapM_ paths $ \path -> do flip mapM_ paths $ \path -> do
notice verbosity $ "Uploading " ++ path ++ "... " notice verbosity $ "Uploading " ++ path ++ "... "
handlePackage verbosity uploadURI auth path handlePackage verbosity uploadURI auth path
...@@ -82,17 +75,9 @@ promptPassword = do ...@@ -82,17 +75,9 @@ promptPassword = do
report :: Verbosity -> [Repo] -> Maybe Username -> Maybe Password -> IO () report :: Verbosity -> [Repo] -> Maybe Username -> Maybe Password -> IO ()
report verbosity repos mUsername mPassword = do report verbosity repos mUsername mPassword = do
let uploadURI = if isOldHackageURI targetRepoURI
then legacyUploadURI
else targetRepoURI{uriPath = ""}
Username username <- maybe promptUsername return mUsername Username username <- maybe promptUsername return mUsername
Password password <- maybe promptPassword return mPassword Password password <- maybe promptPassword return mPassword
let auth = addAuthority AuthBasic { let auth = Just (username, password)
auRealm = "Hackage",
auUsername = username,
auPassword = password,
auSite = uploadURI
}
forM_ repos $ \repo -> case repoKind repo of forM_ repos $ \repo -> case repoKind repo of
Left remoteRepo Left remoteRepo
-> do dotCabal <- defaultCabalDir -> do dotCabal <- defaultCabalDir
...@@ -111,16 +96,14 @@ report verbosity repos mUsername mPassword = do ...@@ -111,16 +96,14 @@ report verbosity repos mUsername mPassword = do
cabalBrowse verbosity auth $ BuildReport.uploadReports (remoteRepoURI remoteRepo) [(report', Just buildLog)] cabalBrowse verbosity auth $ BuildReport.uploadReports (remoteRepoURI remoteRepo) [(report', Just buildLog)]
return () return ()
Right{} -> return () Right{} -> return ()
where
targetRepoURI = remoteRepoURI $ last [ remoteRepo | Left remoteRepo <- map repoKind repos ] --FIXME: better error message when no repos are given
check :: Verbosity -> [FilePath] -> IO () check :: Verbosity -> [FilePath] -> IO ()
check verbosity paths = do check verbosity paths = do
flip mapM_ paths $ \path -> do flip mapM_ paths $ \path -> do
notice verbosity $ "Checking " ++ path ++ "... " notice verbosity $ "Checking " ++ path ++ "... "
handlePackage verbosity checkURI (return ()) path handlePackage verbosity checkURI Nothing path
handlePackage :: Verbosity -> URI -> BrowserAction (HandleStream String) () handlePackage :: Verbosity -> URI -> Maybe (String, String)
-> FilePath -> IO () -> FilePath -> IO ()
handlePackage verbosity uri auth path = handlePackage verbosity uri auth path =
do req <- mkRequest uri path do req <- mkRequest uri path
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment