Tor: hiddenServiceData

Signed-off-by: Félix Sipma <felix.sipma@no-log.org>
This commit is contained in:
Félix Sipma 2014-11-11 22:34:08 +01:00 committed by Joey Hess
parent 9d6a79bc23
commit e7d2c38a59
1 changed files with 32 additions and 2 deletions

View File

@ -4,6 +4,11 @@ import Propellor
import qualified Propellor.Property.File as File import qualified Propellor.Property.File as File
import qualified Propellor.Property.Apt as Apt import qualified Propellor.Property.Apt as Apt
import qualified Propellor.Property.Service as Service import qualified Propellor.Property.Service as Service
import Utility.FileMode
import System.Posix.Files
type HiddenServiceName = String
isBridge :: Property isBridge :: Property
isBridge = setup `requires` Apt.installed ["tor"] isBridge = setup `requires` Apt.installed ["tor"]
@ -16,7 +21,7 @@ isBridge = setup `requires` Apt.installed ["tor"]
, "Exitpolicy reject *:*" , "Exitpolicy reject *:*"
] `onChange` restarted ] `onChange` restarted
hiddenServiceAvailable :: HostName -> Int -> Property hiddenServiceAvailable :: HiddenServiceName -> Int -> Property
hiddenServiceAvailable hn port = hiddenServiceHostName prop hiddenServiceAvailable hn port = hiddenServiceHostName prop
where where
prop = mainConfig `File.containsLines` prop = mainConfig `File.containsLines`
@ -31,7 +36,7 @@ hiddenServiceAvailable hn port = hiddenServiceHostName prop
warningMessage $ unlines ["hidden service hostname:", h] warningMessage $ unlines ["hidden service hostname:", h]
return r return r
hiddenService :: HostName -> Int -> Property hiddenService :: HiddenServiceName -> Int -> Property
hiddenService hn port = mainConfig `File.containsLines` hiddenService hn port = mainConfig `File.containsLines`
[ unlines ["HiddenServiceDir", varLib </> hn] [ unlines ["HiddenServiceDir", varLib </> hn]
, unlines ["HiddenServicePort", show port, "127.0.0.1:" ++ show port] , unlines ["HiddenServicePort", show port, "127.0.0.1:" ++ show port]
@ -39,6 +44,28 @@ hiddenService hn port = mainConfig `File.containsLines`
`describe` unlines ["hidden service available:", hn, show port] `describe` unlines ["hidden service available:", hn, show port]
`onChange` restarted `onChange` restarted
hiddenServiceData :: HiddenServiceName -> Context -> Property
hiddenServiceData hn context = combineProperties desc
[ installonion "hostname"
, installonion "private_key"
]
where
desc = unlines ["hidden service data available in", varLib </> hn]
installonion f = withPrivData (PrivFile $ varLib </> hn </> f) context $ \getcontent ->
property desc $ getcontent $ install $ varLib </> hn </> f
install f content = ifM (liftIO $ doesFileExist f)
( noChange
, ensureProperties
[ property desc $ makeChange $ do
createDirectoryIfMissing True (takeDirectory f)
writeFileProtected f content
, File.mode (takeDirectory f) $ combineModes
[ownerReadMode, ownerWriteMode, ownerExecuteMode]
, File.ownerGroup (takeDirectory f) user user
, File.ownerGroup f user user
]
)
restarted :: Property restarted :: Property
restarted = Service.restarted "tor" restarted = Service.restarted "tor"
@ -50,3 +77,6 @@ varLib = "/var/lib/tor"
varRun :: FilePath varRun :: FilePath
varRun = "/var/run/tor" varRun = "/var/run/tor"
user :: UserName
user = "debian-tor"