summaryrefslogtreecommitdiff
path: root/src/api/image.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/image.rs')
-rw-r--r--src/api/image.rs54
1 files changed, 54 insertions, 0 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))
+}