HasswordManager/app/Main.hs
2024-05-25 14:38:26 +02:00

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