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 /Gpg.hs | |
parent | 194d7d2702712668f05ea2ac956a0dcecc5c4b70 (diff) | |
download | keysafe-efee99a335b36ae6265662f3afd7fbfaf75420d2.tar.gz |
refactor
Diffstat (limited to 'Gpg.hs')
-rw-r--r-- | Gpg.hs | 22 |
1 files changed, 22 insertions, 0 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"] "" |