diff options
Diffstat (limited to 'src/types/extract.rs')
-rw-r--r-- | src/types/extract.rs | 63 |
1 files changed, 30 insertions, 33 deletions
diff --git a/src/types/extract.rs b/src/types/extract.rs index 4d7ac51..1258ef9 100644 --- a/src/types/extract.rs +++ b/src/types/extract.rs @@ -1,20 +1,24 @@ -use std::{io::{Read, Cursor}, net::{IpAddr, SocketAddr}}; +use std::{ + io::{Cursor, Read}, + net::{IpAddr, SocketAddr}, +}; use axum::{ async_trait, body::HttpBody, - extract::{FromRequest, FromRequestParts, ConnectInfo}, + extract::{ConnectInfo, FromRequest, FromRequestParts}, http::{request::Parts, Request}, response::Response, BoxError, RequestExt, }; use bytes::Bytes; -use image::{io::Reader, ImageFormat, DynamicImage}; +use image::{io::Reader, DynamicImage, ImageFormat}; use serde::de::DeserializeOwned; use tower_cookies::Cookies; use crate::{ - admin, console, + public::admin, + public::console, types::{ http::{ResponseCode, Result}, session::Session, @@ -32,41 +36,43 @@ where type Rejection = Response; async fn from_request_parts(parts: &mut Parts, _state: &S) -> Result<Self> { - let headers = &parts.headers; - let forwardedfor = headers.get("x-forwarded-for") - .and_then(|h| h.to_str().ok()) - .and_then(|h| - h.split(',') - .rev() - .find_map(|s| s.trim().parse::<IpAddr>().ok()) - ); + let forwardedfor = headers + .get("x-forwarded-for") + .and_then(|h| h.to_str().ok()) + .and_then(|h| { + h.split(',') + .rev() + .find_map(|s| s.trim().parse::<IpAddr>().ok()) + }); if let Some(forwardedfor) = forwardedfor { - return Ok(RequestIp(forwardedfor)) + return Ok(RequestIp(forwardedfor)); } - let realip = headers.get("x-real-ip") - .and_then(|hv| hv.to_str().ok()) - .and_then(|s| s.parse::<IpAddr>().ok()); + let realip = headers + .get("x-real-ip") + .and_then(|hv| hv.to_str().ok()) + .and_then(|s| s.parse::<IpAddr>().ok()); if let Some(realip) = realip { - return Ok(RequestIp(realip)) + return Ok(RequestIp(realip)); } - let realip = headers.get("x-real-ip") - .and_then(|hv| hv.to_str().ok()) - .and_then(|s| s.parse::<IpAddr>().ok()); + let realip = headers + .get("x-real-ip") + .and_then(|hv| hv.to_str().ok()) + .and_then(|s| s.parse::<IpAddr>().ok()); if let Some(realip) = realip { - return Ok(RequestIp(realip)) + return Ok(RequestIp(realip)); } let info = parts.extensions.get::<ConnectInfo<SocketAddr>>(); if let Some(info) = info { - return Ok(RequestIp(info.0.ip())) + return Ok(RequestIp(info.0.ip())); } Err(ResponseCode::Forbidden.text("You have no ip")) @@ -163,7 +169,6 @@ where type Rejection = Response; async fn from_request(req: Request<B>, state: &S) -> Result<Self> { - let bytes = match read_body(req, state).await { Ok(body) => body, Err(err) => return Err(err), @@ -171,7 +176,7 @@ where let mut reader = Reader::new(Cursor::new(bytes)); reader.set_format(ImageFormat::Png); - + let Ok(img) = reader.decode() else { return Err(ResponseCode::BadRequest.text("Failed to decode png image")) }; @@ -238,7 +243,6 @@ where B::Error: Into<BoxError>, S: Send + Sync, { - let Ok(RequestIp(ip)) = req.extract_parts::<RequestIp>().await else { tracing::error!("Failed to read client ip"); return Err(ResponseCode::InternalServerError.text("Failed to read client ip")); @@ -255,14 +259,7 @@ where return Err(ResponseCode::BadRequest.text("Request can be at most 512kb")); }; - console::log( - ip, - method, - uri, - Some(path.to_string()), - None, - ) - .await; + console::log(ip, method, uri, Some(path.to_string()), None).await; Ok(bytes.bytes().flatten().collect()) } |