Files
nx9-url-shortener/src/web/routes.rs
T
thakares 25577b4b83
Rust CI / Test & Quality Checks (push) Canceled after 0s
Rust CI / Build Docker Image (push) Canceled after 0s
feat: finalize v0.7.0 Docker deployment and image routing
2026-08-12 13:02:44 +05:30

291 lines
11 KiB
Rust

use crate::state::AppState;
use crate::web::{
admin, api, bulk, images, multi_user, pages, password_gate, qr, redirect, system,
};
use axum::{
routing::{delete, get, post, put},
Router,
};
pub fn create_router(state: AppState) -> Router {
Router::new()
// --- Root Landing Page ---
.route("/", get(pages::root_landing))
// --- Public Redirection Routes ---
.route("/:code", get(redirect::resolve_redirect))
.route("/p/:code", get(pages::resolve_page))
.route("/p/:code/*slug", get(pages::resolve_page))
.route(
"/gate/:code",
get(password_gate::gate_get).post(password_gate::gate_post),
)
// --- QR Code Serving ---
.route("/api/qr/:file", get(qr::qr_handler))
// --- System Health & Diagnostics ---
.route("/status", get(system::status_endpoint))
.route("/metrics", get(system::metrics_endpoint))
// --- Public User Login ---
.route(
"/login",
get(admin::public_login_get).post(admin::public_login_post),
)
.route("/logout", get(admin::public_logout))
.route("/user/dashboard", get(admin::user_dashboard_get))
.route("/user/urls", get(admin::user_urls_get))
.route("/user/urls/create", post(admin::user_urls_create))
.route("/user/urls/delete/:id", post(admin::user_urls_delete))
.route("/user/audit", get(admin::user_audit_get))
.route("/user/status", get(admin::user_status_get))
.route("/user/pages", get(admin::user_pages_get))
.route("/user/pages/create", post(admin::user_pages_create))
.route("/user/pages/delete/:id", post(admin::user_pages_delete))
.route("/user/settings", get(admin::user_settings_get))
.route(
"/user/settings/password",
post(admin::user_change_password_post),
)
.route("/user/settings/backup", get(admin::user_download_backup))
.route(
"/user/settings/restore",
post(admin::user_restore_backup_post),
)
.route("/analytics", get(admin::user_analytics_get))
.route(
"/user/analytics/url/:id",
get(admin::user_url_analytics_get),
)
.route(
"/user/analytics/url/:id/export/csv",
get(admin::user_url_analytics_csv_export),
)
.route(
"/user/analytics/url/:id/export/json",
get(admin::user_url_analytics_json_export),
)
.route(
"/user/analytics/page/:id",
get(admin::user_page_analytics_get),
)
.route(
"/user/analytics/page/:id/export/csv",
get(admin::user_page_analytics_csv_export),
)
.route(
"/user/analytics/page/:id/export/json",
get(admin::user_page_analytics_json_export),
)
.route("/api-tokens", get(admin::api_tokens_get))
.route("/api-tokens/create", post(admin::api_tokens_create_post))
.route(
"/api-tokens/revoke/:id",
post(admin::api_tokens_revoke_post),
)
// --- Admin UI Login/Logout ---
.route("/admin", get(admin::admin_index))
.route(
"/admin/login",
get(admin::login_get).post(admin::login_post),
)
.route("/admin/logout", get(admin::logout))
// --- Admin UI Pages ---
.route("/admin/dashboard", get(admin::dashboard_get))
.route("/admin/urls", get(admin::urls_get))
.route("/admin/urls/create", post(admin::urls_create))
.route("/admin/urls/delete/:id", post(admin::urls_delete))
.route("/admin/pages", get(admin::pages_get))
.route("/admin/pages/create", post(admin::pages_create))
.route("/admin/pages/delete/:id", post(admin::pages_delete))
.route("/admin/analytics/url/:id", get(admin::url_analytics_get))
.route("/deploy.sh", get(pages::deploy_script))
.route("/images/*path", get(images::image_handler))
.route(
"/admin/analytics/url/:id/export/csv",
get(admin::url_analytics_csv_export),
)
.route(
"/admin/analytics/url/:id/export/json",
get(admin::url_analytics_json_export),
)
.route("/admin/analytics/page/:id", get(admin::page_analytics_get))
.route(
"/admin/analytics/page/:id/export/csv",
get(admin::page_analytics_csv_export),
)
.route(
"/admin/analytics/page/:id/export/json",
get(admin::page_analytics_json_export),
)
.route("/admin/settings", get(admin::settings_get))
.route("/admin/users", get(admin::users_get))
.route("/admin/users/new", get(admin::users_new_get))
.route("/admin/users/:id", get(admin::user_detail_get))
.route(
"/admin/users/:id/edit",
get(admin::user_edit_get).post(admin::user_edit_post),
)
.route("/admin/users/create", post(admin::users_create_post))
.route(
"/admin/users/status/:id",
post(admin::users_update_status_post),
)
.route("/admin/users/type/:id", post(admin::users_update_type_post))
.route(
"/admin/users/password/:id",
post(admin::users_reset_password_post),
)
.route("/admin/users/delete/:id", post(admin::users_delete_post))
.route(
"/admin/settings/password",
post(admin::change_password_post),
)
.route(
"/admin/settings/retention",
post(admin::change_retention_post),
)
.route("/admin/settings/compact", post(admin::compact_db_post))
.route("/admin/settings/backup", get(admin::download_backup))
.route("/admin/settings/restore", post(admin::restore_backup_post))
.route("/admin/settings/bulk-qr", post(admin::bulk_qr_export_post))
.route(
"/admin/settings/api-keys/create",
post(admin::create_api_key_post),
)
.route(
"/admin/settings/api-keys/revoke/:id",
post(admin::revoke_api_key_post),
)
.route("/admin/audit", get(admin::audit_get))
.route("/admin/status", get(admin::status_get))
.route(
"/admin/moderation",
get(admin::moderation_get).post(admin::moderation_post),
)
.route("/admin/slugs", get(admin::slugs_get))
.route("/admin/slugs/transfer", post(admin::slugs_transfer_post))
.route("/admin/slugs/status", post(admin::slugs_status_post))
.route("/admin/slugs/delete", post(admin::slugs_delete_post))
.route("/admin/sessions", get(admin::sessions_get))
.route(
"/admin/sessions/revoke/:id",
post(admin::sessions_revoke_post),
)
.route(
"/admin/sessions/revoke-all",
post(admin::sessions_revoke_all_post),
)
.route(
"/admin/quotas",
get(admin::quotas_get).post(admin::quotas_post),
)
.route("/admin/health", get(admin::health_get))
.route("/admin/backups", get(admin::backups_get))
.route("/admin/backups/create", post(admin::backups_create_post))
.route(
"/admin/backups/download/:filename",
get(admin::backups_download_get),
)
.route(
"/admin/backups/delete/:filename",
post(admin::backups_delete_post),
)
.route("/admin/backups/restore", post(admin::backups_restore_post))
// --- REST API v1 JSON Endpoints ---
.route(
"/api/v1/urls",
post(api::api_create_url).get(api::api_list_urls),
)
.route(
"/api/v1/urls/:uuid",
get(api::api_get_url)
.put(api::api_update_url)
.delete(api::api_delete_url),
)
.route(
"/api/v1/pages",
post(api::api_create_page).get(api::api_list_pages),
)
.route(
"/api/v1/pages/:uuid",
get(api::api_get_page)
.put(api::api_update_page)
.delete(api::api_delete_page),
)
.route("/api/v1/stats", get(api::api_overall_stats))
.route("/api/v1/stats/url/:uuid", get(api::api_url_stats))
.route("/api/v1/stats/page/:uuid", get(api::api_page_stats))
// --- Feature Expansion REST API Endpoints ---
.route("/api/v1/qr/:code", get(api::api_get_qr_stats))
.route("/api/v1/bulk/qr", post(bulk::api_bulk_qr))
.route("/api/v1/bulk/url", post(bulk::api_bulk_url))
.route("/api/v1/audit", get(api::api_list_audit))
// --- Feature 10 Non-Versioned API Extensions ---
.route("/api/qr", post(api::api_create_qr))
.route("/api/bulk/qr", post(bulk::api_bulk_qr))
.route("/api/bulk/url", post(bulk::api_bulk_url))
.route("/api/stats", get(api::api_overall_stats))
.route("/api/audit", get(api::api_list_audit))
.route(
"/api/v1/urls/:uuid/preview",
post(api::api_set_preview)
.get(api::api_get_preview)
.delete(api::api_delete_preview),
)
.route(
"/api/v1/urls/:uuid/password",
post(api::api_set_password).delete(api::api_remove_password),
)
// --- Multi-User REST API v1 Admin Endpoints ---
.route(
"/api/v1/admin/users",
get(multi_user::admin_list_users).post(multi_user::admin_create_user),
)
.route(
"/api/v1/admin/users/:id/status",
put(multi_user::admin_update_user_status),
)
.route(
"/api/v1/admin/users/:id/quotas",
put(multi_user::admin_update_user_quotas),
)
.route(
"/api/v1/admin/users/:id/password",
post(multi_user::admin_reset_user_password),
)
.route(
"/api/v1/admin/users/:id",
delete(multi_user::admin_delete_user),
)
.route(
"/api/v1/admin/transfers",
post(multi_user::admin_transfer_slug),
)
.route(
"/api/v1/admin/moderation",
post(multi_user::admin_moderate_slug),
)
.route(
"/api/v1/admin/moderation/events",
get(multi_user::admin_list_moderation_events),
)
// --- Multi-User REST API v1 Tenant User Endpoints ---
.route("/api/v1/user/profile", get(multi_user::user_get_profile))
.route(
"/api/v1/user/password",
post(multi_user::user_change_password),
)
.route(
"/api/v1/user/api-tokens",
get(multi_user::user_list_api_tokens).post(multi_user::user_create_api_token),
)
.route(
"/api/v1/user/api-tokens/:id",
delete(multi_user::user_delete_api_token),
)
// --- Static Asset Stub ---
.route(
"/static/style.css",
get(|| async { ([(axum::http::header::CONTENT_TYPE, "text/css")], "") }),
)
.with_state(state)
}