From b6fbeb512405542af0aed11ca123b7ac8ee0b04d Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Mon, 13 Feb 2023 22:41:09 -0500 Subject: fix seo --- src/types/extract.rs | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'src/types') diff --git a/src/types/extract.rs b/src/types/extract.rs index 8292da7..6a01ad2 100644 --- a/src/types/extract.rs +++ b/src/types/extract.rs @@ -7,7 +7,7 @@ use axum::{ async_trait, body::HttpBody, extract::{ConnectInfo, FromRequest, FromRequestParts}, - http::{request::Parts, Request}, + http::{request::Parts, Request, header::USER_AGENT}, response::Response, BoxError, RequestExt, }; @@ -236,6 +236,30 @@ pub trait Check { } } +pub struct UserAgent(pub String); + +#[async_trait] +impl FromRequestParts for UserAgent +where + S: Send + Sync, +{ + type Rejection = Response; + + async fn from_request_parts(parts: &mut Parts, _state: &S) -> Result { + let agent = parts.headers.get(USER_AGENT); + + let Some(agent) = agent else { + return Err(ResponseCode::BadRequest.text("Bad Request")); + }; + + let Ok(agent) = agent.to_str() else { + return Err(ResponseCode::BadRequest.text("Bad Request")); + }; + + Ok(UserAgent(agent.to_string())) + } +} + async fn read_body(mut req: Request, state: &S) -> Result> where B: HttpBody + Sync + Send + 'static, -- cgit v1.2.3-freya