empty content type error

This commit is contained in:
mpostma 2021-09-30 10:26:30 +02:00 committed by Tamo
parent e400ae900d
commit 137272b8de
No known key found for this signature in database
GPG Key ID: 20CD8020AFA88D69
3 changed files with 24 additions and 3 deletions

View File

@ -83,6 +83,8 @@ pub enum Code {
DumpAlreadyInProgress,
DumpProcessFailed,
MissingContentType,
}
impl Code {
@ -154,6 +156,7 @@ impl Code {
DumpProcessFailed => {
ErrCode::internal("dump_process_failed", StatusCode::INTERNAL_SERVER_ERROR)
}
MissingContentType => ErrCode::invalid("missing_content_type", StatusCode::UNSUPPORTED_MEDIA_TYPE),
}
}

View File

@ -9,6 +9,20 @@ use aweb::error::{JsonPayloadError, QueryPayloadError};
use meilisearch_error::{Code, ErrorCode};
use serde::{Deserialize, Serialize};
#[derive(Debug, thiserror::Error)]
pub enum MeilisearchHttpError {
#[error("A Content-Type header is missing. Accepted values for the Content-Type header are: \"application/json\", \"application/x-ndjson\", \"test/csv\"")]
MissingContentType,
}
impl ErrorCode for MeilisearchHttpError {
fn error_code(&self) -> Code {
match self {
MeilisearchHttpError::MissingContentType => Code::MissingContentType,
}
}
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ResponseError {

View File

@ -10,7 +10,7 @@ use serde::Deserialize;
use serde_json::Value;
use tokio::sync::mpsc;
use crate::error::ResponseError;
use crate::error::{MeilisearchHttpError, ResponseError};
use crate::extractors::authentication::{policies::*, GuardedData};
use crate::extractors::payload::Payload;
use crate::routes::IndexParam;
@ -66,7 +66,7 @@ pub fn configure(cfg: &mut web::ServiceConfig) {
.route(
web::post()
.guard(empty_application_type)
.to(HttpResponse::UnsupportedMediaType),
.to(missing_content_type_error),
)
.route(web::post().guard(guard_json).to(add_documents_json))
.route(web::post().guard(guard_ndjson).to(add_documents_ndjson))
@ -76,7 +76,7 @@ pub fn configure(cfg: &mut web::ServiceConfig) {
.route(
web::put()
.guard(empty_application_type)
.to(HttpResponse::UnsupportedMediaType),
.to(missing_content_type_error),
)
.route(web::put().guard(guard_json).to(update_documents_json))
.route(web::put().guard(guard_ndjson).to(update_documents_ndjson))
@ -93,6 +93,10 @@ pub fn configure(cfg: &mut web::ServiceConfig) {
);
}
async fn missing_content_type_error() -> Result<HttpResponse, ResponseError> {
Err(MeilisearchHttpError::MissingContentType.into())
}
pub async fn get_document(
meilisearch: GuardedData<Public, MeiliSearch>,
path: web::Path<DocumentParam>,