summaryrefslogtreecommitdiff
path: root/P2P
diff options
context:
space:
mode:
Diffstat (limited to 'P2P')
-rw-r--r--P2P/Address.hs5
-rw-r--r--P2P/Auth.hs37
2 files changed, 25 insertions, 17 deletions
diff --git a/P2P/Address.hs b/P2P/Address.hs
index 862f06a9c..19ff82a89 100644
--- a/P2P/Address.hs
+++ b/P2P/Address.hs
@@ -23,7 +23,10 @@ import qualified Data.Text as T
data P2PAddress = TorAnnex OnionAddress OnionPort
deriving (Eq, Show)
--- | A P2P address, with an AuthToken
+-- | A P2P address, with an AuthToken.
+--
+-- This is enough information to connect to the peer, and authenticate with
+-- it.
data P2PAddressAuth = P2PAddressAuth P2PAddress AuthToken
deriving (Eq, Show)
diff --git a/P2P/Auth.hs b/P2P/Auth.hs
index 5c3feb713..2482c1dc0 100644
--- a/P2P/Auth.hs
+++ b/P2P/Auth.hs
@@ -1,4 +1,4 @@
-{- P2P protocol, authorization
+{- P2P authtokens
-
- Copyright 2016 Joey Hess <id@joeyh.name>
-
@@ -7,24 +7,29 @@
module P2P.Auth where
-import Common
+import Annex.Common
+import Creds
import Utility.AuthToken
import qualified Data.Text as T
--- Use .git/annex/creds/p2p to hold AuthTokens of authorized peers.
-getAuthTokens :: Annex AllowedAuthTokens
-getAuthTokens = allowedAuthTokens <$> getAuthTokens'
+-- | Load authtokens that are accepted by this repository.
+loadP2PAuthTokens :: Annex AllowedAuthTokens
+loadP2PAuthTokens = allowedAuthTokens <$> loadP2PAuthTokens'
-getAuthTokens' :: Annex [AuthTokens]
-getAuthTokens' = mapMaybe toAuthToken
- . map T.pack
- . lines
- . fromMaybe []
- <$> readCacheCreds "tor"
+loadP2PAuthTokens' :: Annex [AuthToken]
+loadP2PAuthTokens' = mapMaybe toAuthToken
+ . map T.pack
+ . lines
+ . fromMaybe []
+ <$> readCacheCreds p2pAuthCredsFile
-addAuthToken :: AuthToken -> Annex ()
-addAuthToken t = do
- ts <- getAuthTokens'
- let d = unlines $ map (T.unpack . fromAuthToken) (t:ts)
- writeCacheCreds d "tor"
+storeP2PAuthToken :: AuthToken -> Annex ()
+storeP2PAuthToken t = do
+ ts <- loadP2PAuthTokens'
+ unless (t `elem` ts) $ do
+ let d = unlines $ map (T.unpack . fromAuthToken) (t:ts)
+ writeCacheCreds d p2pAuthCredsFile
+
+p2pAuthCredsFile :: FilePath
+p2pAuthCredsFile = "p2pauth"