Advertisement
Guest User

Untitled

a guest
Nov 1st, 2018
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 2.41 KB | None | 0 0
  1. (*Declaring area*)
  2.  
  3. type id = ID of int
  4. type email = Email of string
  5. type password = Password of string
  6. type active = Active of bool
  7.  
  8. module User = struct
  9.   type t = id * email * password * active
  10.   let compare = fun (id1 , _, _, _) -> fun (id2, _, _, _) -> compare id1 id2
  11. end
  12.  
  13. module UserDB = Set.Make(User);;
  14.  
  15. let db = UserDB.empty
  16.  
  17. let addUser email password db =
  18.   let checkEmail email = String.contains email '@' in
  19.   let checkPassword password = String.length password >= 6 in
  20.   match (checkEmail email, checkPassword password) with
  21.   | (true, true) -> UserDB.add (ID (List.length (UserDB.elements db)), Email email, Password password, Active true) db
  22.   | (false, false) -> print_string "Invalid email and password\n"; db
  23.   | (false, _) -> print_string "Invalid email\n"; db
  24.   | (_, false) -> print_string "Invalid password\n"; db
  25.  
  26. let login thisEmail thisPassword db =
  27.   match UserDB.find_first_opt(fun (_, thatEmail, thatPassword, _) -> Password thisPassword = thatPassword && Email thisEmail = thatEmail) db with
  28.   | Some (_, _, _, active) as user -> if active = Active true
  29.                                       then (print_string "The user was found\n"; Some user)
  30.                                       else (print_string "The users account is deactivated\n"; None)
  31.   | None -> print_string "Incorrect username or password\n"; None;;
  32.  
  33. let deactivateAccount email db = UserDB.fold(fun ((thatId, thatEmail, thatPassword, _) as user) db -> if Email email = thatEmail
  34.                                                                                                       then UserDB.add (thatId, thatEmail, thatPassword, Active false) db
  35.                                                                                                       else UserDB.add user db) db UserDB.empty
  36.  
  37. (*Usage area*)  
  38.  
  39. let db = addUser "email1@lsd.com" "upt123" db
  40. let db = addUser "email2@lsd.com" "upt123" db
  41. let db = addUser "email2@lsd.com" "upt123" db
  42. let db = addUser "email.com" "upt123" db;;
  43. let db = addUser "email@lsd.com" "upt" db;;
  44. let db = addUser "emaillsd.com" "upt" db;;
  45.  
  46. login "test" "parola" db;;
  47. login "email1@lsd.com" "parola" db;;
  48. login "emai@test.ro" "upt2" db;;
  49. login "email1@lsd.com" "upt2" db;;
  50. login "email1@lsd.com" "upt123" db;;
  51. login "email2@lsd.com" "upt123" db;;
  52.  
  53. let db = deactivateAccount "email2@lsd.com" db;;
  54.  
  55. login "email2@lsd.com" "upt123" db;;
  56. login "email1@lsd.com" "upt123" db;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement