diff --git a/CHANGELOG b/CHANGELOG index 80138b8b79..d9b7e2df1c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,8 @@ git-annex (10.20240732) UNRELEASED; urgency=medium last version. * When proxying an upload to a special remote, verify the hash. * Avoid loading cluster log at startup. + * When getting from a P2P HTTP remote, prompt for credentials when + required, instead of failing. -- Joey Hess Wed, 31 Jul 2024 15:52:03 -0400 diff --git a/P2P/Http/Client.hs b/P2P/Http/Client.hs index fd693f1afa..069124394b 100644 --- a/P2P/Http/Client.hs +++ b/P2P/Http/Client.hs @@ -9,6 +9,7 @@ {-# LANGUAGE BangPatterns #-} {-# LANGUAGE DataKinds, TypeApplications #-} +{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE CPP #-} module P2P.Http.Client ( @@ -99,7 +100,7 @@ p2pHttpClientVersions allowedversion rmt fallback clientaction = versions = filter allowedversion allProtocolVersions go clientenv mcred credcached mauth (v:vs) = do myuuid <- getUUID - res <- clientaction clientenv v + res <- catchclienterror $ clientaction clientenv v (B64UUID (uuid rmt)) (B64UUID myuuid) [] @@ -126,6 +127,8 @@ p2pHttpClientVersions allowedversion rmt fallback clientaction = ("git-annex HTTP API server returned an unexpected response: " ++ show clienterror) go _ _ _ _ [] = return Nothing + catchclienterror a = a `catch` \(ex :: ClientError) -> pure (Left ex) + authrequired clientenv vs = do cred <- prompt $ inRepo $ Git.getUrlCredential credentialbaseurl diff --git a/doc/bugs/get_from_p2phttp_does_not_ask_for__47__use_credentials.mdwn b/doc/bugs/get_from_p2phttp_does_not_ask_for__47__use_credentials.mdwn index 4f894c0ac9..819c58e97f 100644 --- a/doc/bugs/get_from_p2phttp_does_not_ask_for__47__use_credentials.mdwn +++ b/doc/bugs/get_from_p2phttp_does_not_ask_for__47__use_credentials.mdwn @@ -56,3 +56,5 @@ On Ubuntu 22.04 ### Have you had any luck using git-annex before? (Sometimes we get tired of reading bug reports all day and a lil' positive end note does wonders) I am currently experimenting with supporting the p2phttp protocol in forgejo-aneksajo. So far I have a prototype working with public repositories and it was surprisingly straightforward, but private repositories do not work yet due to this bug. + +> [[fixed|done]] --[[Joey]]