X-Git-Url: http://these/git/?a=blobdiff_plain;f=src%2Fapi_routes_http.rs;h=bc4340e3cccf5baf61d8fc18fc506ca12791436a;hb=5d23ef960e3361d1cc38c1aff1d907d8da58b90f;hp=faf08938bd2458dcaff99b60e05dd8807c2740fb;hpb=3565ad984a0270c7dd29051a9ff6d15fc5a8ed47;p=lemmy.git diff --git a/src/api_routes_http.rs b/src/api_routes_http.rs index faf08938..bc4340e3 100644 --- a/src/api_routes_http.rs +++ b/src/api_routes_http.rs @@ -9,7 +9,6 @@ use lemmy_api_common::{ DistinguishComment, EditComment, GetComment, - GetComments, ListCommentReports, RemoveComment, ResolveCommentReport, @@ -23,7 +22,6 @@ use lemmy_api_common::{ DeleteCommunity, EditCommunity, FollowCommunity, - GetCommunity, HideCommunity, ListCommunities, RemoveCommunity, @@ -38,7 +36,7 @@ use lemmy_api_common::{ ChangePassword, DeleteAccount, GetBannedPersons, - GetPersonDetails, + GetCaptcha, GetPersonMentions, GetReplies, GetReportCount, @@ -54,14 +52,12 @@ use lemmy_api_common::{ VerifyEmail, }, post::{ - CreatePost, CreatePostLike, CreatePostReport, DeletePost, EditPost, FeaturePost, GetPost, - GetPosts, GetSiteMetadata, ListPostReports, LockPost, @@ -94,13 +90,21 @@ use lemmy_api_common::{ PurgeCommunity, PurgePerson, PurgePost, - ResolveObject, - Search, }, }; -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) { @@ -123,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( @@ -140,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::)) @@ -170,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") @@ -185,7 +189,7 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimitCell) { ) .route("/lock", web::post().to(route_post::)) .route("/feature", web::post().to(route_post::)) - .route("/list", web::get().to(route_get_apub::)) + .route("/list", web::get().to(list_posts)) .route("/like", web::post().to(route_post::)) .route("/save", web::put().to(route_post::)) .route("/report", web::post().to(route_post::)) @@ -224,7 +228,7 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimitCell) { ) .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", @@ -272,11 +276,17 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimitCell) { .wrap(rate_limit.register()) .route(web::post().to(route_post_crud::)), ) + .service( + // Handle captcha separately + web::resource("/user/get_captcha") + .wrap(rate_limit.post()) + .route(web::get().to(route_get::)), + ) // User actions .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", @@ -335,16 +345,15 @@ 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") - .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::)), - ) .service( web::scope("/custom_emoji") .wrap(rate_limit.message()) @@ -372,8 +381,14 @@ where + 'static, { let res = data.perform(&context).await?; - SendActivity::send_activity(&data, &res, &apub_data).await?; - Ok(HttpResponse::Ok().json(res)) + 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>( @@ -392,23 +407,6 @@ where perform::(data.0, context, apub_data).await } -async fn route_get_apub<'a, Data>( - data: web::Query, - context: activitypub_federation::config::Data, -) -> Result -where - Data: PerformApub - + SendActivity::Response> - + Clone - + Deserialize<'a> - + Send - + 'static, -{ - let res = data.perform(&context).await?; - SendActivity::send_activity(&data.0, &res, &context).await?; - Ok(HttpResponse::Ok().json(res)) -} - async fn route_post<'a, Data>( data: web::Json, context: web::Data, @@ -439,8 +437,14 @@ where + 'static, { let res = data.perform(&context).await?; - SendActivity::send_activity(&data, &res, &apub_data).await?; - Ok(HttpResponse::Ok().json(res)) + 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>(