X-Git-Url: http://these/git/?a=blobdiff_plain;f=src%2Fapi_routes_http.rs;h=bc4340e3cccf5baf61d8fc18fc506ca12791436a;hb=5d23ef960e3361d1cc38c1aff1d907d8da58b90f;hp=34083a48d19af22ea445770fd04378763ffc427b;hpb=2732a5bf0707cfca38cf6e826d867d69eb6f4888;p=lemmy.git diff --git a/src/api_routes_http.rs b/src/api_routes_http.rs index 34083a48..bc4340e3 100644 --- a/src/api_routes_http.rs +++ b/src/api_routes_http.rs @@ -1,4 +1,3 @@ -use crate::api_routes_websocket::websocket; use actix_web::{guard, web, Error, HttpResponse, Result}; use lemmy_api::Perform; use lemmy_api_common::{ @@ -7,9 +6,9 @@ use lemmy_api_common::{ CreateCommentLike, CreateCommentReport, DeleteComment, + DistinguishComment, EditComment, GetComment, - GetComments, ListCommentReports, RemoveComment, ResolveCommentReport, @@ -23,13 +22,13 @@ use lemmy_api_common::{ DeleteCommunity, EditCommunity, FollowCommunity, - GetCommunity, HideCommunity, ListCommunities, RemoveCommunity, TransferCommunity, }, context::LemmyContext, + custom_emoji::{CreateCustomEmoji, DeleteCustomEmoji, EditCustomEmoji}, person::{ AddAdmin, BanPerson, @@ -38,7 +37,6 @@ use lemmy_api_common::{ DeleteAccount, GetBannedPersons, GetCaptcha, - GetPersonDetails, GetPersonMentions, GetReplies, GetReportCount, @@ -54,13 +52,12 @@ use lemmy_api_common::{ VerifyEmail, }, post::{ - CreatePost, CreatePostLike, CreatePostReport, DeletePost, EditPost, + FeaturePost, GetPost, - GetPosts, GetSiteMetadata, ListPostReports, LockPost, @@ -68,7 +65,6 @@ use lemmy_api_common::{ RemovePost, ResolvePostReport, SavePost, - StickyPost, }, private_message::{ CreatePrivateMessage, @@ -84,6 +80,7 @@ use lemmy_api_common::{ ApproveRegistrationApplication, CreateSite, EditSite, + GetFederatedInstances, GetModlog, GetSite, GetUnreadRegistrationApplicationCount, @@ -93,21 +90,26 @@ use lemmy_api_common::{ PurgeCommunity, PurgePerson, PurgePost, - ResolveObject, - Search, }, - websocket::structs::{CommunityJoin, ModJoin, PostJoin, UserJoin}, }; -use lemmy_api_crud::PerformCrud; -use lemmy_apub::{api::PerformApub, SendActivity}; -use lemmy_utils::rate_limit::RateLimitCell; +use lemmy_api_crud::{post::create::create_post, PerformCrud}; +use lemmy_apub::{ + api::{ + list_comments::list_comments, + list_posts::list_posts, + read_community::read_community, + read_person::read_person, + resolve_object::resolve_object, + search::search, + }, + SendActivity, +}; +use lemmy_utils::{rate_limit::RateLimitCell, spawn_try_task, SYNCHRONOUS_FEDERATION}; use serde::Deserialize; pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimitCell) { cfg.service( web::scope("/api/v3") - // Websocket - .service(web::resource("/ws").to(websocket)) // Site .service( web::scope("/site") @@ -125,12 +127,12 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimitCell) { .service( web::resource("/search") .wrap(rate_limit.search()) - .route(web::get().to(route_get_apub::)), + .route(web::get().to(search)), ) .service( web::resource("/resolve_object") .wrap(rate_limit.message()) - .route(web::get().to(route_get_apub::)), + .route(web::get().to(resolve_object)), ) // Community .service( @@ -142,7 +144,7 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimitCell) { .service( web::scope("/community") .wrap(rate_limit.message()) - .route("", web::get().to(route_get_apub::)) + .route("", web::get().to(read_community)) .route("", web::put().to(route_post_crud::)) .route("/hide", web::put().to(route_post::)) .route("/list", web::get().to(route_get_crud::)) @@ -159,9 +161,12 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimitCell) { ) .route("/transfer", web::post().to(route_post::)) .route("/ban_user", web::post().to(route_post::)) - .route("/mod", web::post().to(route_post::)) - .route("/join", web::post().to(route_post::)) - .route("/mod/join", web::post().to(route_post::)), + .route("/mod", web::post().to(route_post::)), + ) + .service( + web::scope("/federated_instances") + .wrap(rate_limit.message()) + .route("", web::get().to(route_get::)), ) // Post .service( @@ -169,7 +174,7 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimitCell) { web::resource("/post") .guard(guard::Post()) .wrap(rate_limit.post()) - .route(web::post().to(route_post_crud::)), + .route(web::post().to(create_post)), ) .service( web::scope("/post") @@ -183,11 +188,10 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimitCell) { web::post().to(route_post::), ) .route("/lock", web::post().to(route_post::)) - .route("/sticky", web::post().to(route_post::)) - .route("/list", web::get().to(route_get_apub::)) + .route("/feature", web::post().to(route_post::)) + .route("/list", web::get().to(list_posts)) .route("/like", web::post().to(route_post::)) .route("/save", web::put().to(route_post::)) - .route("/join", web::post().to(route_post::)) .route("/report", web::post().to(route_post::)) .route( "/report/resolve", @@ -218,9 +222,13 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimitCell) { "/mark_as_read", web::post().to(route_post::), ) + .route( + "/distinguish", + web::post().to(route_post::), + ) .route("/like", web::post().to(route_post::)) .route("/save", web::put().to(route_post::)) - .route("/list", web::get().to(route_get_apub::)) + .route("/list", web::get().to(list_comments)) .route("/report", web::post().to(route_post::)) .route( "/report/resolve", @@ -278,14 +286,13 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimitCell) { .service( web::scope("/user") .wrap(rate_limit.message()) - .route("", web::get().to(route_get_apub::)) + .route("", web::get().to(read_person)) .route("/mention", web::get().to(route_get::)) .route( "/mention/mark_as_read", web::post().to(route_post::), ) .route("/replies", web::get().to(route_get::)) - .route("/join", web::post().to(route_post::)) // Admin action. I don't like that it's in /user .route("/ban", web::post().to(route_post::)) .route("/banned", web::get().to(route_get::)) @@ -338,15 +345,24 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimitCell) { .route( "/registration_application/approve", web::put().to(route_post::), + ) + .service( + web::scope("/purge") + .route("/person", web::post().to(route_post::)) + .route("/community", web::post().to(route_post::)) + .route("/post", web::post().to(route_post::)) + .route("/comment", web::post().to(route_post::)), ), ) .service( - web::scope("/admin/purge") + web::scope("/custom_emoji") .wrap(rate_limit.message()) - .route("/person", web::post().to(route_post::)) - .route("/community", web::post().to(route_post::)) - .route("/post", web::post().to(route_post::)) - .route("/comment", web::post().to(route_post::)), + .route("", web::post().to(route_post_crud::)) + .route("", web::put().to(route_post_crud::)) + .route( + "/delete", + web::post().to(route_post_crud::), + ), ), ); } @@ -354,6 +370,7 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimitCell) { async fn perform<'a, Data>( data: Data, context: web::Data, + apub_data: activitypub_federation::config::Data, ) -> Result where Data: Perform @@ -363,14 +380,21 @@ where + Send + 'static, { - let res = data.perform(&context, None).await?; - SendActivity::send_activity(&data, &res, &context).await?; - Ok(HttpResponse::Ok().json(res)) + let res = data.perform(&context).await?; + let res_clone = res.clone(); + let fed_task = async move { SendActivity::send_activity(&data, &res_clone, &apub_data).await }; + if *SYNCHRONOUS_FEDERATION { + fed_task.await?; + } else { + spawn_try_task(fed_task); + } + Ok(HttpResponse::Ok().json(&res)) } async fn route_get<'a, Data>( data: web::Query, context: web::Data, + apub_data: activitypub_federation::config::Data, ) -> Result where Data: Perform @@ -380,29 +404,13 @@ where + Send + 'static, { - perform::(data.0, context).await -} - -async fn route_get_apub<'a, Data>( - data: web::Query, - context: web::Data, -) -> Result -where - Data: PerformApub - + SendActivity::Response> - + Clone - + Deserialize<'a> - + Send - + 'static, -{ - let res = data.perform(&context, None).await?; - SendActivity::send_activity(&data.0, &res, &context).await?; - Ok(HttpResponse::Ok().json(res)) + perform::(data.0, context, apub_data).await } async fn route_post<'a, Data>( data: web::Json, context: web::Data, + apub_data: activitypub_federation::config::Data, ) -> Result where Data: Perform @@ -412,12 +420,13 @@ where + Send + 'static, { - perform::(data.0, context).await + perform::(data.0, context, apub_data).await } async fn perform_crud<'a, Data>( data: Data, context: web::Data, + apub_data: activitypub_federation::config::Data, ) -> Result where Data: PerformCrud @@ -427,14 +436,21 @@ where + Send + 'static, { - let res = data.perform(&context, None).await?; - SendActivity::send_activity(&data, &res, &context).await?; - Ok(HttpResponse::Ok().json(res)) + let res = data.perform(&context).await?; + let res_clone = res.clone(); + let fed_task = async move { SendActivity::send_activity(&data, &res_clone, &apub_data).await }; + if *SYNCHRONOUS_FEDERATION { + fed_task.await?; + } else { + spawn_try_task(fed_task); + } + Ok(HttpResponse::Ok().json(&res)) } async fn route_get_crud<'a, Data>( data: web::Query, context: web::Data, + apub_data: activitypub_federation::config::Data, ) -> Result where Data: PerformCrud @@ -444,12 +460,13 @@ where + Send + 'static, { - perform_crud::(data.0, context).await + perform_crud::(data.0, context, apub_data).await } async fn route_post_crud<'a, Data>( data: web::Json, context: web::Data, + apub_data: activitypub_federation::config::Data, ) -> Result where Data: PerformCrud @@ -459,5 +476,5 @@ where + Send + 'static, { - perform_crud::(data.0, context).await + perform_crud::(data.0, context, apub_data).await }