authbeam/api/
mod.rs

1//! Responds to API requests
2use crate::database::Database;
3use crate::model::DatabaseError;
4use axum::routing::put;
5use databeam::prelude::DefaultReturn;
6
7use axum::response::IntoResponse;
8use axum::{
9    routing::{delete, get, post},
10    Json, Router,
11};
12
13pub mod general;
14pub mod ipbans;
15pub mod ipblocks;
16pub mod items;
17pub mod labels;
18pub mod me;
19pub mod notifications;
20pub mod profile;
21pub mod relationships;
22pub mod warnings;
23
24pub async fn not_found() -> impl IntoResponse {
25    Json(DefaultReturn::<u16> {
26        success: false,
27        message: DatabaseError::NotFound.to_string(),
28        payload: 404,
29    })
30}
31
32pub fn routes(database: Database) -> Router {
33    Router::new()
34        // relationships
35        .route(
36            "/relationships/follow/{id}",
37            post(relationships::follow_request),
38        )
39        .route(
40            "/relationships/friend/{id}",
41            post(relationships::friend_request),
42        )
43        .route(
44            "/relationships/block/{id}",
45            post(relationships::block_request),
46        )
47        .route(
48            "/relationships/current/{id}",
49            delete(relationships::delete_request),
50        )
51        // profiles
52        .route(
53            "/profile/{id}/tokens/generate",
54            post(profile::generate_token_request),
55        )
56        .route("/profile/{id}/tokens", post(profile::update_tokens_request))
57        .route("/profile/{id}/tier", post(profile::update_tier_request))
58        .route("/profile/{id}/group", post(profile::update_group_request))
59        .route("/profile/{id}/coins", post(profile::update_coins_request))
60        .route(
61            "/profile/{id}/password",
62            post(profile::update_password_request),
63        )
64        .route(
65            "/profile/{id}/username",
66            post(profile::update_username_request),
67        )
68        .route(
69            "/profile/{id}/metadata",
70            post(profile::update_metdata_request),
71        )
72        .route(
73            "/profile/{id}/metadata",
74            put(profile::patch_metdata_request),
75        )
76        .route("/profile/{id}/badges", post(profile::update_badges_request))
77        .route("/profile/{id}/labels", post(profile::update_labels_request))
78        .route("/profile/{id}/links", post(profile::update_links_request))
79        .route("/profile/{id}/layout", post(profile::update_layout_request))
80        .route("/profile/{id}/totp", post(profile::enable_totp_request))
81        .route("/profile/{id}/totp", delete(profile::disable_totp_request))
82        .route(
83            "/profile/{id}/totp_recovery_codes",
84            post(profile::refresh_totp_recovery_codes_request),
85        )
86        .route("/profile/{id}/banner", get(profile::banner_request))
87        .route("/profile/{id}/avatar", get(profile::avatar_request))
88        .route("/profile/{id}/custom.css", get(profile::css_request))
89        .route("/profile/{id}", delete(profile::delete_request))
90        .route("/profile/{id}", get(profile::get_request))
91        .route("/token/{token}", get(profile::get_from_token_request))
92        // items
93        .route("/items", post(items::create_request))
94        .route("/item/{id}", get(items::get_request))
95        .route("/item/{id}", post(items::update_item_request))
96        .route("/item/{id}/buy", post(items::buy_request))
97        .route("/item/{id}/status", post(items::update_status_request))
98        .route(
99            "/item/{id}/content",
100            post(items::update_item_content_request),
101        )
102        .route("/item/{id}", delete(items::delete_request))
103        // labels
104        .route("/labels", post(labels::create_request))
105        .route("/label/{id}", get(labels::get_request))
106        .route("/label/{id}", delete(labels::delete_request))
107        // notifications
108        .route("/notifications/{id}", delete(notifications::delete_request))
109        .route(
110            "/notifications/clear",
111            delete(notifications::delete_all_request),
112        )
113        // warnings
114        .route("/warnings", post(warnings::create_request))
115        .route("/warnings/{id}", delete(warnings::delete_request))
116        // ipbans
117        .route("/ipbans", post(ipbans::create_request))
118        .route("/ipbans/{id}", delete(ipbans::delete_request))
119        // ipblocks
120        .route("/ipblocks", post(ipblocks::create_request))
121        .route("/ipblocks/{id}", delete(ipblocks::delete_request))
122        // me
123        .route("/me/tokens/generate", post(me::generate_token_request))
124        .route("/me/tokens", post(me::update_tokens_request))
125        .route("/me/delete", post(me::delete_request))
126        .route("/me/upload_avatar", post(me::upload_avatar_request))
127        .route("/me/upload_banner", post(me::upload_banner_request))
128        .route("/me", get(me::get_request))
129        // account
130        .route("/switch", post(general::set_token_request))
131        .route("/register", post(general::create_request))
132        .route("/login", post(general::login_request))
133        .route("/callback", get(general::callback_request))
134        .route("/logout", post(general::logout_request))
135        .route("/untag", post(general::remove_tag))
136        // ...
137        .route("/render_layout", post(profile::render_layout_request))
138        .with_state(database)
139}