fix login with email
This commit is contained in:
parent
b718eae11b
commit
66047eda3d
1 changed files with 15 additions and 12 deletions
27
src/user.ml
27
src/user.ml
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue