Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (*Declaring area*)
- type id = ID of int
- type email = Email of string
- type password = Password of string
- type active = Active of bool
- module User = struct
- type t = id * email * password * active
- let compare = fun (id1 , _, _, _) -> fun (id2, _, _, _) -> compare id1 id2
- end
- module UserDB = Set.Make(User);;
- let db = UserDB.empty
- let addUser email password db =
- let checkEmail email = String.contains email '@' in
- let checkPassword password = String.length password >= 6 in
- match (checkEmail email, checkPassword password) with
- | (true, true) -> UserDB.add (ID (List.length (UserDB.elements db)), Email email, Password password, Active true) db
- | (false, false) -> print_string "Invalid email and password\n"; db
- | (false, _) -> print_string "Invalid email\n"; db
- | (_, false) -> print_string "Invalid password\n"; db
- let login thisEmail thisPassword db =
- match UserDB.find_first_opt(fun (_, thatEmail, thatPassword, _) -> Password thisPassword = thatPassword && Email thisEmail = thatEmail) db with
- | Some (_, _, _, active) as user -> if active = Active true
- then (print_string "The user was found\n"; Some user)
- else (print_string "The users account is deactivated\n"; None)
- | None -> print_string "Incorrect username or password\n"; None;;
- let deactivateAccount email db = UserDB.fold(fun ((thatId, thatEmail, thatPassword, _) as user) db -> if Email email = thatEmail
- then UserDB.add (thatId, thatEmail, thatPassword, Active false) db
- else UserDB.add user db) db UserDB.empty
- (*Usage area*)
- let db = addUser "email1@lsd.com" "upt123" db
- let db = addUser "email2@lsd.com" "upt123" db
- let db = addUser "email2@lsd.com" "upt123" db
- let db = addUser "email.com" "upt123" db;;
- let db = addUser "email@lsd.com" "upt" db;;
- let db = addUser "emaillsd.com" "upt" db;;
- login "test" "parola" db;;
- login "email1@lsd.com" "parola" db;;
- login "emai@test.ro" "upt2" db;;
- login "email1@lsd.com" "upt2" db;;
- login "email1@lsd.com" "upt123" db;;
- login "email2@lsd.com" "upt123" db;;
- let db = deactivateAccount "email2@lsd.com" db;;
- login "email2@lsd.com" "upt123" db;;
- login "email1@lsd.com" "upt123" db;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement