83 lines
2.2 KiB
Haskell
83 lines
2.2 KiB
Haskell
{-# LANGUAGE OverloadedStrings #-}
|
|
module Main (main) where
|
|
|
|
import Data.ByteString.UTF8 (fromString)
|
|
import Database.SQLite.Simple
|
|
import System.Hclip
|
|
|
|
import qualified UserInterface as Ui
|
|
import qualified Database as Db
|
|
import qualified Crypto as Cr
|
|
import qualified Utils as Ut
|
|
|
|
main :: IO ()
|
|
main = do
|
|
conn <- Db.init_connection
|
|
Ut.clear_screen
|
|
putStrLn "Welcome to Hassword Manager!!!"
|
|
welcome_screen conn
|
|
mpass <- open_hassword_book conn
|
|
putStrLn mpass
|
|
setClipboard mpass
|
|
-- application_loop conn
|
|
|
|
Db.close_connection conn
|
|
|
|
welcome_screen :: Connection -> IO ()
|
|
welcome_screen conn = do
|
|
first <- Db.is_it_first_app_usage conn
|
|
if first
|
|
then do
|
|
Ut.set_green
|
|
putStrLn "It seems like you are using this application for the first time."
|
|
Ut.reset_color
|
|
create_mpass conn
|
|
else
|
|
return ()
|
|
|
|
create_mpass :: Connection -> IO ()
|
|
create_mpass conn = do
|
|
res <- input_new_valid_mpass
|
|
case res of
|
|
Ut.Valid mpass -> do
|
|
Db.insert_new_mpass conn (Cr.hash' $ fromString mpass)
|
|
Ut.DoNotMatch -> do
|
|
Ut.set_red
|
|
putStrLn "Passwords do not match!!!\n"
|
|
Ut.reset_color
|
|
create_mpass conn
|
|
Ut.TooShort -> do
|
|
Ut.set_red
|
|
putStrLn "Password is too short!!!\n"
|
|
Ut.reset_color
|
|
create_mpass conn
|
|
Ut.Empty -> do
|
|
Ut.set_red
|
|
putStrLn "Password cannot be empty!!!\n"
|
|
Ut.reset_color
|
|
create_mpass conn
|
|
|
|
input_new_valid_mpass :: IO (Ut.MasterPasswordValidationCases)
|
|
input_new_valid_mpass = do
|
|
(password1:password2:_) <- sequence [putStrLn "Please Enter new MASTER PASSWORD:" >> Ut.get_password, putStrLn "Confirm password:" >> Ut.get_password]
|
|
return $ Ut.validate_password password1 password2
|
|
|
|
open_hassword_book :: Connection -> IO (String)
|
|
open_hassword_book conn = do
|
|
putStrLn "Please Enter your MASTER PASSWORD:"
|
|
mpass <- Ut.get_password
|
|
res <- Db.check_if_mpass_valid conn (Cr.hash' $ fromString mpass)
|
|
if res
|
|
then
|
|
return mpass
|
|
else do
|
|
Ut.set_red
|
|
putStrLn "Invalid MASTER PASSWORD!!!\n"
|
|
Ut.reset_color
|
|
open_hassword_book conn
|
|
|
|
application_loop :: Connection -> IO ()
|
|
application_loop conn = do
|
|
putStrLn "What would you like to do?"
|
|
application_loop conn
|