diff options
author | Joey Hess <joeyh@joeyh.name> | 2016-08-17 15:29:34 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2016-08-17 15:29:34 -0400 |
commit | efee99a335b36ae6265662f3afd7fbfaf75420d2 (patch) | |
tree | 3cd7d329d61bca02be08eaea87745af698ea6663 | |
parent | 194d7d2702712668f05ea2ac956a0dcecc5c4b70 (diff) | |
download | keysafe-efee99a335b36ae6265662f3afd7fbfaf75420d2.tar.gz |
refactor
-rw-r--r-- | Gpg.hs | 22 | ||||
-rw-r--r-- | keysafe.hs | 23 |
2 files changed, 24 insertions, 21 deletions
@@ -3,9 +3,12 @@ - Licensed under the GNU AGPL version 3 or higher. -} +{-# LANGUAGE OverloadedStrings #-} + module Gpg where import Types +import UI import System.Process import Data.List.Split import Data.Maybe @@ -13,6 +16,25 @@ import System.Exit import qualified Data.ByteString as B import qualified Data.ByteString.UTF8 as BU8 +-- | Pick gpg secret key to back up. +-- +-- If there is only one gpg secret key, +-- the choice is obvious. Otherwise prompt the user with a list. +getKeyToBackup :: UI -> IO SecretKey +getKeyToBackup ui = go =<< Gpg.listSecretKeys + where + go [] = do + showError ui "You have no gpg secret keys to back up." + error "Aborting on no gpg secret keys." + go [(_, kid)] = Gpg.getSecretKey kid + go l = maybe (error "Canceled") Gpg.getSecretKey + =<< promptKeyId ui "Pick gpg secret key" + "Pick gpg secret key to back up:" l + +-- | Use when the gpg keyid will not be known at restore time. +anyKey :: SecretKeySource +anyKey = GpgKey (KeyId "") + listSecretKeys :: IO [(Name, KeyId)] listSecretKeys = mapMaybe parse . lines <$> readProcess "gpg" ["--batch", "--with-colons", "--list-secret-keys"] "" @@ -58,11 +58,11 @@ dispatch cmdline ui tunables = do backup storage ui tunables secretkeysource =<< getSecretKey secretkeysource go CmdLine.Backup Nothing = - backup storage ui tunables anyGpgKey =<< pickGpgKeyToBackup ui + backup storage ui tunables Gpg.anyKey =<< Gpg.getKeyToBackup ui go CmdLine.Restore (Just secretkeydest) = restore storage ui secretkeydest go CmdLine.Restore Nothing = - restore storage ui anyGpgKey + restore storage ui Gpg.anyKey go CmdLine.Benchmark _ = benchmarkTunables tunables @@ -70,25 +70,6 @@ getSecretKey :: SecretKeySource -> IO SecretKey getSecretKey (GpgKey kid) = Gpg.getSecretKey kid getSecretKey (KeyFile f) = SecretKey <$> B.readFile f --- | Pick gpg secret key to back up. --- --- If there is only one gpg secret key, --- the choice is obvious. Otherwise prompt the user with a list. -pickGpgKeyToBackup :: UI -> IO SecretKey -pickGpgKeyToBackup ui = go =<< Gpg.listSecretKeys - where - go [] = do - showError ui "You have no gpg secret keys to back up." - error "Aborting on no gpg secret keys." - go [(_, kid)] = Gpg.getSecretKey kid - go l = maybe (error "Canceled") Gpg.getSecretKey - =<< promptKeyId ui "Pick gpg secret key" - "Pick gpg secret key to back up:" l - --- | Use when the gpg keyid will not be known at restore time. -anyGpgKey :: SecretKeySource -anyGpgKey = GpgKey (KeyId "") - backup :: Storage -> UI -> Tunables -> SecretKeySource -> SecretKey -> IO () backup storage ui tunables secretkeysource secretkey = do username <- userName |