mirror of
				https://github.com/dani-garcia/vaultwarden.git
				synced 2025-10-28 00:40:01 +02:00 
			
		
		
		
	admin: Specifically return 404 for user not found
- Modify err_code to accept an expr for err_code - Add get_user_or_404, properly returning 404 instead of a generic 400 for cases where user is not found - Use get_user_or_404 where appropriate.
This commit is contained in:
		| @@ -4,7 +4,7 @@ use serde_json::Value; | ||||
| use std::{env, time::Duration}; | ||||
|  | ||||
| use rocket::{ | ||||
|     http::{Cookie, Cookies, SameSite}, | ||||
|     http::{Cookie, Cookies, SameSite, Status}, | ||||
|     request::{self, FlashMessage, Form, FromRequest, Outcome, Request}, | ||||
|     response::{content::Html, Flash, Redirect}, | ||||
|     Route, | ||||
| @@ -279,6 +279,14 @@ struct InviteData { | ||||
|     email: String, | ||||
| } | ||||
|  | ||||
| fn get_user_or_404(uuid: &str, conn: &DbConn) -> ApiResult<User> { | ||||
|     if let Some(user) = User::find_by_uuid(uuid, conn) { | ||||
|         Ok(user) | ||||
|     } else { | ||||
|         err_code!("User doesn't exist", Status::NotFound.code); | ||||
|     } | ||||
| } | ||||
|  | ||||
| #[post("/invite", data = "<data>")] | ||||
| fn invite_user(data: Json<InviteData>, _token: AdminToken, conn: DbConn) -> JsonResult { | ||||
|     let data: InviteData = data.into_inner(); | ||||
| @@ -352,20 +360,20 @@ fn users_overview(_token: AdminToken, conn: DbConn) -> ApiResult<Html<String>> { | ||||
|  | ||||
| #[get("/users/<uuid>")] | ||||
| fn get_user_json(uuid: String, _token: AdminToken, conn: DbConn) -> JsonResult { | ||||
|     let user = User::find_by_uuid(&uuid, &conn).map_res("User doesn't exist")?; | ||||
|     let user = get_user_or_404(&uuid, &conn)?; | ||||
|  | ||||
|     Ok(Json(user.to_json(&conn))) | ||||
| } | ||||
|  | ||||
| #[post("/users/<uuid>/delete")] | ||||
| fn delete_user(uuid: String, _token: AdminToken, conn: DbConn) -> EmptyResult { | ||||
|     let user = User::find_by_uuid(&uuid, &conn).map_res("User doesn't exist")?; | ||||
|     let user = get_user_or_404(&uuid, &conn)?; | ||||
|     user.delete(&conn) | ||||
| } | ||||
|  | ||||
| #[post("/users/<uuid>/deauth")] | ||||
| fn deauth_user(uuid: String, _token: AdminToken, conn: DbConn) -> EmptyResult { | ||||
|     let mut user = User::find_by_uuid(&uuid, &conn).map_res("User doesn't exist")?; | ||||
|     let mut user = get_user_or_404(&uuid, &conn)?; | ||||
|     Device::delete_all_by_user(&user.uuid, &conn)?; | ||||
|     user.reset_security_stamp(); | ||||
|  | ||||
| @@ -374,7 +382,7 @@ fn deauth_user(uuid: String, _token: AdminToken, conn: DbConn) -> EmptyResult { | ||||
|  | ||||
| #[post("/users/<uuid>/disable")] | ||||
| fn disable_user(uuid: String, _token: AdminToken, conn: DbConn) -> EmptyResult { | ||||
|     let mut user = User::find_by_uuid(&uuid, &conn).map_res("User doesn't exist")?; | ||||
|     let mut user = get_user_or_404(&uuid, &conn)?; | ||||
|     Device::delete_all_by_user(&user.uuid, &conn)?; | ||||
|     user.reset_security_stamp(); | ||||
|     user.enabled = false; | ||||
| @@ -384,7 +392,7 @@ fn disable_user(uuid: String, _token: AdminToken, conn: DbConn) -> EmptyResult { | ||||
|  | ||||
| #[post("/users/<uuid>/enable")] | ||||
| fn enable_user(uuid: String, _token: AdminToken, conn: DbConn) -> EmptyResult { | ||||
|     let mut user = User::find_by_uuid(&uuid, &conn).map_res("User doesn't exist")?; | ||||
|     let mut user = get_user_or_404(&uuid, &conn)?; | ||||
|     user.enabled = true; | ||||
|  | ||||
|     user.save(&conn) | ||||
| @@ -392,7 +400,7 @@ fn enable_user(uuid: String, _token: AdminToken, conn: DbConn) -> EmptyResult { | ||||
|  | ||||
| #[post("/users/<uuid>/remove-2fa")] | ||||
| fn remove_2fa(uuid: String, _token: AdminToken, conn: DbConn) -> EmptyResult { | ||||
|     let mut user = User::find_by_uuid(&uuid, &conn).map_res("User doesn't exist")?; | ||||
|     let mut user = get_user_or_404(&uuid, &conn)?; | ||||
|     TwoFactor::delete_all_by_user(&user.uuid, &conn)?; | ||||
|     user.totp_recover = None; | ||||
|     user.save(&conn) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user