diff options
Diffstat (limited to 'src/Propellor/PrivData.hs')
| -rw-r--r-- | src/Propellor/PrivData.hs | 30 |
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) |
