summaryrefslogtreecommitdiff
path: root/src/Propellor/PrivData.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Propellor/PrivData.hs')
-rw-r--r--src/Propellor/PrivData.hs30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/Propellor/PrivData.hs b/src/Propellor/PrivData.hs
index 31850217..c2af4284 100644
--- a/src/Propellor/PrivData.hs
+++ b/src/Propellor/PrivData.hs
@@ -56,6 +56,25 @@ dumpPrivData host field =
maybe (error "Requested privdata is not set.") putStrLn
=<< getPrivDataFor host field
+editPrivData :: HostName -> PrivDataField -> IO ()
+editPrivData host field = do
+ v <- getPrivDataFor host field
+ v' <- withTmpFile "propellorXXXX" $ \f h -> do
+ hClose h
+ maybe noop (writeFileProtected f) v
+ editor <- getEnvDefault "EDITOR" "vi"
+ unlessM (boolSystem editor [File f]) $
+ error "Editor failed; aborting."
+ readFile f
+ setPrivDataTo host field v'
+
+listPrivDataFields :: HostName -> IO ()
+listPrivDataFields host = do
+ putStrLn (host ++ "'s currently set privdata fields:")
+ mapM_ list . M.keys =<< decryptPrivData host
+ where
+ list = putStrLn . ("\t" ++) . shellEscape . show
+
setPrivDataTo :: HostName -> PrivDataField -> String -> IO ()
setPrivDataTo host field value = do
makePrivDataDir
@@ -73,17 +92,6 @@ setPrivDataTo host field value = do
getPrivDataFor :: HostName -> PrivDataField -> IO (Maybe String)
getPrivDataFor host field = M.lookup field <$> decryptPrivData host
-editPrivData :: HostName -> PrivDataField -> IO ()
-editPrivData host field = do
- v <- getPrivDataFor host field
- v' <- withTmpFile "propellorXXXX" $ \f _h -> do
- maybe noop (writeFileProtected f) v
- editor <- getEnvDefault "EDITOR" "vi"
- unlessM (boolSystem editor [File f]) $
- error "Editor failed; aborting."
- readFile f
- setPrivDataTo host field v'
-
decryptPrivData :: HostName -> IO (M.Map PrivDataField String)
decryptPrivData host = fromMaybe M.empty . readish
<$> gpgDecrypt (privDataFile host)