aboutsummaryrefslogtreecommitdiff
path: root/Command/EnableTor.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2016-11-14 13:26:34 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2016-11-14 13:48:35 -0400
commitfbaf45d0f22aa74df19f5d765a8b0ee4d3526a20 (patch)
treecfa7b6d0f5764527e3776f4a4a513dd26280681a /Command/EnableTor.hs
parente7088c519678f63f460646cc19c3e25423da4f00 (diff)
git-annex enable-tor command
Tor unfortunately does not come out of the box configured to let hidden services register themselves on the fly via the ControlPort. And, changing the config to enable the ControlPort and a particular type of auth for it may break something already using the ControlPort, or lessen the security of the system. So, this leaves only one option to us: Add a hidden service to the torrc. git-annex enable-tor does so, and picks an unused high port for tor to listen on for connections to the hidden service. It's up to the caller to somehow pick a local port to listen on that won't be used by something else. That may be difficult to do.. This commit was sponsored by Jochen Bartl on Patreon.
Diffstat (limited to 'Command/EnableTor.hs')
-rw-r--r--Command/EnableTor.hs28
1 files changed, 28 insertions, 0 deletions
diff --git a/Command/EnableTor.hs b/Command/EnableTor.hs
new file mode 100644
index 000000000..8d9dd6f0a
--- /dev/null
+++ b/Command/EnableTor.hs
@@ -0,0 +1,28 @@
+{- git-annex command
+ -
+ - Copyright 2016 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module Command.EnableTor where
+
+import Command
+import Utility.Tor
+
+cmd :: Command
+cmd = noCommit $ dontCheck repoExists $
+ command "enable-tor" SectionPlumbing ""
+ paramNumber (withParams seek)
+
+seek :: CmdParams -> CommandSeek
+seek = withWords start
+
+start :: CmdParams -> CommandStart
+start (localport:[]) = case readish localport of
+ Nothing -> error "Bad localport"
+ Just lp -> do
+ (onionaddr, onionport) <- liftIO $ addHiddenService lp
+ liftIO $ putStrLn (onionaddr ++ ":" ++ show onionport)
+ stop
+start _ = error "Need 1 localport parameter"