diff --git a/services/backup/src/error.rs b/services/backup/src/error.rs --- a/services/backup/src/error.rs +++ b/services/backup/src/error.rs @@ -1,7 +1,7 @@ use actix_web::{ error::{ ErrorBadRequest, ErrorConflict, ErrorInternalServerError, ErrorNotFound, - ErrorServiceUnavailable, HttpError, + ErrorServiceUnavailable, }, HttpResponse, ResponseError, }; @@ -24,7 +24,8 @@ AuthError(AuthServiceError), DB(comm_lib::database::Error), IdentityClientError(IdentityClientError), - BadRequest, + #[error(ignore)] + BadRequest(&'static str), NoUserData, } @@ -86,19 +87,13 @@ warn!("Transient identity error occurred: {err}"); ErrorServiceUnavailable("please retry") } - BackupError::NoUserID => ErrorBadRequest("bad request"), - BackupError::BadRequest => ErrorBadRequest("bad request"), + BackupError::NoUserID => ErrorBadRequest("no_user_id"), + BackupError::BadRequest(reason) => ErrorBadRequest(*reason), BackupError::NoUserData => ErrorNotFound("not found"), } } } -impl From for HttpError { - fn from(value: BackupError) -> Self { - value.into() - } -} - impl ResponseError for BackupError { fn error_response(&self) -> HttpResponse { actix_web::Error::from(self).error_response() diff --git a/services/backup/src/http/handlers/backup.rs b/services/backup/src/http/handlers/backup.rs --- a/services/backup/src/http/handlers/backup.rs +++ b/services/backup/src/http/handlers/backup.rs @@ -56,7 +56,7 @@ let siwe_backup_msg = aux_data.get_siwe_backup_msg()?; let version_info = aux_data .get_backup_version_info()? - .ok_or(BackupError::BadRequest)?; + .ok_or(BackupError::BadRequest("missing_version_info"))?; let item = BackupItem::new( user.user_id.clone(), @@ -174,7 +174,7 @@ let aux_data = multipart.get_aux_data().await?; let version_info = aux_data .get_backup_version_info()? - .ok_or(BackupError::BadRequest)?; + .ok_or(BackupError::BadRequest("missing_version_info"))?; let existing_backup_item = db_client .find_backup_item(&user.user_id, &backup_id) @@ -508,14 +508,14 @@ let Some(mut field) = multipart.try_next().await? else { warn!("Malformed request: expected a field."); - return Err(ErrorBadRequest("Bad request"))?; + return Err(ErrorBadRequest("multipart_field_expected"))?; }; if field.name() != data_field_name { warn!( hash_field_name, "Malformed request: '{data_field_name}' data field expected." ); - return Err(ErrorBadRequest("Bad request"))?; + return Err(ErrorBadRequest("missing_data_field"))?; } let blob_info = BlobInfo { @@ -577,13 +577,13 @@ name, "Malformed request: 'attachments' text field expected." ); - return Err(BackupError::BadRequest); + return Err(BackupError::BadRequest("attachments_field_expected")); } attachments.lines().map(ToString::to_string).collect() } Ok(None) => Vec::new(), - Err(_) => return Err(BackupError::BadRequest), + Err(_) => return Err(BackupError::BadRequest("multipart_error")), }; blob_utils::create_holders_for_blob_hashes(attachments_hashes, blob_client)