diff options
author | Tyler Murphy <tylermurphy534@gmail.com> | 2023-01-31 22:21:19 -0500 |
---|---|---|
committer | Tyler Murphy <tylermurphy534@gmail.com> | 2023-01-31 22:21:19 -0500 |
commit | d9125314809e7f03cb155f91d535e94da583a365 (patch) | |
tree | f34bc2e978d5e79f0dc62aa7a5faa8f096b46dc5 /src/api | |
parent | fix admin (diff) | |
download | xssbook-d9125314809e7f03cb155f91d535e94da583a365.tar.gz xssbook-d9125314809e7f03cb155f91d535e94da583a365.tar.bz2 xssbook-d9125314809e7f03cb155f91d535e94da583a365.zip |
custosm avatars and banners
Diffstat (limited to 'src/api')
-rw-r--r-- | src/api/image.rs | 54 | ||||
-rw-r--r-- | src/api/mod.rs | 1 | ||||
-rw-r--r-- | src/api/users.rs | 28 |
3 files changed, 81 insertions, 2 deletions
diff --git a/src/api/image.rs b/src/api/image.rs new file mode 100644 index 0000000..84eccc7 --- /dev/null +++ b/src/api/image.rs @@ -0,0 +1,54 @@ +use axum::{extract::Query, response::Response, routing::get, Router, http::StatusCode}; +use serde::Deserialize; + +use crate::types::http::ResponseCode; + + + +#[derive(Deserialize)] +struct AvatarRequest { + user_id: u64, +} + +async fn avatar(params: Option<Query<AvatarRequest>>) -> Response { + + let Some(params) = params else { + return ResponseCode::BadRequest.text("Missing query paramaters"); + }; + + let custom = format!("/image/custom/avatar/{}.png", params.user_id); + let default = format!("/image/default/{}.png", params.user_id % 25); + + let file = ResponseCode::Success.file(&custom).await; + if file.status() != StatusCode::OK { + return ResponseCode::Success.file(&default).await + } + file +} + +#[derive(Deserialize)] +struct BannerRequest { + user_id: u64, +} + +async fn banner(params: Option<Query<BannerRequest>>) -> Response { + + let Some(params) = params else { + return ResponseCode::BadRequest.text("Missing query paramaters"); + }; + + let custom = format!("/image/custom/banner/{}.png", params.user_id); + + let file = ResponseCode::Success.file(&custom).await; + if file.status() != StatusCode::OK { + return ResponseCode::NotFound.text("User does not have a custom banner") + } + file +} + + +pub fn router() -> Router { + Router::new() + .route("/avatar", get(avatar)) + .route("/banner", get(banner)) +} diff --git a/src/api/mod.rs b/src/api/mod.rs index d36b127..adc19d7 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -8,6 +8,7 @@ pub mod auth; pub mod pages; pub mod posts; pub mod users; +pub mod image; pub fn router() -> Router { let governor_conf = Box::new( diff --git a/src/api/users.rs b/src/api/users.rs index afcdddd..83a0d4e 100644 --- a/src/api/users.rs +++ b/src/api/users.rs @@ -1,9 +1,9 @@ use crate::types::{ - extract::{AuthorizedUser, Check, CheckResult, Json}, + extract::{AuthorizedUser, Check, CheckResult, Json, Png}, http::ResponseCode, user::User, }; -use axum::{response::Response, routing::post, Router}; +use axum::{response::Response, routing::{post, put}, Router}; use serde::Deserialize; #[derive(Deserialize)] @@ -63,9 +63,33 @@ async fn load_self(AuthorizedUser(user): AuthorizedUser) -> Response { ResponseCode::Success.json(&json) } +async fn avatar(AuthorizedUser(user): AuthorizedUser, Png(img): Png) -> Response { + + let path = format!("./public/image/custom/avatar/{}.png", user.user_id); + + if img.save(path).is_err() { + return ResponseCode::InternalServerError.text("Failed to update avatar"); + } + + ResponseCode::Success.text("Successfully updated avatar") +} + +async fn banner(AuthorizedUser(user): AuthorizedUser, Png(img): Png) -> Response { + + let path = format!("./public/image/custom/banner/{}.png", user.user_id); + + if img.save(path).is_err() { + return ResponseCode::InternalServerError.text("Failed to update banner"); + } + + ResponseCode::Success.text("Successfully updated banner") +} + pub fn router() -> Router { Router::new() .route("/load", post(load_batch)) .route("/self", post(load_self)) .route("/page", post(load_page)) + .route("/avatar", put(avatar)) + .route("/banner", put(banner)) } |