admin: Make invite_user error codes more specific

- Return 409 Conflict for when a user with that email already exists
- Return 500 InternalServerError for everything else
This commit is contained in:
Carl Dong 2021-05-08 22:29:41 -04:00
parent 68e5d95d25
commit e60bdc7efe
1 changed files with 13 additions and 8 deletions

View File

@ -292,11 +292,14 @@ fn invite_user(data: Json<InviteData>, _token: AdminToken, conn: DbConn) -> Json
let data: InviteData = data.into_inner(); let data: InviteData = data.into_inner();
let email = data.email.clone(); let email = data.email.clone();
if User::find_by_mail(&data.email, &conn).is_some() { if User::find_by_mail(&data.email, &conn).is_some() {
err!("User already exists") err_code!("User already exists", Status::Conflict.code)
} }
let mut user = User::new(email); let mut user = User::new(email);
// TODO: After try_blocks is stabilized, this can be made more readable
// See: https://github.com/rust-lang/rust/issues/31436
(|| {
if CONFIG.mail_enabled() { if CONFIG.mail_enabled() {
mail::send_invite(&user.email, &user.uuid, None, None, &CONFIG.invitation_org_name(), None)?; mail::send_invite(&user.email, &user.uuid, None, None, &CONFIG.invitation_org_name(), None)?;
} else { } else {
@ -304,7 +307,9 @@ fn invite_user(data: Json<InviteData>, _token: AdminToken, conn: DbConn) -> Json
invitation.save(&conn)?; invitation.save(&conn)?;
} }
user.save(&conn)?; user.save(&conn)
})().map_err(|e| e.with_code(Status::InternalServerError.code))?;
Ok(Json(user.to_json(&conn))) Ok(Json(user.to_json(&conn)))
} }