fix login with email

This commit is contained in:
Swrup 2022-04-01 05:24:49 +02:00
parent b718eae11b
commit 66047eda3d

View file

@ -164,18 +164,7 @@ let get_nick user_id =
Ok nick
let login ~login ~password request =
if is_banished login then Error "YOU ARE BANISHED"
else
let* user_id =
match Db.find_opt Q.get_user_id_from_nick login with
| Error e -> Error (Format.sprintf "db error: %s" (Caqti_error.show e))
| Ok None -> (
match Db.find_opt Q.get_user_id_from_email login with
| Error e -> Error (Format.sprintf "db error: %s" (Caqti_error.show e))
| Ok None -> Error "wrong login"
| Ok (Some user_id) -> Ok user_id )
| Ok (Some user_id) -> Ok user_id
in
let try_password user_id =
let^ good_password = Db.find Q.get_password user_id in
if Bcrypt.verify password (Bcrypt.hash_of_string good_password) then
let _unit_lwt = Dream.invalidate_session request in
@ -183,7 +172,21 @@ let login ~login ~password request =
let* nick = get_nick user_id in
let _unit_lwt = Dream.put_session "nick" nick request in
Ok ()
else if is_banished login then Error "YOU ARE BANISHED"
else Error "wrong password"
in
let^ id_from_nick = Db.find_opt Q.get_user_id_from_nick login in
let^ id_from_email = Db.find_opt Q.get_user_id_from_email login in
let user_id_list = List.filter_map Fun.id [ id_from_nick; id_from_email ] in
match user_id_list with
| [] -> Error "Invalid login"
| [ id ] -> try_password id
| [ id_1; id_2 ] -> (
match try_password id_1 with
| Ok () -> Ok ()
| Error _e -> try_password id_2 )
| _to_many_ids -> assert false
let valid_nick nick =
String.length nick < 64