tetratto/crates/app/src/routes/api/v1/mod.rs

418 lines
12 KiB
Rust
Raw Normal View History

pub mod auth;
pub mod communities;
pub mod notifications;
2025-03-24 22:42:33 -04:00
pub mod reactions;
pub mod reports;
2025-04-12 22:25:54 -04:00
pub mod requests;
pub mod util;
use axum::{
Router,
routing::{delete, get, post},
};
use serde::Deserialize;
2025-03-24 22:42:33 -04:00
use tetratto_core::model::{
communities::{
CommunityContext, CommunityJoinAccess, CommunityReadAccess, CommunityWriteAccess,
PostContext,
},
communities_permissions::CommunityPermission,
permissions::FinePermission,
2025-03-24 22:42:33 -04:00
reactions::AssetType,
2025-03-24 20:23:52 -04:00
};
pub fn routes() -> Router {
Router::new()
// misc
.route("/util/proxy", get(util::proxy_request))
.route("/util/lang", get(util::set_langfile_request))
2025-04-19 19:09:24 -04:00
.route("/util/ip", get(util::ip_test_request))
2025-03-24 22:42:33 -04:00
// reactions
.route("/reactions", post(reactions::create_request))
.route("/reactions/{id}", get(reactions::get_request))
.route("/reactions/{id}", delete(reactions::delete_request))
// communities
.route(
"/communities/find/{id}",
get(communities::communities::redirect_from_id),
)
.route(
"/communities",
post(communities::communities::create_request),
)
.route(
"/communities/{id}",
delete(communities::communities::delete_request),
)
.route(
"/communities/{id}/title",
post(communities::communities::update_title_request),
)
.route(
"/communities/{id}/context",
post(communities::communities::update_context_request),
)
.route(
"/communities/{id}/access/read",
post(communities::communities::update_read_access_request),
)
.route(
"/communities/{id}/access/write",
post(communities::communities::update_write_access_request),
)
.route(
"/communities/{id}/access/join",
post(communities::communities::update_join_access_request),
)
.route(
"/communities/{id}/transfer_ownership",
post(communities::communities::update_owner_request),
)
.route(
"/communities/{id}/upload/avatar",
post(communities::images::upload_avatar_request),
)
.route(
"/communities/{id}/upload/banner",
post(communities::images::upload_banner_request),
)
.route(
"/communities/{id}/avatar",
get(communities::images::avatar_request),
)
.route(
"/communities/{id}/banner",
get(communities::images::banner_request),
)
// posts
.route("/posts", post(communities::posts::create_request))
.route("/posts/{id}", delete(communities::posts::delete_request))
2025-04-10 18:16:52 -04:00
.route(
"/posts/{id}/repost",
post(communities::posts::create_repost_request),
)
.route(
"/posts/{id}/content",
post(communities::posts::update_content_request),
)
2025-03-24 20:23:52 -04:00
.route(
"/posts/{id}/context",
post(communities::posts::update_context_request),
2025-03-24 20:23:52 -04:00
)
2025-04-12 22:25:54 -04:00
// questions
.route("/questions", post(communities::questions::create_request))
.route(
"/questions/{id}",
delete(communities::questions::delete_request),
)
2025-04-19 18:59:55 -04:00
.route(
"/questions/{id}/block_ip",
post(communities::questions::ip_block_request),
)
2025-03-23 16:37:43 -04:00
// auth
// global
.route("/auth/register", post(auth::register_request))
.route("/auth/login", post(auth::login_request))
2025-03-23 16:37:43 -04:00
.route("/auth/logout", post(auth::logout_request))
2025-04-03 22:36:58 -04:00
.route("/auth/token", get(auth::set_token_request))
.route(
"/auth/upload/avatar",
post(auth::images::upload_avatar_request),
)
.route(
"/auth/upload/banner",
post(auth::images::upload_banner_request),
)
// profile
.route("/auth/user/me", get(auth::profile::me_request))
2025-04-04 21:42:08 -04:00
.route("/auth/user/{id}/avatar", get(auth::images::avatar_request))
.route("/auth/user/{id}/banner", get(auth::images::banner_request))
.route("/auth/user/{id}/follow", post(auth::social::follow_request))
.route(
"/auth/user/{id}/follow/cancel",
post(auth::social::cancel_follow_request),
)
.route(
"/auth/user/{id}/follow/accept",
post(auth::social::accept_follow_request),
)
2025-04-04 21:42:08 -04:00
.route("/auth/user/{id}/block", post(auth::social::block_request))
.route(
2025-04-04 21:42:08 -04:00
"/auth/user/{id}/settings",
post(auth::profile::update_user_settings_request),
)
.route(
2025-04-04 21:42:08 -04:00
"/auth/user/{id}/role",
post(auth::profile::update_user_role_request),
)
.route(
2025-04-04 21:42:08 -04:00
"/auth/user/{id}",
delete(auth::profile::delete_user_request),
)
2025-03-31 11:45:34 -04:00
.route(
2025-04-04 21:42:08 -04:00
"/auth/user/{id}/password",
post(auth::profile::update_user_password_request),
2025-03-31 11:45:34 -04:00
)
.route(
2025-04-04 21:42:08 -04:00
"/auth/user/{id}/username",
post(auth::profile::update_user_username_request),
2025-03-31 11:45:34 -04:00
)
.route(
2025-04-04 21:42:08 -04:00
"/auth/user/{id}/tokens",
post(auth::profile::update_user_tokens_request),
)
.route(
2025-04-04 21:42:08 -04:00
"/auth/user/{id}/verified",
post(auth::profile::update_user_is_verified_request),
)
.route(
2025-04-04 21:42:08 -04:00
"/auth/user/{id}/totp",
post(auth::profile::enable_totp_request),
)
.route(
"/auth/user/{id}/totp",
delete(auth::profile::disable_totp_request),
)
.route(
"/auth/user/{id}/totp/codes",
post(auth::profile::refresh_totp_codes_request),
)
.route(
"/auth/user/{username}/totp/check",
get(auth::profile::has_totp_enabled_request),
)
2025-04-04 21:42:08 -04:00
.route("/auth/user/me/seen", post(auth::profile::seen_request))
.route("/auth/user/find/{id}", get(auth::profile::redirect_from_id))
.route(
2025-04-04 21:42:08 -04:00
"/auth/user/find_by_ip/{ip}",
get(auth::profile::redirect_from_ip),
)
2025-04-19 18:59:55 -04:00
.route("/auth/ip/{ip}/block", post(auth::social::ip_block_request))
2025-04-11 22:12:43 -04:00
// warnings
.route("/warnings/{id}", post(auth::user_warnings::create_request))
.route(
"/warnings/{id}",
delete(auth::user_warnings::delete_request),
)
// notifications
.route(
"/notifications/my",
delete(notifications::delete_all_request),
)
.route("/notifications/{id}", delete(notifications::delete_request))
.route(
2025-03-30 22:26:20 -04:00
"/notifications/{id}/read_status",
post(notifications::update_read_status_request),
)
// community memberships
.route(
"/communities/{id}/join",
post(communities::communities::create_membership),
)
.route(
"/communities/{cid}/memberships/{uid}",
get(communities::communities::get_membership),
)
.route(
"/communities/{cid}/memberships/{uid}",
delete(communities::communities::delete_membership),
)
.route(
"/communities/{cid}/memberships/{uid}/role",
post(communities::communities::update_membership_role),
)
// ipbans
.route("/bans/{ip}", post(auth::ipbans::create_request))
.route("/bans/id/{id}", delete(auth::ipbans::delete_request))
// reports
.route("/reports", post(reports::create_request))
.route("/reports/{id}", delete(reports::delete_request))
2025-04-12 22:25:54 -04:00
// requests
.route(
"/requests/{id}/{linked_asset}",
delete(requests::delete_request),
)
.route("/requests/my", delete(requests::delete_all_request))
// connections
.route(
"/auth/user/connections/_data",
post(auth::connections::update_info_data_request),
)
.route(
"/auth/user/connections/_state",
post(auth::connections::update_state_request),
)
.route(
"/auth/user/connections/_shown",
post(auth::connections::update_shown_on_profile_request),
)
.route(
"/auth/user/connections/{connection}",
delete(auth::connections::delete_request),
)
.route(
"/auth/user/connections/spotify",
post(auth::connections::spotify::create_request),
)
2025-04-26 19:23:30 -04:00
.route(
"/auth/user/connections/last_fm",
post(auth::connections::last_fm::create_request),
)
.route(
"/auth/user/connections/last_fm/api_proxy",
post(auth::connections::last_fm::proxy_request),
)
}
#[derive(Deserialize)]
pub struct LoginProps {
pub username: String,
pub password: String,
2025-04-04 21:42:08 -04:00
#[serde(default)]
pub totp: String,
}
#[derive(Deserialize)]
pub struct RegisterProps {
pub username: String,
pub password: String,
pub policy_consent: bool,
pub captcha_response: String,
}
#[derive(Deserialize)]
pub struct CreateCommunity {
pub title: String,
}
#[derive(Deserialize)]
pub struct UpdateCommunityTitle {
pub title: String,
}
#[derive(Deserialize)]
pub struct UpdateCommunityContext {
pub context: CommunityContext,
}
#[derive(Deserialize)]
pub struct UpdateCommunityReadAccess {
pub access: CommunityReadAccess,
}
#[derive(Deserialize)]
pub struct UpdateCommunityWriteAccess {
pub access: CommunityWriteAccess,
}
#[derive(Deserialize)]
pub struct UpdateCommunityJoinAccess {
pub access: CommunityJoinAccess,
}
#[derive(Deserialize)]
pub struct CreatePost {
pub content: String,
pub community: String,
#[serde(default)]
pub replying_to: Option<String>,
2025-04-12 22:25:54 -04:00
#[serde(default)]
pub answering: String,
}
2025-04-10 18:16:52 -04:00
#[derive(Deserialize)]
pub struct CreateRepost {
pub content: String,
pub community: String,
}
#[derive(Deserialize)]
pub struct UpdatePostContent {
pub content: String,
}
2025-03-24 20:23:52 -04:00
#[derive(Deserialize)]
pub struct UpdatePostContext {
pub context: PostContext,
2025-03-24 20:23:52 -04:00
}
2025-03-24 22:42:33 -04:00
#[derive(Deserialize)]
pub struct CreateReaction {
pub asset: String,
2025-03-24 22:42:33 -04:00
pub asset_type: AssetType,
2025-03-24 22:49:15 -04:00
pub is_like: bool,
2025-03-24 22:42:33 -04:00
}
#[derive(Deserialize)]
pub struct CreateReport {
pub content: String,
pub asset: String,
pub asset_type: AssetType,
}
2025-03-31 11:45:34 -04:00
#[derive(Deserialize)]
pub struct UpdateUserPassword {
pub from: String,
pub to: String,
}
#[derive(Deserialize)]
pub struct UpdateUserUsername {
pub to: String,
}
#[derive(Deserialize)]
pub struct UpdateUserIsVerified {
pub is_verified: bool,
}
#[derive(Deserialize)]
pub struct UpdateNotificationRead {
pub read: bool,
}
#[derive(Deserialize)]
pub struct UpdateMembershipRole {
pub role: CommunityPermission,
}
#[derive(Deserialize)]
pub struct UpdateCommunityOwner {
pub user: String,
}
#[derive(Deserialize)]
pub struct UpdateUserRole {
pub role: FinePermission,
}
#[derive(Deserialize)]
pub struct DeleteUser {
pub password: String,
}
#[derive(Deserialize)]
pub struct CreateIpBan {
pub reason: String,
}
2025-04-04 21:42:08 -04:00
#[derive(Deserialize)]
pub struct DisableTotp {
pub totp: String,
}
2025-04-11 22:12:43 -04:00
#[derive(Deserialize)]
pub struct CreateUserWarning {
pub content: String,
}
2025-04-12 22:25:54 -04:00
#[derive(Deserialize)]
pub struct CreateQuestion {
pub content: String,
pub is_global: bool,
#[serde(default)]
pub receiver: String,
#[serde(default)]
pub community: String,
}