From 8ae8570ca4d03314b52045c5a4e71078e7db9593 Mon Sep 17 00:00:00 2001 From: joe Date: Mon, 14 Apr 2014 21:57:52 -0400 Subject: imports wallet files --- KeyRing.hs | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-) (limited to 'KeyRing.hs') diff --git a/KeyRing.hs b/KeyRing.hs index 9fd65f8..9854b84 100644 --- a/KeyRing.hs +++ b/KeyRing.hs @@ -418,7 +418,7 @@ data KeySpec = buildKeyDB :: FilePath -> FilePath -> Maybe String -> KeyRingData - -> IO ((KeyDB,Maybe String),[(FilePath,KikiReportAction)]) + -> IO (KikiCondition ((KeyDB,Maybe String),[(FilePath,KikiReportAction)])) buildKeyDB secring pubring grip0 keyring = do let isring (KeyRingFile {}) = True isring _ = False @@ -457,20 +457,22 @@ buildKeyDB secring pubring grip0 keyring = do (tag,top) <- Map.toList m return (top,fname,sub,tag) - {- + doDecrypt = todo + importWalletKey db' (top,fname,sub,tag) = do - doImportG doDecrypt + try db' $ \(db',report0) -> do + r <- doImportG doDecrypt db' (fmap keykey $ maybeToList wk) tag fname sub - -} - - -- db <- foldM importWalletKey db0 ts - (db,report) <- return (db0,[]) -- todo + try r $ \(db'',report) -> do + return $ KikiSuccess (db'', report0 ++ report) - return ( (db, grip), report ) + db <- foldM importWalletKey (KikiSuccess (db0,[])) wms' + try db $ \(db,report) -> do + return $ KikiSuccess ( (db, grip), report ) torhash key = maybe "" id $ derToBase32 <$> derRSA key @@ -591,19 +593,21 @@ runKeyRing keyring op = do ret = if null failed then KikiSuccess () else FailedToLock failed ret <- case functorToEither ret of Right {} -> do - ((db,grip), report1) <- buildKeyDB secring pubring grip0 keyring -- build db - - a <- return $ op KeyRingRuntime - { rtPubring = pubring - , rtSecring = secring - , rtRings = [] -- todo secring:pubring:keyringFiles keyring - , rtWallets = [] -- todo walletFiles keyring - , rtGrip = grip - , rtKeyDB = db - } - report2 <- todo -- write files - - return $ KikiResult (KikiSuccess a) (report1 ++ report2) + bresult <- buildKeyDB secring pubring grip0 keyring -- build db + case functorToEither bresult of + Left e -> return $ KikiResult e [] + Right ((db,grip), report1) -> do + a <- return $ op KeyRingRuntime + { rtPubring = pubring + , rtSecring = secring + , rtRings = [] -- todo secring:pubring:keyringFiles keyring + , rtWallets = [] -- todo walletFiles keyring + , rtGrip = grip + , rtKeyDB = db + } + report2 <- todo -- write files + + return $ KikiResult (KikiSuccess a) (report1 ++ report2) Left err -> return $ KikiResult err [] forM_ lked $ \(Just lk, fname) -> do dotlock_release lk -- cgit v1.2.3