forked from loafle/openapi-generator-original
[Rust-Axum] Implement support for Basic and Bearer auth in Claims (#20584)
* Implement a custom error handler for unhandled or generic endpoint errors * Pass in method, host and cookies to error handler * Update axum to 0.8 * Make API methods take references instead of ownership * Rebase error handler * Rebase with updated error handler * Update deps * Fix capture group syntax * Rebase rust-axum-error-handling * Update docs * Multipart is also part of the axum update * Update samples * Update docs
This commit is contained in:
parent
eb668b6a76
commit
d5866feb2d
@ -209,16 +209,16 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
|||||||
|Union|✗|OAS3
|
|Union|✗|OAS3
|
||||||
|allOf|✗|OAS2,OAS3
|
|allOf|✗|OAS2,OAS3
|
||||||
|anyOf|✗|OAS3
|
|anyOf|✗|OAS3
|
||||||
|oneOf|✗|OAS3
|
|oneOf|✓|OAS3
|
||||||
|not|✗|OAS3
|
|not|✗|OAS3
|
||||||
|
|
||||||
### Security Feature
|
### Security Feature
|
||||||
| Name | Supported | Defined By |
|
| Name | Supported | Defined By |
|
||||||
| ---- | --------- | ---------- |
|
| ---- | --------- | ---------- |
|
||||||
|BasicAuth|✗|OAS2,OAS3
|
|BasicAuth|✓|OAS2,OAS3
|
||||||
|ApiKey|✓|OAS2,OAS3
|
|ApiKey|✓|OAS2,OAS3
|
||||||
|OpenIDConnect|✗|OAS3
|
|OpenIDConnect|✗|OAS3
|
||||||
|BearerToken|✗|OAS3
|
|BearerToken|✓|OAS3
|
||||||
|OAuth2_Implicit|✗|OAS2,OAS3
|
|OAuth2_Implicit|✗|OAS2,OAS3
|
||||||
|OAuth2_Password|✗|OAS2,OAS3
|
|OAuth2_Password|✗|OAS2,OAS3
|
||||||
|OAuth2_ClientCredentials|✗|OAS2,OAS3
|
|OAuth2_ClientCredentials|✗|OAS2,OAS3
|
||||||
|
@ -85,6 +85,7 @@ public class RustAxumServerCodegen extends AbstractRustCodegen implements Codege
|
|||||||
// Grouping (Method, Operation) by Path.
|
// Grouping (Method, Operation) by Path.
|
||||||
private final Map<String, ArrayList<MethodOperation>> pathMethodOpMap = new HashMap<>();
|
private final Map<String, ArrayList<MethodOperation>> pathMethodOpMap = new HashMap<>();
|
||||||
private boolean havingAuthMethods = false;
|
private boolean havingAuthMethods = false;
|
||||||
|
private boolean havingBasicAuthMethods = false;
|
||||||
|
|
||||||
// Logger
|
// Logger
|
||||||
private final Logger LOGGER = LoggerFactory.getLogger(RustAxumServerCodegen.class);
|
private final Logger LOGGER = LoggerFactory.getLogger(RustAxumServerCodegen.class);
|
||||||
@ -98,7 +99,14 @@ public class RustAxumServerCodegen extends AbstractRustCodegen implements Codege
|
|||||||
WireFormatFeature.Custom
|
WireFormatFeature.Custom
|
||||||
))
|
))
|
||||||
.securityFeatures(EnumSet.of(
|
.securityFeatures(EnumSet.of(
|
||||||
SecurityFeature.ApiKey
|
SecurityFeature.ApiKey,
|
||||||
|
SecurityFeature.BasicAuth,
|
||||||
|
SecurityFeature.BearerToken
|
||||||
|
))
|
||||||
|
.schemaSupportFeatures(EnumSet.of(
|
||||||
|
SchemaSupportFeature.Simple,
|
||||||
|
SchemaSupportFeature.Composite,
|
||||||
|
SchemaSupportFeature.oneOf
|
||||||
))
|
))
|
||||||
.excludeGlobalFeatures(
|
.excludeGlobalFeatures(
|
||||||
GlobalFeature.Info,
|
GlobalFeature.Info,
|
||||||
@ -777,6 +785,16 @@ public class RustAxumServerCodegen extends AbstractRustCodegen implements Codege
|
|||||||
|
|
||||||
op.vendorExtensions.put("x-has-auth-methods", true);
|
op.vendorExtensions.put("x-has-auth-methods", true);
|
||||||
hasAuthMethod = true;
|
hasAuthMethod = true;
|
||||||
|
} else if (s.isBasic) {
|
||||||
|
op.vendorExtensions.put("x-has-basic-auth-methods", true);
|
||||||
|
op.vendorExtensions.put("x-is-basic-bearer", s.isBasicBearer);
|
||||||
|
op.vendorExtensions.put("x-api-auth-header-name", "authorization");
|
||||||
|
|
||||||
|
op.vendorExtensions.put("x-has-auth-methods", true);
|
||||||
|
hasAuthMethod = true;
|
||||||
|
|
||||||
|
if (!this.havingBasicAuthMethods)
|
||||||
|
this.havingBasicAuthMethods = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -878,6 +896,7 @@ public class RustAxumServerCodegen extends AbstractRustCodegen implements Codege
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
bundle.put("pathMethodOps", pathMethodOps);
|
bundle.put("pathMethodOps", pathMethodOps);
|
||||||
if (havingAuthMethods) bundle.put("havingAuthMethods", true);
|
if (havingAuthMethods) bundle.put("havingAuthMethods", true);
|
||||||
|
if (havingBasicAuthMethods) bundle.put("havingBasicAuthMethods", true);
|
||||||
|
|
||||||
return super.postProcessSupportingFileData(bundle);
|
return super.postProcessSupportingFileData(bundle);
|
||||||
}
|
}
|
||||||
|
@ -12,9 +12,10 @@ pub mod {{classFilename}};
|
|||||||
pub trait CookieAuthentication {
|
pub trait CookieAuthentication {
|
||||||
type Claims;
|
type Claims;
|
||||||
|
|
||||||
/// Extracting Claims from Cookie. Return None if the Claims is invalid.
|
/// Extracting Claims from Cookie. Return None if the Claims are invalid.
|
||||||
async fn extract_claims_from_cookie(&self, cookies: &axum_extra::extract::CookieJar, key: &str) -> Option<Self::Claims>;
|
async fn extract_claims_from_cookie(&self, cookies: &axum_extra::extract::CookieJar, key: &str) -> Option<Self::Claims>;
|
||||||
}
|
}
|
||||||
|
|
||||||
{{/isKeyInCookie}}
|
{{/isKeyInCookie}}
|
||||||
{{#isKeyInHeader}}
|
{{#isKeyInHeader}}
|
||||||
/// API Key Authentication - Header.
|
/// API Key Authentication - Header.
|
||||||
@ -22,12 +23,32 @@ pub trait CookieAuthentication {
|
|||||||
pub trait ApiKeyAuthHeader {
|
pub trait ApiKeyAuthHeader {
|
||||||
type Claims;
|
type Claims;
|
||||||
|
|
||||||
/// Extracting Claims from Header. Return None if the Claims is invalid.
|
/// Extracting Claims from Header. Return None if the Claims are invalid.
|
||||||
async fn extract_claims_from_header(&self, headers: &axum::http::header::HeaderMap, key: &str) -> Option<Self::Claims>;
|
async fn extract_claims_from_header(&self, headers: &axum::http::header::HeaderMap, key: &str) -> Option<Self::Claims>;
|
||||||
}
|
}
|
||||||
|
|
||||||
{{/isKeyInHeader}}
|
{{/isKeyInHeader}}
|
||||||
{{/isApiKey}}
|
{{/isApiKey}}
|
||||||
{{/authMethods}}
|
{{/authMethods}}
|
||||||
|
{{#havingBasicAuthMethods}}
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub enum BasicAuthKind {
|
||||||
|
Basic,
|
||||||
|
Bearer,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// API Key Authentication - Authentication Header.
|
||||||
|
/// For `Basic token` and `Bearer token`
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
pub trait ApiAuthBasic {
|
||||||
|
type Claims;
|
||||||
|
|
||||||
|
/// Extracting Claims from Header. Return None if the Claims are invalid.
|
||||||
|
async fn extract_claims_from_auth_header(&self, kind: BasicAuthKind, headers: &axum::http::header::HeaderMap, key: &str) -> Option<Self::Claims>;
|
||||||
|
}
|
||||||
|
|
||||||
|
{{/havingBasicAuthMethods}}
|
||||||
|
|
||||||
// Error handler for unhandled errors.
|
// Error handler for unhandled errors.
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
|
@ -12,6 +12,11 @@ async fn {{#vendorExtensions}}{{{x-operation-id}}}{{/vendorExtensions}}<I, A, E{
|
|||||||
{{#x-has-header-auth-methods}}
|
{{#x-has-header-auth-methods}}
|
||||||
headers: HeaderMap,
|
headers: HeaderMap,
|
||||||
{{/x-has-header-auth-methods}}
|
{{/x-has-header-auth-methods}}
|
||||||
|
{{^x-has-header-auth-methods}}
|
||||||
|
{{#x-has-basic-auth-methods}}
|
||||||
|
headers: HeaderMap,
|
||||||
|
{{/x-has-basic-auth-methods}}
|
||||||
|
{{/x-has-header-auth-methods}}
|
||||||
{{/vendorExtensions}}
|
{{/vendorExtensions}}
|
||||||
{{/headerParams.size}}
|
{{/headerParams.size}}
|
||||||
{{#pathParams.size}}
|
{{#pathParams.size}}
|
||||||
@ -54,7 +59,7 @@ async fn {{#vendorExtensions}}{{{x-operation-id}}}{{/vendorExtensions}}<I, A, E{
|
|||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::{{classFilename}}::{{classnamePascalCase}}<E{{#havingAuthMethod}}, Claims = C{{/havingAuthMethod}}>{{#vendorExtensions}}{{#x-has-cookie-auth-methods}}+ apis::CookieAuthentication<Claims = C>{{/x-has-cookie-auth-methods}}{{#x-has-header-auth-methods}}+ apis::ApiKeyAuthHeader<Claims = C>{{/x-has-header-auth-methods}}{{/vendorExtensions}} + Send + Sync,
|
A: apis::{{classFilename}}::{{classnamePascalCase}}<E{{#havingAuthMethod}}, Claims = C{{/havingAuthMethod}}>{{#vendorExtensions}}{{#x-has-cookie-auth-methods}}+ apis::CookieAuthentication<Claims = C>{{/x-has-cookie-auth-methods}}{{#x-has-header-auth-methods}}+ apis::ApiKeyAuthHeader<Claims = C>{{/x-has-header-auth-methods}}{{#x-has-basic-auth-methods}}+ apis::ApiAuthBasic<Claims = C>{{/x-has-basic-auth-methods}}{{/vendorExtensions}} + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
{{#vendorExtensions}}
|
{{#vendorExtensions}}
|
||||||
@ -67,14 +72,20 @@ where
|
|||||||
{{#x-has-header-auth-methods}}
|
{{#x-has-header-auth-methods}}
|
||||||
let claims_in_header = api_impl.as_ref().extract_claims_from_header(&headers, "{{x-api-key-header-name}}").await;
|
let claims_in_header = api_impl.as_ref().extract_claims_from_header(&headers, "{{x-api-key-header-name}}").await;
|
||||||
{{/x-has-header-auth-methods}}
|
{{/x-has-header-auth-methods}}
|
||||||
|
{{#x-has-basic-auth-methods}}
|
||||||
|
let claims_in_auth_header = api_impl.as_ref().extract_claims_from_auth_header(apis::BasicAuthKind::{{#x-is-basic-bearer}}Bearer{{/x-is-basic-bearer}}{{^x-is-basic-bearer}}Basic{{/x-is-basic-bearer}}, &headers, "{{x-api-auth-header-name}}").await;
|
||||||
|
{{/x-has-basic-auth-methods}}
|
||||||
{{#x-has-auth-methods}}
|
{{#x-has-auth-methods}}
|
||||||
let claims = None
|
let claims = None
|
||||||
{{#x-has-cookie-auth-methods}}
|
{{#x-has-cookie-auth-methods}}
|
||||||
.or(claims_in_cookie)
|
.or(claims_in_cookie)
|
||||||
{{/x-has-cookie-auth-methods}}
|
{{/x-has-cookie-auth-methods}}
|
||||||
{{#x-has-header-auth-methods}}
|
{{#x-has-header-auth-methods}}
|
||||||
.or(claims_in_header)
|
.or(claims_in_header)
|
||||||
{{/x-has-header-auth-methods}}
|
{{/x-has-header-auth-methods}}
|
||||||
|
{{#x-has-basic-auth-methods}}
|
||||||
|
.or(claims_in_auth_header)
|
||||||
|
{{/x-has-basic-auth-methods}}
|
||||||
;
|
;
|
||||||
let Some(claims) = claims else {
|
let Some(claims) = claims else {
|
||||||
return Response::builder()
|
return Response::builder()
|
||||||
@ -346,7 +357,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl.as_ref().handle_error(&method, &host, &cookies, why).await;
|
return api_impl.as_ref().handle_error(&method, &host, &cookies, why).await;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
pub fn new<I, A, E{{#havingAuthMethods}}, C{{/havingAuthMethods}}>(api_impl: I) -> Router
|
pub fn new<I, A, E{{#havingAuthMethods}}, C{{/havingAuthMethods}}>(api_impl: I) -> Router
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Clone + Send + Sync + 'static,
|
I: AsRef<A> + Clone + Send + Sync + 'static,
|
||||||
A: {{#apiInfo}}{{#apis}}{{#operations}}apis::{{classFilename}}::{{classnamePascalCase}}<E{{#havingAuthMethod}}, Claims = C{{/havingAuthMethod}}> + {{/operations}}{{/apis}}{{/apiInfo}}{{#authMethods}}{{#isApiKey}}{{#isKeyInCookie}}apis::CookieAuthentication<Claims = C> + {{/isKeyInCookie}}{{#isKeyInHeader}}apis::ApiKeyAuthHeader<Claims = C> + {{/isKeyInHeader}}{{/isApiKey}}{{/authMethods}}Send + Sync + 'static,
|
A: {{#apiInfo}}{{#apis}}{{#operations}}apis::{{classFilename}}::{{classnamePascalCase}}<E{{#havingAuthMethod}}, Claims = C{{/havingAuthMethod}}> + {{/operations}}{{/apis}}{{/apiInfo}}{{#authMethods}}{{#isApiKey}}{{#isKeyInCookie}}apis::CookieAuthentication<Claims = C> + {{/isKeyInCookie}}{{#isKeyInHeader}}apis::ApiKeyAuthHeader<Claims = C> + {{/isKeyInHeader}}{{/isApiKey}}{{#isBasic}}apis::ApiAuthBasic<Claims = C> + {{/isBasic}}{{/authMethods}}Send + Sync + 'static,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{{#havingAuthMethods}}C: Send + Sync + 'static,{{/havingAuthMethods}}
|
{{#havingAuthMethods}}C: Send + Sync + 'static,{{/havingAuthMethods}}
|
||||||
{
|
{
|
||||||
|
@ -5,19 +5,20 @@ pub mod payments;
|
|||||||
pub trait ApiKeyAuthHeader {
|
pub trait ApiKeyAuthHeader {
|
||||||
type Claims;
|
type Claims;
|
||||||
|
|
||||||
/// Extracting Claims from Header. Return None if the Claims is invalid.
|
/// Extracting Claims from Header. Return None if the Claims are invalid.
|
||||||
async fn extract_claims_from_header(
|
async fn extract_claims_from_header(
|
||||||
&self,
|
&self,
|
||||||
headers: &axum::http::header::HeaderMap,
|
headers: &axum::http::header::HeaderMap,
|
||||||
key: &str,
|
key: &str,
|
||||||
) -> Option<Self::Claims>;
|
) -> Option<Self::Claims>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Cookie Authentication.
|
/// Cookie Authentication.
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
pub trait CookieAuthentication {
|
pub trait CookieAuthentication {
|
||||||
type Claims;
|
type Claims;
|
||||||
|
|
||||||
/// Extracting Claims from Cookie. Return None if the Claims is invalid.
|
/// Extracting Claims from Cookie. Return None if the Claims are invalid.
|
||||||
async fn extract_claims_from_cookie(
|
async fn extract_claims_from_cookie(
|
||||||
&self,
|
&self,
|
||||||
cookies: &axum_extra::extract::CookieJar,
|
cookies: &axum_extra::extract::CookieJar,
|
||||||
@ -25,6 +26,28 @@ pub trait CookieAuthentication {
|
|||||||
) -> Option<Self::Claims>;
|
) -> Option<Self::Claims>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub enum BasicAuthKind {
|
||||||
|
Basic,
|
||||||
|
Bearer,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// API Key Authentication - Authentication Header.
|
||||||
|
/// For `Basic token` and `Bearer token`
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
pub trait ApiAuthBasic {
|
||||||
|
type Claims;
|
||||||
|
|
||||||
|
/// Extracting Claims from Header. Return None if the Claims are invalid.
|
||||||
|
async fn extract_claims_from_auth_header(
|
||||||
|
&self,
|
||||||
|
kind: BasicAuthKind,
|
||||||
|
headers: &axum::http::header::HeaderMap,
|
||||||
|
key: &str,
|
||||||
|
) -> Option<Self::Claims>;
|
||||||
|
}
|
||||||
|
|
||||||
// Error handler for unhandled errors.
|
// Error handler for unhandled errors.
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
pub trait ErrorHandler<E: std::fmt::Debug + Send + Sync + 'static = ()> {
|
pub trait ErrorHandler<E: std::fmt::Debug + Send + Sync + 'static = ()> {
|
||||||
|
@ -51,6 +51,7 @@ pub trait Payments<E: std::fmt::Debug + Send + Sync + 'static = ()>:
|
|||||||
method: &Method,
|
method: &Method,
|
||||||
host: &Host,
|
host: &Host,
|
||||||
cookies: &CookieJar,
|
cookies: &CookieJar,
|
||||||
|
claims: &Self::Claims,
|
||||||
path_params: &models::GetPaymentMethodByIdPathParams,
|
path_params: &models::GetPaymentMethodByIdPathParams,
|
||||||
) -> Result<GetPaymentMethodByIdResponse, E>;
|
) -> Result<GetPaymentMethodByIdResponse, E>;
|
||||||
|
|
||||||
@ -62,6 +63,7 @@ pub trait Payments<E: std::fmt::Debug + Send + Sync + 'static = ()>:
|
|||||||
method: &Method,
|
method: &Method,
|
||||||
host: &Host,
|
host: &Host,
|
||||||
cookies: &CookieJar,
|
cookies: &CookieJar,
|
||||||
|
claims: &Self::Claims,
|
||||||
) -> Result<GetPaymentMethodsResponse, E>;
|
) -> Result<GetPaymentMethodsResponse, E>;
|
||||||
|
|
||||||
/// Make a payment.
|
/// Make a payment.
|
||||||
|
@ -17,6 +17,8 @@ pub fn new<I, A, E, C>(api_impl: I) -> Router
|
|||||||
where
|
where
|
||||||
I: AsRef<A> + Clone + Send + Sync + 'static,
|
I: AsRef<A> + Clone + Send + Sync + 'static,
|
||||||
A: apis::payments::Payments<E, Claims = C>
|
A: apis::payments::Payments<E, Claims = C>
|
||||||
|
+ apis::ApiAuthBasic<Claims = C>
|
||||||
|
+ apis::ApiAuthBasic<Claims = C>
|
||||||
+ apis::ApiKeyAuthHeader<Claims = C>
|
+ apis::ApiKeyAuthHeader<Claims = C>
|
||||||
+ apis::CookieAuthentication<Claims = C>
|
+ apis::CookieAuthentication<Claims = C>
|
||||||
+ Send
|
+ Send
|
||||||
@ -53,14 +55,28 @@ async fn get_payment_method_by_id<I, A, E, C>(
|
|||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
|
headers: HeaderMap,
|
||||||
Path(path_params): Path<models::GetPaymentMethodByIdPathParams>,
|
Path(path_params): Path<models::GetPaymentMethodByIdPathParams>,
|
||||||
State(api_impl): State<I>,
|
State(api_impl): State<I>,
|
||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::payments::Payments<E, Claims = C> + Send + Sync,
|
A: apis::payments::Payments<E, Claims = C> + apis::ApiAuthBasic<Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
|
// Authentication
|
||||||
|
let claims_in_auth_header = api_impl
|
||||||
|
.as_ref()
|
||||||
|
.extract_claims_from_auth_header(apis::BasicAuthKind::Bearer, &headers, "authorization")
|
||||||
|
.await;
|
||||||
|
let claims = None.or(claims_in_auth_header);
|
||||||
|
let Some(claims) = claims else {
|
||||||
|
return Response::builder()
|
||||||
|
.status(StatusCode::UNAUTHORIZED)
|
||||||
|
.body(Body::empty())
|
||||||
|
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR);
|
||||||
|
};
|
||||||
|
|
||||||
#[allow(clippy::redundant_closure)]
|
#[allow(clippy::redundant_closure)]
|
||||||
let validation =
|
let validation =
|
||||||
tokio::task::spawn_blocking(move || get_payment_method_by_id_validation(path_params))
|
tokio::task::spawn_blocking(move || get_payment_method_by_id_validation(path_params))
|
||||||
@ -76,7 +92,7 @@ where
|
|||||||
|
|
||||||
let result = api_impl
|
let result = api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.get_payment_method_by_id(&method, &host, &cookies, &path_params)
|
.get_payment_method_by_id(&method, &host, &cookies, &claims, &path_params)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut response = Response::builder();
|
let mut response = Response::builder();
|
||||||
@ -133,7 +149,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -157,13 +172,27 @@ async fn get_payment_methods<I, A, E, C>(
|
|||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
|
headers: HeaderMap,
|
||||||
State(api_impl): State<I>,
|
State(api_impl): State<I>,
|
||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::payments::Payments<E, Claims = C> + Send + Sync,
|
A: apis::payments::Payments<E, Claims = C> + apis::ApiAuthBasic<Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
|
// Authentication
|
||||||
|
let claims_in_auth_header = api_impl
|
||||||
|
.as_ref()
|
||||||
|
.extract_claims_from_auth_header(apis::BasicAuthKind::Bearer, &headers, "authorization")
|
||||||
|
.await;
|
||||||
|
let claims = None.or(claims_in_auth_header);
|
||||||
|
let Some(claims) = claims else {
|
||||||
|
return Response::builder()
|
||||||
|
.status(StatusCode::UNAUTHORIZED)
|
||||||
|
.body(Body::empty())
|
||||||
|
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR);
|
||||||
|
};
|
||||||
|
|
||||||
#[allow(clippy::redundant_closure)]
|
#[allow(clippy::redundant_closure)]
|
||||||
let validation = tokio::task::spawn_blocking(move || get_payment_methods_validation())
|
let validation = tokio::task::spawn_blocking(move || get_payment_methods_validation())
|
||||||
.await
|
.await
|
||||||
@ -178,7 +207,7 @@ where
|
|||||||
|
|
||||||
let result = api_impl
|
let result = api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.get_payment_methods(&method, &host, &cookies)
|
.get_payment_methods(&method, &host, &cookies, &claims)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut response = Response::builder();
|
let mut response = Response::builder();
|
||||||
@ -212,7 +241,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -250,6 +278,7 @@ async fn post_make_payment<I, A, E, C>(
|
|||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
|
headers: HeaderMap,
|
||||||
State(api_impl): State<I>,
|
State(api_impl): State<I>,
|
||||||
Json(body): Json<Option<models::Payment>>,
|
Json(body): Json<Option<models::Payment>>,
|
||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
@ -257,6 +286,7 @@ where
|
|||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::payments::Payments<E, Claims = C>
|
A: apis::payments::Payments<E, Claims = C>
|
||||||
+ apis::CookieAuthentication<Claims = C>
|
+ apis::CookieAuthentication<Claims = C>
|
||||||
|
+ apis::ApiAuthBasic<Claims = C>
|
||||||
+ Send
|
+ Send
|
||||||
+ Sync,
|
+ Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
@ -266,7 +296,11 @@ where
|
|||||||
.as_ref()
|
.as_ref()
|
||||||
.extract_claims_from_cookie(&cookies, "X-API-Key")
|
.extract_claims_from_cookie(&cookies, "X-API-Key")
|
||||||
.await;
|
.await;
|
||||||
let claims = None.or(claims_in_cookie);
|
let claims_in_auth_header = api_impl
|
||||||
|
.as_ref()
|
||||||
|
.extract_claims_from_auth_header(apis::BasicAuthKind::Bearer, &headers, "authorization")
|
||||||
|
.await;
|
||||||
|
let claims = None.or(claims_in_cookie).or(claims_in_auth_header);
|
||||||
let Some(claims) = claims else {
|
let Some(claims) = claims else {
|
||||||
return Response::builder()
|
return Response::builder()
|
||||||
.status(StatusCode::UNAUTHORIZED)
|
.status(StatusCode::UNAUTHORIZED)
|
||||||
@ -345,7 +379,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
|
@ -84,7 +84,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -145,7 +144,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -207,7 +205,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
|
@ -226,7 +226,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -288,7 +287,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -350,7 +348,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -412,7 +409,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -482,7 +478,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -544,7 +539,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -606,7 +600,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -701,7 +694,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -777,7 +769,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -970,7 +961,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1028,7 +1018,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl.as_ref().handle_error(&method, &host, &cookies, why).await;
|
return api_impl.as_ref().handle_error(&method, &host, &cookies, why).await;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -1106,7 +1095,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl.as_ref().handle_error(&method, &host, &cookies, why).await;
|
return api_impl.as_ref().handle_error(&method, &host, &cookies, why).await;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -1176,7 +1164,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1233,7 +1220,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1314,7 +1300,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1372,7 +1357,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl.as_ref().handle_error(&method, &host, &cookies, why).await;
|
return api_impl.as_ref().handle_error(&method, &host, &cookies, why).await;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -1431,7 +1415,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1497,7 +1480,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1662,7 +1644,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1777,7 +1758,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1882,7 +1862,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1955,7 +1934,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl.as_ref().handle_error(&method, &host, &cookies, why).await;
|
return api_impl.as_ref().handle_error(&method, &host, &cookies, why).await;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -2025,7 +2003,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2093,7 +2070,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2173,7 +2149,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2241,7 +2216,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2309,7 +2283,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2377,7 +2350,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2458,7 +2430,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2528,7 +2499,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
|
@ -104,7 +104,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -161,7 +160,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -218,7 +216,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -275,7 +272,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -332,7 +328,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -389,7 +384,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -446,7 +440,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -503,7 +496,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -560,7 +552,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -617,7 +608,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -674,7 +664,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -731,7 +720,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -788,7 +776,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -845,7 +832,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -902,7 +888,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -959,7 +944,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1016,7 +1000,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1073,7 +1056,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1130,7 +1112,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1187,7 +1168,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1244,7 +1224,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1301,7 +1280,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1358,7 +1336,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1415,7 +1392,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1472,7 +1448,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1529,7 +1504,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1586,7 +1560,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1643,7 +1616,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1700,7 +1672,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1757,7 +1728,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1814,7 +1784,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1871,7 +1840,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1928,7 +1896,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1985,7 +1952,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2042,7 +2008,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2099,7 +2064,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2156,7 +2120,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
|
@ -119,6 +119,8 @@ pub enum TestJsonFormDataResponse {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
#[allow(clippy::ptr_arg)]
|
#[allow(clippy::ptr_arg)]
|
||||||
pub trait Fake<E: std::fmt::Debug + Send + Sync + 'static = ()>: super::ErrorHandler<E> {
|
pub trait Fake<E: std::fmt::Debug + Send + Sync + 'static = ()>: super::ErrorHandler<E> {
|
||||||
|
type Claims;
|
||||||
|
|
||||||
/// Call123example - GET /v2/fake/operation-with-numeric-id
|
/// Call123example - GET /v2/fake/operation-with-numeric-id
|
||||||
async fn call123example(
|
async fn call123example(
|
||||||
&self,
|
&self,
|
||||||
@ -209,6 +211,7 @@ pub trait Fake<E: std::fmt::Debug + Send + Sync + 'static = ()>: super::ErrorHan
|
|||||||
method: &Method,
|
method: &Method,
|
||||||
host: &Host,
|
host: &Host,
|
||||||
cookies: &CookieJar,
|
cookies: &CookieJar,
|
||||||
|
claims: &Self::Claims,
|
||||||
body: &models::TestEndpointParametersRequest,
|
body: &models::TestEndpointParametersRequest,
|
||||||
) -> Result<TestEndpointParametersResponse, E>;
|
) -> Result<TestEndpointParametersResponse, E>;
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ pub mod user;
|
|||||||
pub trait ApiKeyAuthHeader {
|
pub trait ApiKeyAuthHeader {
|
||||||
type Claims;
|
type Claims;
|
||||||
|
|
||||||
/// Extracting Claims from Header. Return None if the Claims is invalid.
|
/// Extracting Claims from Header. Return None if the Claims are invalid.
|
||||||
async fn extract_claims_from_header(
|
async fn extract_claims_from_header(
|
||||||
&self,
|
&self,
|
||||||
headers: &axum::http::header::HeaderMap,
|
headers: &axum::http::header::HeaderMap,
|
||||||
@ -18,6 +18,28 @@ pub trait ApiKeyAuthHeader {
|
|||||||
) -> Option<Self::Claims>;
|
) -> Option<Self::Claims>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub enum BasicAuthKind {
|
||||||
|
Basic,
|
||||||
|
Bearer,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// API Key Authentication - Authentication Header.
|
||||||
|
/// For `Basic token` and `Bearer token`
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
pub trait ApiAuthBasic {
|
||||||
|
type Claims;
|
||||||
|
|
||||||
|
/// Extracting Claims from Header. Return None if the Claims are invalid.
|
||||||
|
async fn extract_claims_from_auth_header(
|
||||||
|
&self,
|
||||||
|
kind: BasicAuthKind,
|
||||||
|
headers: &axum::http::header::HeaderMap,
|
||||||
|
key: &str,
|
||||||
|
) -> Option<Self::Claims>;
|
||||||
|
}
|
||||||
|
|
||||||
// Error handler for unhandled errors.
|
// Error handler for unhandled errors.
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
pub trait ErrorHandler<E: std::fmt::Debug + Send + Sync + 'static = ()> {
|
pub trait ErrorHandler<E: std::fmt::Debug + Send + Sync + 'static = ()> {
|
||||||
|
@ -17,12 +17,13 @@ pub fn new<I, A, E, C>(api_impl: I) -> Router
|
|||||||
where
|
where
|
||||||
I: AsRef<A> + Clone + Send + Sync + 'static,
|
I: AsRef<A> + Clone + Send + Sync + 'static,
|
||||||
A: apis::another_fake::AnotherFake<E>
|
A: apis::another_fake::AnotherFake<E>
|
||||||
+ apis::fake::Fake<E>
|
+ apis::fake::Fake<E, Claims = C>
|
||||||
+ apis::fake_classname_tags123::FakeClassnameTags123<E>
|
+ apis::fake_classname_tags123::FakeClassnameTags123<E>
|
||||||
+ apis::pet::Pet<E, Claims = C>
|
+ apis::pet::Pet<E, Claims = C>
|
||||||
+ apis::store::Store<E, Claims = C>
|
+ apis::store::Store<E, Claims = C>
|
||||||
+ apis::user::User<E>
|
+ apis::user::User<E>
|
||||||
+ apis::ApiKeyAuthHeader<Claims = C>
|
+ apis::ApiKeyAuthHeader<Claims = C>
|
||||||
|
+ apis::ApiAuthBasic<Claims = C>
|
||||||
+ Send
|
+ Send
|
||||||
+ Sync
|
+ Sync
|
||||||
+ 'static,
|
+ 'static,
|
||||||
@ -37,46 +38,49 @@ where
|
|||||||
)
|
)
|
||||||
.route(
|
.route(
|
||||||
"/v2/fake",
|
"/v2/fake",
|
||||||
get(test_enum_parameters::<I, A, E>)
|
get(test_enum_parameters::<I, A, E, C>)
|
||||||
.patch(test_client_model::<I, A, E>)
|
.patch(test_client_model::<I, A, E, C>)
|
||||||
.post(test_endpoint_parameters::<I, A, E>),
|
.post(test_endpoint_parameters::<I, A, E, C>),
|
||||||
)
|
)
|
||||||
.route(
|
.route(
|
||||||
"/v2/fake/body-with-query-params",
|
"/v2/fake/body-with-query-params",
|
||||||
put(test_body_with_query_params::<I, A, E>),
|
put(test_body_with_query_params::<I, A, E, C>),
|
||||||
)
|
)
|
||||||
.route(
|
.route(
|
||||||
"/v2/fake/hyphenParam/{hyphen_param}",
|
"/v2/fake/hyphenParam/{hyphen_param}",
|
||||||
get(hyphen_param::<I, A, E>),
|
get(hyphen_param::<I, A, E, C>),
|
||||||
)
|
)
|
||||||
.route(
|
.route(
|
||||||
"/v2/fake/inline-additionalProperties",
|
"/v2/fake/inline-additionalProperties",
|
||||||
post(test_inline_additional_properties::<I, A, E>),
|
post(test_inline_additional_properties::<I, A, E, C>),
|
||||||
|
)
|
||||||
|
.route(
|
||||||
|
"/v2/fake/jsonFormData",
|
||||||
|
get(test_json_form_data::<I, A, E, C>),
|
||||||
)
|
)
|
||||||
.route("/v2/fake/jsonFormData", get(test_json_form_data::<I, A, E>))
|
|
||||||
.route(
|
.route(
|
||||||
"/v2/fake/operation-with-numeric-id",
|
"/v2/fake/operation-with-numeric-id",
|
||||||
get(call123example::<I, A, E>),
|
get(call123example::<I, A, E, C>),
|
||||||
)
|
)
|
||||||
.route(
|
.route(
|
||||||
"/v2/fake/outer/boolean",
|
"/v2/fake/outer/boolean",
|
||||||
post(fake_outer_boolean_serialize::<I, A, E>),
|
post(fake_outer_boolean_serialize::<I, A, E, C>),
|
||||||
)
|
)
|
||||||
.route(
|
.route(
|
||||||
"/v2/fake/outer/composite",
|
"/v2/fake/outer/composite",
|
||||||
post(fake_outer_composite_serialize::<I, A, E>),
|
post(fake_outer_composite_serialize::<I, A, E, C>),
|
||||||
)
|
)
|
||||||
.route(
|
.route(
|
||||||
"/v2/fake/outer/number",
|
"/v2/fake/outer/number",
|
||||||
post(fake_outer_number_serialize::<I, A, E>),
|
post(fake_outer_number_serialize::<I, A, E, C>),
|
||||||
)
|
)
|
||||||
.route(
|
.route(
|
||||||
"/v2/fake/outer/string",
|
"/v2/fake/outer/string",
|
||||||
post(fake_outer_string_serialize::<I, A, E>),
|
post(fake_outer_string_serialize::<I, A, E, C>),
|
||||||
)
|
)
|
||||||
.route(
|
.route(
|
||||||
"/v2/fake/response-with-numerical-description",
|
"/v2/fake/response-with-numerical-description",
|
||||||
get(fake_response_with_numerical_description::<I, A, E>),
|
get(fake_response_with_numerical_description::<I, A, E, C>),
|
||||||
)
|
)
|
||||||
.route("/v2/fake_classname_test", patch(test_classname::<I, A, E>))
|
.route("/v2/fake_classname_test", patch(test_classname::<I, A, E>))
|
||||||
.route(
|
.route(
|
||||||
@ -202,7 +206,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -222,7 +225,7 @@ fn call123example_validation() -> std::result::Result<(), ValidationErrors> {
|
|||||||
}
|
}
|
||||||
/// Call123example - GET /v2/fake/operation-with-numeric-id
|
/// Call123example - GET /v2/fake/operation-with-numeric-id
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn call123example<I, A, E>(
|
async fn call123example<I, A, E, C>(
|
||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
@ -230,7 +233,7 @@ async fn call123example<I, A, E>(
|
|||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::fake::Fake<E> + Send + Sync,
|
A: apis::fake::Fake<E, Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
#[allow(clippy::redundant_closure)]
|
#[allow(clippy::redundant_closure)]
|
||||||
@ -262,7 +265,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -296,7 +298,7 @@ fn fake_outer_boolean_serialize_validation(
|
|||||||
}
|
}
|
||||||
/// FakeOuterBooleanSerialize - POST /v2/fake/outer/boolean
|
/// FakeOuterBooleanSerialize - POST /v2/fake/outer/boolean
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn fake_outer_boolean_serialize<I, A, E>(
|
async fn fake_outer_boolean_serialize<I, A, E, C>(
|
||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
@ -305,7 +307,7 @@ async fn fake_outer_boolean_serialize<I, A, E>(
|
|||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::fake::Fake<E> + Send + Sync,
|
A: apis::fake::Fake<E, Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
#[allow(clippy::redundant_closure)]
|
#[allow(clippy::redundant_closure)]
|
||||||
@ -357,7 +359,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -391,7 +392,7 @@ fn fake_outer_composite_serialize_validation(
|
|||||||
}
|
}
|
||||||
/// FakeOuterCompositeSerialize - POST /v2/fake/outer/composite
|
/// FakeOuterCompositeSerialize - POST /v2/fake/outer/composite
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn fake_outer_composite_serialize<I, A, E>(
|
async fn fake_outer_composite_serialize<I, A, E, C>(
|
||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
@ -400,7 +401,7 @@ async fn fake_outer_composite_serialize<I, A, E>(
|
|||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::fake::Fake<E> + Send + Sync,
|
A: apis::fake::Fake<E, Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
#[allow(clippy::redundant_closure)]
|
#[allow(clippy::redundant_closure)]
|
||||||
@ -452,7 +453,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -486,7 +486,7 @@ fn fake_outer_number_serialize_validation(
|
|||||||
}
|
}
|
||||||
/// FakeOuterNumberSerialize - POST /v2/fake/outer/number
|
/// FakeOuterNumberSerialize - POST /v2/fake/outer/number
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn fake_outer_number_serialize<I, A, E>(
|
async fn fake_outer_number_serialize<I, A, E, C>(
|
||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
@ -495,7 +495,7 @@ async fn fake_outer_number_serialize<I, A, E>(
|
|||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::fake::Fake<E> + Send + Sync,
|
A: apis::fake::Fake<E, Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
#[allow(clippy::redundant_closure)]
|
#[allow(clippy::redundant_closure)]
|
||||||
@ -547,7 +547,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -581,7 +580,7 @@ fn fake_outer_string_serialize_validation(
|
|||||||
}
|
}
|
||||||
/// FakeOuterStringSerialize - POST /v2/fake/outer/string
|
/// FakeOuterStringSerialize - POST /v2/fake/outer/string
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn fake_outer_string_serialize<I, A, E>(
|
async fn fake_outer_string_serialize<I, A, E, C>(
|
||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
@ -590,7 +589,7 @@ async fn fake_outer_string_serialize<I, A, E>(
|
|||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::fake::Fake<E> + Send + Sync,
|
A: apis::fake::Fake<E, Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
#[allow(clippy::redundant_closure)]
|
#[allow(clippy::redundant_closure)]
|
||||||
@ -642,7 +641,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -663,7 +661,7 @@ fn fake_response_with_numerical_description_validation() -> std::result::Result<
|
|||||||
}
|
}
|
||||||
/// FakeResponseWithNumericalDescription - GET /v2/fake/response-with-numerical-description
|
/// FakeResponseWithNumericalDescription - GET /v2/fake/response-with-numerical-description
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn fake_response_with_numerical_description<I, A, E>(
|
async fn fake_response_with_numerical_description<I, A, E, C>(
|
||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
@ -671,7 +669,7 @@ async fn fake_response_with_numerical_description<I, A, E>(
|
|||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::fake::Fake<E> + Send + Sync,
|
A: apis::fake::Fake<E, Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
#[allow(clippy::redundant_closure)]
|
#[allow(clippy::redundant_closure)]
|
||||||
@ -704,7 +702,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -728,7 +725,7 @@ fn hyphen_param_validation(
|
|||||||
}
|
}
|
||||||
/// HyphenParam - GET /v2/fake/hyphenParam/{hyphen-param}
|
/// HyphenParam - GET /v2/fake/hyphenParam/{hyphen-param}
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn hyphen_param<I, A, E>(
|
async fn hyphen_param<I, A, E, C>(
|
||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
@ -737,7 +734,7 @@ async fn hyphen_param<I, A, E>(
|
|||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::fake::Fake<E> + Send + Sync,
|
A: apis::fake::Fake<E, Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
#[allow(clippy::redundant_closure)]
|
#[allow(clippy::redundant_closure)]
|
||||||
@ -769,7 +766,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -804,7 +800,7 @@ fn test_body_with_query_params_validation(
|
|||||||
}
|
}
|
||||||
/// TestBodyWithQueryParams - PUT /v2/fake/body-with-query-params
|
/// TestBodyWithQueryParams - PUT /v2/fake/body-with-query-params
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn test_body_with_query_params<I, A, E>(
|
async fn test_body_with_query_params<I, A, E, C>(
|
||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
@ -814,7 +810,7 @@ async fn test_body_with_query_params<I, A, E>(
|
|||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::fake::Fake<E> + Send + Sync,
|
A: apis::fake::Fake<E, Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
#[allow(clippy::redundant_closure)]
|
#[allow(clippy::redundant_closure)]
|
||||||
@ -848,7 +844,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -880,7 +875,7 @@ fn test_client_model_validation(
|
|||||||
}
|
}
|
||||||
/// TestClientModel - PATCH /v2/fake
|
/// TestClientModel - PATCH /v2/fake
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn test_client_model<I, A, E>(
|
async fn test_client_model<I, A, E, C>(
|
||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
@ -889,7 +884,7 @@ async fn test_client_model<I, A, E>(
|
|||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::fake::Fake<E> + Send + Sync,
|
A: apis::fake::Fake<E, Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
#[allow(clippy::redundant_closure)]
|
#[allow(clippy::redundant_closure)]
|
||||||
@ -940,7 +935,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -972,18 +966,32 @@ fn test_endpoint_parameters_validation(
|
|||||||
}
|
}
|
||||||
/// TestEndpointParameters - POST /v2/fake
|
/// TestEndpointParameters - POST /v2/fake
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn test_endpoint_parameters<I, A, E>(
|
async fn test_endpoint_parameters<I, A, E, C>(
|
||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
|
headers: HeaderMap,
|
||||||
State(api_impl): State<I>,
|
State(api_impl): State<I>,
|
||||||
Form(body): Form<models::TestEndpointParametersRequest>,
|
Form(body): Form<models::TestEndpointParametersRequest>,
|
||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::fake::Fake<E> + Send + Sync,
|
A: apis::fake::Fake<E, Claims = C> + apis::ApiAuthBasic<Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
|
// Authentication
|
||||||
|
let claims_in_auth_header = api_impl
|
||||||
|
.as_ref()
|
||||||
|
.extract_claims_from_auth_header(apis::BasicAuthKind::Basic, &headers, "authorization")
|
||||||
|
.await;
|
||||||
|
let claims = None.or(claims_in_auth_header);
|
||||||
|
let Some(claims) = claims else {
|
||||||
|
return Response::builder()
|
||||||
|
.status(StatusCode::UNAUTHORIZED)
|
||||||
|
.body(Body::empty())
|
||||||
|
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR);
|
||||||
|
};
|
||||||
|
|
||||||
#[allow(clippy::redundant_closure)]
|
#[allow(clippy::redundant_closure)]
|
||||||
let validation = tokio::task::spawn_blocking(move || test_endpoint_parameters_validation(body))
|
let validation = tokio::task::spawn_blocking(move || test_endpoint_parameters_validation(body))
|
||||||
.await
|
.await
|
||||||
@ -998,7 +1006,7 @@ where
|
|||||||
|
|
||||||
let result = api_impl
|
let result = api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.test_endpoint_parameters(&method, &host, &cookies, &body)
|
.test_endpoint_parameters(&method, &host, &cookies, &claims, &body)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut response = Response::builder();
|
let mut response = Response::builder();
|
||||||
@ -1017,7 +1025,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1062,7 +1069,7 @@ fn test_enum_parameters_validation(
|
|||||||
}
|
}
|
||||||
/// TestEnumParameters - GET /v2/fake
|
/// TestEnumParameters - GET /v2/fake
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn test_enum_parameters<I, A, E>(
|
async fn test_enum_parameters<I, A, E, C>(
|
||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
@ -1073,7 +1080,7 @@ async fn test_enum_parameters<I, A, E>(
|
|||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::fake::Fake<E> + Send + Sync,
|
A: apis::fake::Fake<E, Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
// Header parameters
|
// Header parameters
|
||||||
@ -1168,7 +1175,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1199,7 +1205,7 @@ fn test_inline_additional_properties_validation(
|
|||||||
}
|
}
|
||||||
/// TestInlineAdditionalProperties - POST /v2/fake/inline-additionalProperties
|
/// TestInlineAdditionalProperties - POST /v2/fake/inline-additionalProperties
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn test_inline_additional_properties<I, A, E>(
|
async fn test_inline_additional_properties<I, A, E, C>(
|
||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
@ -1208,7 +1214,7 @@ async fn test_inline_additional_properties<I, A, E>(
|
|||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::fake::Fake<E> + Send + Sync,
|
A: apis::fake::Fake<E, Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
#[allow(clippy::redundant_closure)]
|
#[allow(clippy::redundant_closure)]
|
||||||
@ -1241,7 +1247,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1273,7 +1278,7 @@ fn test_json_form_data_validation(
|
|||||||
}
|
}
|
||||||
/// TestJsonFormData - GET /v2/fake/jsonFormData
|
/// TestJsonFormData - GET /v2/fake/jsonFormData
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn test_json_form_data<I, A, E>(
|
async fn test_json_form_data<I, A, E, C>(
|
||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
@ -1282,7 +1287,7 @@ async fn test_json_form_data<I, A, E>(
|
|||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::fake::Fake<E> + Send + Sync,
|
A: apis::fake::Fake<E, Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
#[allow(clippy::redundant_closure)]
|
#[allow(clippy::redundant_closure)]
|
||||||
@ -1314,7 +1319,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1408,7 +1412,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1479,7 +1482,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1576,7 +1578,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1658,7 +1659,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1740,7 +1740,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1839,7 +1838,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1920,7 +1918,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2005,7 +2002,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2090,7 +2086,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2159,7 +2154,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2252,7 +2246,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2337,7 +2330,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2426,7 +2418,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2499,7 +2490,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2573,7 +2563,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2647,7 +2636,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2716,7 +2704,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2801,7 +2788,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2919,7 +2905,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -2979,7 +2964,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -3059,7 +3043,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
|
@ -7,7 +7,7 @@ pub mod user;
|
|||||||
pub trait ApiKeyAuthHeader {
|
pub trait ApiKeyAuthHeader {
|
||||||
type Claims;
|
type Claims;
|
||||||
|
|
||||||
/// Extracting Claims from Header. Return None if the Claims is invalid.
|
/// Extracting Claims from Header. Return None if the Claims are invalid.
|
||||||
async fn extract_claims_from_header(
|
async fn extract_claims_from_header(
|
||||||
&self,
|
&self,
|
||||||
headers: &axum::http::header::HeaderMap,
|
headers: &axum::http::header::HeaderMap,
|
||||||
|
@ -146,7 +146,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -243,7 +242,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -325,7 +323,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -407,7 +404,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -506,7 +502,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -603,7 +598,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -688,7 +682,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -773,7 +766,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -842,7 +834,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -935,7 +926,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1020,7 +1010,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1109,7 +1098,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1196,7 +1184,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1284,7 +1271,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1372,7 +1358,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1455,7 +1440,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1540,7 +1524,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1674,7 +1657,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1748,7 +1730,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -1842,7 +1823,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
|
@ -19,11 +19,14 @@ pub enum PingGetResponse {
|
|||||||
#[async_trait]
|
#[async_trait]
|
||||||
#[allow(clippy::ptr_arg)]
|
#[allow(clippy::ptr_arg)]
|
||||||
pub trait Default<E: std::fmt::Debug + Send + Sync + 'static = ()>: super::ErrorHandler<E> {
|
pub trait Default<E: std::fmt::Debug + Send + Sync + 'static = ()>: super::ErrorHandler<E> {
|
||||||
|
type Claims;
|
||||||
|
|
||||||
/// PingGet - GET /ping
|
/// PingGet - GET /ping
|
||||||
async fn ping_get(
|
async fn ping_get(
|
||||||
&self,
|
&self,
|
||||||
method: &Method,
|
method: &Method,
|
||||||
host: &Host,
|
host: &Host,
|
||||||
cookies: &CookieJar,
|
cookies: &CookieJar,
|
||||||
|
claims: &Self::Claims,
|
||||||
) -> Result<PingGetResponse, E>;
|
) -> Result<PingGetResponse, E>;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,27 @@
|
|||||||
pub mod default;
|
pub mod default;
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub enum BasicAuthKind {
|
||||||
|
Basic,
|
||||||
|
Bearer,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// API Key Authentication - Authentication Header.
|
||||||
|
/// For `Basic token` and `Bearer token`
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
pub trait ApiAuthBasic {
|
||||||
|
type Claims;
|
||||||
|
|
||||||
|
/// Extracting Claims from Header. Return None if the Claims are invalid.
|
||||||
|
async fn extract_claims_from_auth_header(
|
||||||
|
&self,
|
||||||
|
kind: BasicAuthKind,
|
||||||
|
headers: &axum::http::header::HeaderMap,
|
||||||
|
key: &str,
|
||||||
|
) -> Option<Self::Claims>;
|
||||||
|
}
|
||||||
|
|
||||||
// Error handler for unhandled errors.
|
// Error handler for unhandled errors.
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
pub trait ErrorHandler<E: std::fmt::Debug + Send + Sync + 'static = ()> {
|
pub trait ErrorHandler<E: std::fmt::Debug + Send + Sync + 'static = ()> {
|
||||||
|
@ -13,15 +13,20 @@ use crate::{header, types::*};
|
|||||||
use crate::{apis, models};
|
use crate::{apis, models};
|
||||||
|
|
||||||
/// Setup API Server.
|
/// Setup API Server.
|
||||||
pub fn new<I, A, E>(api_impl: I) -> Router
|
pub fn new<I, A, E, C>(api_impl: I) -> Router
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Clone + Send + Sync + 'static,
|
I: AsRef<A> + Clone + Send + Sync + 'static,
|
||||||
A: apis::default::Default<E> + Send + Sync + 'static,
|
A: apis::default::Default<E, Claims = C>
|
||||||
|
+ apis::ApiAuthBasic<Claims = C>
|
||||||
|
+ Send
|
||||||
|
+ Sync
|
||||||
|
+ 'static,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
|
C: Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
// build our application with a route
|
// build our application with a route
|
||||||
Router::new()
|
Router::new()
|
||||||
.route("/ping", get(ping_get::<I, A, E>))
|
.route("/ping", get(ping_get::<I, A, E, C>))
|
||||||
.with_state(api_impl)
|
.with_state(api_impl)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,17 +36,31 @@ fn ping_get_validation() -> std::result::Result<(), ValidationErrors> {
|
|||||||
}
|
}
|
||||||
/// PingGet - GET /ping
|
/// PingGet - GET /ping
|
||||||
#[tracing::instrument(skip_all)]
|
#[tracing::instrument(skip_all)]
|
||||||
async fn ping_get<I, A, E>(
|
async fn ping_get<I, A, E, C>(
|
||||||
method: Method,
|
method: Method,
|
||||||
host: Host,
|
host: Host,
|
||||||
cookies: CookieJar,
|
cookies: CookieJar,
|
||||||
|
headers: HeaderMap,
|
||||||
State(api_impl): State<I>,
|
State(api_impl): State<I>,
|
||||||
) -> Result<Response, StatusCode>
|
) -> Result<Response, StatusCode>
|
||||||
where
|
where
|
||||||
I: AsRef<A> + Send + Sync,
|
I: AsRef<A> + Send + Sync,
|
||||||
A: apis::default::Default<E> + Send + Sync,
|
A: apis::default::Default<E, Claims = C> + apis::ApiAuthBasic<Claims = C> + Send + Sync,
|
||||||
E: std::fmt::Debug + Send + Sync + 'static,
|
E: std::fmt::Debug + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
|
// Authentication
|
||||||
|
let claims_in_auth_header = api_impl
|
||||||
|
.as_ref()
|
||||||
|
.extract_claims_from_auth_header(apis::BasicAuthKind::Bearer, &headers, "authorization")
|
||||||
|
.await;
|
||||||
|
let claims = None.or(claims_in_auth_header);
|
||||||
|
let Some(claims) = claims else {
|
||||||
|
return Response::builder()
|
||||||
|
.status(StatusCode::UNAUTHORIZED)
|
||||||
|
.body(Body::empty())
|
||||||
|
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR);
|
||||||
|
};
|
||||||
|
|
||||||
#[allow(clippy::redundant_closure)]
|
#[allow(clippy::redundant_closure)]
|
||||||
let validation = tokio::task::spawn_blocking(move || ping_get_validation())
|
let validation = tokio::task::spawn_blocking(move || ping_get_validation())
|
||||||
.await
|
.await
|
||||||
@ -54,7 +73,10 @@ where
|
|||||||
.map_err(|_| StatusCode::BAD_REQUEST);
|
.map_err(|_| StatusCode::BAD_REQUEST);
|
||||||
};
|
};
|
||||||
|
|
||||||
let result = api_impl.as_ref().ping_get(&method, &host, &cookies).await;
|
let result = api_impl
|
||||||
|
.as_ref()
|
||||||
|
.ping_get(&method, &host, &cookies, &claims)
|
||||||
|
.await;
|
||||||
|
|
||||||
let mut response = Response::builder();
|
let mut response = Response::builder();
|
||||||
|
|
||||||
@ -68,7 +90,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
|
@ -128,7 +128,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
|
@ -100,7 +100,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
|
@ -97,7 +97,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -154,7 +153,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -227,7 +225,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -306,7 +303,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -378,7 +374,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -457,7 +452,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -524,7 +518,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -603,7 +596,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
@ -675,7 +667,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
|
@ -56,7 +56,6 @@ where
|
|||||||
Err(why) => {
|
Err(why) => {
|
||||||
// Application code returned an error. This should not happen, as the implementation should
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
// return a valid response.
|
// return a valid response.
|
||||||
|
|
||||||
return api_impl
|
return api_impl
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.handle_error(&method, &host, &cookies, why)
|
.handle_error(&method, &host, &cookies, why)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user