mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-10-31 16:06:31 +00:00 
			
		
		
		
	Add specific immutable_field error codes
This commit is contained in:
		| @@ -292,14 +292,14 @@ impl From<v5::ResponseError> for v6::ResponseError { | ||||
|             "malformed_payload" => v6::Code::MalformedPayload, | ||||
|             "missing_payload" => v6::Code::MissingPayload, | ||||
|             "api_key_not_found" => v6::Code::ApiKeyNotFound, | ||||
|             "missing_parameter" => v6::Code::UnretrievableErrorCode, | ||||
|             "missing_parameter" => v6::Code::BadRequest, | ||||
|             "invalid_api_key_actions" => v6::Code::InvalidApiKeyActions, | ||||
|             "invalid_api_key_indexes" => v6::Code::InvalidApiKeyIndexes, | ||||
|             "invalid_api_key_expires_at" => v6::Code::InvalidApiKeyExpiresAt, | ||||
|             "invalid_api_key_description" => v6::Code::InvalidApiKeyDescription, | ||||
|             "invalid_api_key_name" => v6::Code::InvalidApiKeyName, | ||||
|             "invalid_api_key_uid" => v6::Code::InvalidApiKeyUid, | ||||
|             "immutable_field" => v6::Code::ImmutableField, | ||||
|             "immutable_field" => v6::Code::BadRequest, | ||||
|             "api_key_already_exists" => v6::Code::ApiKeyAlreadyExists, | ||||
|             other => { | ||||
|                 log::warn!("Unknown error code {}", other); | ||||
|   | ||||
| @@ -181,7 +181,19 @@ DumpAlreadyProcessing                 , invalid       , CONFLICT; | ||||
| DumpNotFound                          , invalid       , NOT_FOUND; | ||||
| DumpProcessFailed                     , internal      , INTERNAL_SERVER_ERROR; | ||||
| DuplicateIndexFound                   , invalid       , BAD_REQUEST; | ||||
| ImmutableField                        , invalid       , BAD_REQUEST; | ||||
|  | ||||
| ImmutableApiKeyUid                    , invalid       , BAD_REQUEST; | ||||
| ImmutableApiKeyKey                    , invalid       , BAD_REQUEST; | ||||
| ImmutableApiKeyActions                , invalid       , BAD_REQUEST; | ||||
| ImmutableApiKeyIndexes                , invalid       , BAD_REQUEST; | ||||
| ImmutableApiKeyExpiresAt              , invalid       , BAD_REQUEST; | ||||
| ImmutableApiKeyCreatedAt              , invalid       , BAD_REQUEST; | ||||
| ImmutableApiKeyUpdatedAt              , invalid       , BAD_REQUEST; | ||||
|  | ||||
| ImmutableIndexUid                     , invalid       , BAD_REQUEST; | ||||
| ImmutableIndexCreatedAt               , invalid       , BAD_REQUEST; | ||||
| ImmutableIndexUpdatedAt               , invalid       , BAD_REQUEST; | ||||
|  | ||||
| IndexAlreadyExists                    , invalid       , CONFLICT ; | ||||
| IndexCreationFailed                   , internal      , INTERNAL_SERVER_ERROR; | ||||
| IndexNotFound                         , invalid       , NOT_FOUND; | ||||
|   | ||||
| @@ -80,12 +80,12 @@ fn deny_immutable_fields_api_key( | ||||
|     )); | ||||
|  | ||||
|     error.code = match field { | ||||
|         "uid" => Code::ImmutableField, | ||||
|         "actions" => Code::ImmutableField, | ||||
|         "indexes" => Code::ImmutableField, | ||||
|         "expiresAt" => Code::ImmutableField, | ||||
|         "createdAt" => Code::ImmutableField, | ||||
|         "updatedAt" => Code::ImmutableField, | ||||
|         "uid" => Code::ImmutableApiKeyUid, | ||||
|         "actions" => Code::ImmutableApiKeyActions, | ||||
|         "indexes" => Code::ImmutableApiKeyIndexes, | ||||
|         "expiresAt" => Code::ImmutableApiKeyExpiresAt, | ||||
|         "createdAt" => Code::ImmutableApiKeyCreatedAt, | ||||
|         "updatedAt" => Code::ImmutableApiKeyUpdatedAt, | ||||
|         _ => Code::BadRequest, | ||||
|     }; | ||||
|     error | ||||
|   | ||||
| @@ -1,9 +1,11 @@ | ||||
| use std::convert::Infallible; | ||||
|  | ||||
| use actix_web::web::Data; | ||||
| use actix_web::{web, HttpRequest, HttpResponse}; | ||||
| use deserr::DeserializeFromValue; | ||||
| use deserr::{DeserializeError, DeserializeFromValue, ValuePointerRef}; | ||||
| use index_scheduler::IndexScheduler; | ||||
| use log::debug; | ||||
| use meilisearch_types::error::deserr_codes::*; | ||||
| use meilisearch_types::error::{deserr_codes::*, unwrap_any, Code}; | ||||
| use meilisearch_types::error::{DeserrError, ResponseError, TakeErrorMessage}; | ||||
| use meilisearch_types::index_uid::IndexUid; | ||||
| use meilisearch_types::milli::{self, FieldDistribution, Index}; | ||||
| @@ -140,8 +142,27 @@ pub async fn create_index( | ||||
|     } | ||||
| } | ||||
|  | ||||
| fn deny_immutable_fields_index( | ||||
|     field: &str, | ||||
|     accepted: &[&str], | ||||
|     location: ValuePointerRef, | ||||
| ) -> DeserrError { | ||||
|     let mut error = unwrap_any(DeserrError::<BadRequest>::error::<Infallible>( | ||||
|         None, | ||||
|         deserr::ErrorKind::UnknownKey { key: field, accepted }, | ||||
|         location, | ||||
|     )); | ||||
|  | ||||
|     error.code = match field { | ||||
|         "uid" => Code::ImmutableIndexUid, | ||||
|         "createdAt" => Code::ImmutableIndexCreatedAt, | ||||
|         "updatedAt" => Code::ImmutableIndexUpdatedAt, | ||||
|         _ => Code::BadRequest, | ||||
|     }; | ||||
|     error | ||||
| } | ||||
| #[derive(DeserializeFromValue, Debug)] | ||||
| #[deserr(error = DeserrError, rename_all = camelCase, deny_unknown_fields)] | ||||
| #[deserr(error = DeserrError, rename_all = camelCase, deny_unknown_fields = deny_immutable_fields_index)] | ||||
| pub struct UpdateIndexRequest { | ||||
|     #[deserr(error = DeserrError<InvalidIndexPrimaryKey>)] | ||||
|     primary_key: Option<String>, | ||||
|   | ||||
| @@ -1404,9 +1404,9 @@ async fn error_patch_api_key_indexes() { | ||||
|     meili_snap::snapshot!(meili_snap::json_string!(response, { ".createdAt" => "[ignored]", ".updatedAt" => "[ignored]" }), @r###" | ||||
|     { | ||||
|       "message": "Json deserialize error: unknown field `indexes`, expected one of `description`, `name` at ``.", | ||||
|       "code": "immutable_field", | ||||
|       "code": "immutable_api_key_indexes", | ||||
|       "type": "invalid_request", | ||||
|       "link": "https://docs.meilisearch.com/errors#immutable-field" | ||||
|       "link": "https://docs.meilisearch.com/errors#immutable-api-key-indexes" | ||||
|     } | ||||
|     "###); | ||||
|     meili_snap::snapshot!(code, @"400 Bad Request"); | ||||
| @@ -1481,9 +1481,9 @@ async fn error_patch_api_key_actions() { | ||||
|     meili_snap::snapshot!(meili_snap::json_string!(response, { ".createdAt" => "[ignored]", ".updatedAt" => "[ignored]" }), @r###" | ||||
|     { | ||||
|       "message": "Json deserialize error: unknown field `actions`, expected one of `description`, `name` at ``.", | ||||
|       "code": "immutable_field", | ||||
|       "code": "immutable_api_key_actions", | ||||
|       "type": "invalid_request", | ||||
|       "link": "https://docs.meilisearch.com/errors#immutable-field" | ||||
|       "link": "https://docs.meilisearch.com/errors#immutable-api-key-actions" | ||||
|     } | ||||
|     "###); | ||||
|     meili_snap::snapshot!(code, @"400 Bad Request"); | ||||
| @@ -1550,9 +1550,9 @@ async fn error_patch_api_key_expiration_date() { | ||||
|     meili_snap::snapshot!(meili_snap::json_string!(response, { ".createdAt" => "[ignored]", ".updatedAt" => "[ignored]" }), @r###" | ||||
|     { | ||||
|       "message": "Json deserialize error: unknown field `expiresAt`, expected one of `description`, `name` at ``.", | ||||
|       "code": "immutable_field", | ||||
|       "code": "immutable_api_key_expires_at", | ||||
|       "type": "invalid_request", | ||||
|       "link": "https://docs.meilisearch.com/errors#immutable-field" | ||||
|       "link": "https://docs.meilisearch.com/errors#immutable-api-key-expires-at" | ||||
|     } | ||||
|     "###); | ||||
|     meili_snap::snapshot!(code, @"400 Bad Request"); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user