summaryrefslogtreecommitdiff
path: root/src/Propellor/PrivData/Paths.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Propellor/PrivData/Paths.hs')
-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