summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2016-11-30 15:26:16 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2016-11-30 15:26:55 -0400
commitdeca4cd90ad599f859fc9efafe509ed7375c6f39 (patch)
treeb0b9ea6af4bbc1228deb8f444fe23049728be97a
parentf14c412232808399c609e0dd484b8243af7daa3a (diff)
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.
-rw-r--r--CmdLine/GitRemoteTorAnnex.hs6
-rw-r--r--P2P/Auth.hs15
-rw-r--r--Remote/Helper/Tor.hs18
-rw-r--r--doc/git-remote-tor-annex.mdwn2
4 files changed, 18 insertions, 23 deletions
diff --git a/CmdLine/GitRemoteTorAnnex.hs b/CmdLine/GitRemoteTorAnnex.hs
index 3b2dcc050..ea4532ae6 100644
--- a/CmdLine/GitRemoteTorAnnex.hs
+++ b/CmdLine/GitRemoteTorAnnex.hs
@@ -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
diff --git a/P2P/Auth.hs b/P2P/Auth.hs
index 2c8465900..0025957c7 100644
--- a/P2P/Auth.hs
+++ b/P2P/Auth.hs
@@ -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 ()
diff --git a/Remote/Helper/Tor.hs b/Remote/Helper/Tor.hs
index 25d192023..b5a819c3b 100644
--- a/Remote/Helper/Tor.hs
+++ b/Remote/Helper/Tor.hs
@@ -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
diff --git a/doc/git-remote-tor-annex.mdwn b/doc/git-remote-tor-annex.mdwn
index 63b459ed8..4e41de877 100644
--- a/doc/git-remote-tor-annex.mdwn
+++ b/doc/git-remote-tor-annex.mdwn
@@ -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.