use P2P auth for git-remote-tor-annex

This changes the environment variable name to the more generic
GIT_ANNEX_P2P_AUTHTOKEN.

This commit was sponsored by andrea rota.
This commit is contained in:
Joey Hess 2016-11-30 15:26:16 -04:00
parent 3ab12ba923
commit b88e44ea9a
No known key found for this signature in database
GPG key ID: C910D9222512E3C7
4 changed files with 18 additions and 23 deletions

View file

@ -16,6 +16,8 @@ import Remote.Helper.Tor
import Utility.Tor
import Utility.AuthToken
import Annex.UUID
import P2P.Address
import P2P.Auth
run :: [String] -> IO ()
run (_remotename:address:[]) = forever $ do
@ -54,7 +56,7 @@ connectService address port service = do
state <- Annex.new =<< Git.CurrentRepo.get
Annex.eval state $ do
authtoken <- fromMaybe nullAuthToken
<$> getTorAuthTokenFor address
<$> loadP2PRemoteAuthToken (TorAnnex address port)
myuuid <- getUUID
g <- Annex.gitRepo
h <- liftIO $ torHandle =<< connectHiddenService address port
@ -62,4 +64,4 @@ connectService address port service = do
v <- auth myuuid authtoken
case v of
Just _theiruuid -> connect service stdin stdout
Nothing -> giveup $ "authentication failed, perhaps you need to set " ++ torAuthTokenEnv
Nothing -> giveup $ "authentication failed, perhaps you need to set " ++ p2pAuthTokenEnv

View file

@ -12,6 +12,7 @@ import Creds
import P2P.Address
import Utility.AuthToken
import Utility.Tor
import Utility.Env
import qualified Data.Text as T
@ -38,9 +39,19 @@ p2pAuthCredsFile :: FilePath
p2pAuthCredsFile = "p2pauth"
-- | Loads the AuthToken to use when connecting with a given P2P address.
--
-- It's loaded from the first line of the creds file, but
-- GIT_ANNEX_P2P_AUTHTOKEN overrides.
loadP2PRemoteAuthToken :: P2PAddress -> Annex (Maybe AuthToken)
loadP2PRemoteAuthToken addr = maybe Nothing (toAuthToken . T.pack)
<$> readCacheCreds (addressCredsFile addr)
loadP2PRemoteAuthToken addr = maybe Nothing mk <$> getM id
[ liftIO $ getEnv "GIT_ANNEX_P2P_AUTHTOKEN"
, readCacheCreds (addressCredsFile addr)
]
where
mk = toAuthToken . T.pack . takeWhile (/= '\n')
p2pAuthTokenEnv :: String
p2pAuthTokenEnv = "GIT_ANNEX_P2P_AUTHTOKEN"
-- | Stores the AuthToken o use when connecting with a given P2P address.
storeP2PRemoteAuthToken :: P2PAddress -> AuthToken -> Annex ()

View file

@ -8,26 +8,8 @@
module Remote.Helper.Tor where
import Annex.Common
import Utility.AuthToken
import Creds
import Utility.Tor
import Utility.Env
import Network.Socket
import qualified Data.Text as T
-- Read the first line of the creds file. Environment variable overrides.
getTorAuthTokenFor :: OnionAddress -> Annex (Maybe AuthToken)
getTorAuthTokenFor (OnionAddress onionaddress) =
maybe Nothing mk <$> getM id
[ liftIO $ getEnv torAuthTokenEnv
, readCacheCreds onionaddress
]
where
mk = toAuthToken . T.pack . takeWhile (/= '\n')
torAuthTokenEnv :: String
torAuthTokenEnv = "GIT_ANNEX_TOR_AUTHTOKEN"
torHandle :: Socket -> IO Handle
torHandle s = do

View file

@ -15,7 +15,7 @@ over tor(1), communicating with a tor hidden service.
The tor hidden service probably requires an authtoken to use it.
The authtoken can be provided in the environment variable
`GIT_ANNEX_TOR_AUTHTOKEN`. Or, if there is a file in
`GIT_ANNEX_P2P_AUTHTOKEN`. Or, if there is a file in
`.git/annex/creds/` matching the onion address of the hidden
service, its first line is used as the authtoken.