summaryrefslogtreecommitdiff
path: root/src/Propellor/PrivData
diff options
context:
space:
mode:
authorJoey Hess2016-03-07 18:40:24 -0400
committerJoey Hess2016-03-07 20:17:18 -0400
commit0daf924b43d0750b285a5e857eb9946a9a71e6cc (patch)
treea5ac2c8aa1464daa7c2649772242d466485935e2 /src/Propellor/PrivData
parentad4323859caea503114df40bde0f6b273441e6d2 (diff)
privdata/relocate
better than symlinks because this way no conflict can ever occur and, commit from hook
Diffstat (limited to 'src/Propellor/PrivData')
-rw-r--r--src/Propellor/PrivData/Paths.hs20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/Propellor/PrivData/Paths.hs b/src/Propellor/PrivData/Paths.hs
index 3d0d8a58..7410370b 100644
--- a/src/Propellor/PrivData/Paths.hs
+++ b/src/Propellor/PrivData/Paths.hs
@@ -1,15 +1,31 @@
module Propellor.PrivData.Paths where
+import Utility.Exception
import System.FilePath
+import Control.Applicative
+import Prelude
privDataDir :: FilePath
privDataDir = "privdata"
-privDataFile :: FilePath
-privDataFile = privDataDir </> "privdata.gpg"
+privDataFile :: IO FilePath
+privDataFile = allowRelocate $ privDataDir </> "privdata.gpg"
+
+privDataKeyring :: IO FilePath
+privDataKeyring = allowRelocate $ privDataDir </> "keyring.gpg"
privDataLocal :: FilePath
privDataLocal = privDataDir </> "local"
privDataRelay :: String -> FilePath
privDataRelay host = privDataDir </> "relay" </> host
+
+-- Allow relocating files in privdata, by checking for a file
+-- privdata/relocate, which contains the path to a subdirectory that
+-- contains the files.
+allowRelocate :: FilePath -> IO FilePath
+allowRelocate f = reloc . lines
+ <$> catchDefaultIO "" (readFile (privDataDir </> "relocate"))
+ where
+ reloc (p:_) | not (null p) = privDataDir </> p </> takeFileName f
+ reloc _ = f