use super::*; use crate::api::comment::*; use crate::api::community::*; use crate::api::post::*; use crate::api::site::*; use crate::api::user::*; #[rustfmt::skip] pub fn config(cfg: &mut web::ServiceConfig) { cfg // Site .route("/api/v1/site", web::get().to(route_get::)) .route("/api/v1/categories", web::get().to(route_get::)) .route("/api/v1/modlog", web::get().to(route_get::)) .route("/api/v1/search", web::get().to(route_get::)) // Community .route("/api/v1/community", web::post().to(route_post::)) .route("/api/v1/community", web::get().to(route_get::)) .route("/api/v1/community", web::put().to(route_post::)) .route("/api/v1/community/list", web::get().to(route_get::)) .route("/api/v1/community/follow", web::post().to(route_post::)) // Post .route("/api/v1/post", web::post().to(route_post::)) .route("/api/v1/post", web::put().to(route_post::)) .route("/api/v1/post", web::get().to(route_get::)) .route("/api/v1/post/list", web::get().to(route_get::)) .route("/api/v1/post/like", web::post().to(route_post::)) .route("/api/v1/post/save", web::put().to(route_post::)) // Comment .route("/api/v1/comment", web::post().to(route_post::)) .route("/api/v1/comment", web::put().to(route_post::)) .route("/api/v1/comment/like", web::post().to(route_post::)) .route("/api/v1/comment/save", web::put().to(route_post::)) // User .route("/api/v1/user", web::get().to(route_get::)) .route("/api/v1/user/mention", web::get().to(route_get::)) .route("/api/v1/user/mention", web::put().to(route_post::)) .route("/api/v1/user/replies", web::get().to(route_get::)) .route("/api/v1/user/followed_communities", web::get().to(route_get::)) // Mod actions .route("/api/v1/community/transfer", web::post().to(route_post::)) .route("/api/v1/community/ban_user", web::post().to(route_post::)) .route("/api/v1/community/mod", web::post().to(route_post::)) // Admin actions .route("/api/v1/site", web::post().to(route_post::)) .route("/api/v1/site", web::put().to(route_post::)) .route("/api/v1/site/transfer", web::post().to(route_post::)) .route("/api/v1/site/config", web::get().to(route_get::)) .route("/api/v1/site/config", web::put().to(route_post::)) .route("/api/v1/admin/add", web::post().to(route_post::)) .route("/api/v1/user/ban", web::post().to(route_post::)) // User account actions .route("/api/v1/user/login", web::post().to(route_post::)) .route("/api/v1/user/register", web::post().to(route_post::)) .route("/api/v1/user/delete_account", web::post().to(route_post::)) .route("/api/v1/user/password_reset", web::post().to(route_post::)) .route("/api/v1/user/password_change", web::post().to(route_post::)) .route("/api/v1/user/mark_all_as_read", web::post().to(route_post::)) .route("/api/v1/user/save_user_settings", web::put().to(route_post::)); } fn perform( data: Request, db: DbPoolParam, rate_limit_param: RateLimitParam, chat_server: ChatServerParam, req: HttpRequest, ) -> Result where Response: Serialize, Oper: Perform, { let ws_info = WebsocketInfo { chatserver: chat_server.get_ref().to_owned(), id: None, }; let rate_limit_info = RateLimitInfo { rate_limiter: rate_limit_param.get_ref().to_owned(), ip: get_ip(&req), }; let oper: Oper = Oper::new(data); let res = oper.perform( db.get_ref().to_owned(), Some(ws_info), Some(rate_limit_info), ); Ok(HttpResponse::Ok().json(res?)) } async fn route_get( data: web::Query, db: DbPoolParam, rate_limit_param: RateLimitParam, chat_server: ChatServerParam, req: HttpRequest, ) -> Result where Data: Serialize, Response: Serialize, Oper: Perform, { perform::(data.0, db, rate_limit_param, chat_server, req) } async fn route_post( data: web::Json, db: DbPoolParam, rate_limit_param: RateLimitParam, chat_server: ChatServerParam, req: HttpRequest, ) -> Result where Data: Serialize, Response: Serialize, Oper: Perform, { perform::(data.0, db, rate_limit_param, chat_server, req) }