From 00311092d0807ea9384b13a2f03a7d5fada3b9bf Mon Sep 17 00:00:00 2001 From: Jonathan Lamothe Date: Mon, 24 Dec 2018 14:02:28 -0500 Subject: [PATCH] partial implementation of password view/edit --- app/Main.hs | 28 ++++++++++++++++++++++++++++ src/Password.hs | 12 +++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/app/Main.hs b/app/Main.hs index 22edf9b..77a8d7c 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -92,6 +92,7 @@ mainMenu :: S.StateT Status IO () mainMenu = menu "Main Menu" [ ( "add a password", addPassword ) + , ( "view/edit a password", viewEditPass ) , ( "change master password", changeMasterPass ) , ( "lock session", lockSession ) , ( "quit", quit ) @@ -112,6 +113,33 @@ addPassword' x = do S.modify $ over database $ pwSetService x d showPass x +viewEditPass :: S.StateT Status IO () +viewEditPass = menu "View/Edit Password" + [ ( "search servives", searchServ ) + , ( "list services", listServ ) + , ( "cancel", mainMenu ) + ] + +searchServ :: S.StateT Status IO () +searchServ = do + svc <- req $ prompt "service name: " reqResp + db <- S.gets $ view database + selectServ $ pwSearch svc db + +listServ :: S.StateT Status IO () +listServ = S.gets (view database) >>= selectServ . pwSearch "" + +selectServ :: [String] -> S.StateT Status IO () +selectServ xs = menu "Select Service" $ + ("cancel", mainMenu) : + map (\x -> (x, viewEdit x)) xs + +viewEdit :: String -> S.StateT Status IO () +viewEdit x = menu x + [ ( "show password", showPass x >> viewEdit x ) + , ( "cancel", mainMenu ) + ] + changeMasterPass :: S.StateT Status IO () changeMasterPass = do oldP <- S.gets $ view masterPass diff --git a/src/Password.hs b/src/Password.hs index 6e30491..670bde8 100644 --- a/src/Password.hs +++ b/src/Password.hs @@ -43,7 +43,7 @@ module Password ( -- ** Password Checkers pwCountUpper, pwCountLower, pwCountDigits, pwCountSpecial, -- ** Database Functions - pwHasService, pwSetService, pwGetService + pwHasService, pwSetService, pwGetService, pwSearch ) where import Control.Lens (makeLenses, over, set, (^.)) @@ -238,6 +238,16 @@ pwGetService -- not found pwGetService = M.lookup +-- | searches for a service +pwSearch + :: String + -- ^ the search string + -> PWDatabase + -- ^ the database to search + -> [String] + -- ^ the matching service names +pwSearch = undefined + isSpecial :: Char -> Bool isSpecial x = not $ isUpper x || isLower x || isDigit x