From 06a2a27a99c51e394455533ed1d35b9e3f4cf099 Mon Sep 17 00:00:00 2001 From: Akshay Date: Fri, 9 Apr 2021 20:51:05 +0530 Subject: [PATCH] api: Check http method in try_from_http_request --- ruma-api-macros/src/api/request.rs | 6 ++++++ ruma-api/src/error.rs | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/ruma-api-macros/src/api/request.rs b/ruma-api-macros/src/api/request.rs index d83c678f..793e45fd 100644 --- a/ruma-api-macros/src/api/request.rs +++ b/ruma-api-macros/src/api/request.rs @@ -577,6 +577,12 @@ impl Request { fn try_from_http_request( request: #http::Request> ) -> ::std::result::Result { + if request.method() != #http::Method::#method { + return Err(#ruma_api::error::FromHttpRequestError::MethodMismatch { + expected: #http::Method::#method, + received: request.method().clone(), + }); + } #extract_request_path #extract_request_query #extract_request_headers diff --git a/ruma-api/src/error.rs b/ruma-api/src/error.rs index 9f2046f2..5f2aa95f 100644 --- a/ruma-api/src/error.rs +++ b/ruma-api/src/error.rs @@ -65,6 +65,15 @@ pub enum FromHttpRequestError { /// Deserialization failed #[error("deserialization failed: {0}")] Deserialization(#[from] RequestDeserializationError), + + /// HTTP method mismatch + #[error("http method mismatch: expected {expected}, received: {received}")] + MethodMismatch { + /// expected http method + expected: http::method::Method, + /// received http method + received: http::method::Method, + }, } /// An error that occurred when trying to deserialize a request.