diff options
Diffstat (limited to 'server/src/routes/nodeinfo.rs')
-rw-r--r-- | server/src/routes/nodeinfo.rs | 62 |
1 files changed, 30 insertions, 32 deletions
diff --git a/server/src/routes/nodeinfo.rs b/server/src/routes/nodeinfo.rs index db206a3e..ff728fe3 100644 --- a/server/src/routes/nodeinfo.rs +++ b/server/src/routes/nodeinfo.rs @@ -1,8 +1,10 @@ use crate::{ apub::get_apub_protocol_string, + blocking, db::site_view::SiteView, routes::DbPoolParam, version, + LemmyError, Settings, }; use actix_web::{body::Body, error::ErrorBadRequest, *}; @@ -15,7 +17,7 @@ pub fn config(cfg: &mut web::ServiceConfig) { .route("/.well-known/nodeinfo", web::get().to(node_info_well_known)); } -async fn node_info_well_known() -> Result<HttpResponse<Body>, failure::Error> { +async fn node_info_well_known() -> Result<HttpResponse<Body>, LemmyError> { let node_info = NodeInfoWellKnown { links: NodeInfoWellKnownLinks { rel: Url::parse("http://nodeinfo.diaspora.software/ns/schema/2.0")?, @@ -30,38 +32,34 @@ async fn node_info_well_known() -> Result<HttpResponse<Body>, failure::Error> { } async fn node_info(db: DbPoolParam) -> Result<HttpResponse, Error> { - let res = web::block(move || { - let conn = db.get()?; - let site_view = match SiteView::read(&conn) { - Ok(site_view) => site_view, - Err(_) => return Err(format_err!("not_found")), - }; - let protocols = if Settings::get().federation.enabled { - vec!["activitypub".to_string()] - } else { - vec![] - }; - Ok(NodeInfo { - version: "2.0".to_string(), - software: NodeInfoSoftware { - name: "lemmy".to_string(), - version: version::VERSION.to_string(), - }, - protocols, - usage: NodeInfoUsage { - users: NodeInfoUsers { - total: site_view.number_of_users, - }, - local_posts: site_view.number_of_posts, - local_comments: site_view.number_of_comments, - open_registrations: site_view.open_registration, + let site_view = blocking(&db, SiteView::read) + .await? + .map_err(|_| ErrorBadRequest(LemmyError::from(format_err!("not_found"))))?; + + let protocols = if Settings::get().federation.enabled { + vec!["activitypub".to_string()] + } else { + vec![] + }; + + let json = NodeInfo { + version: "2.0".to_string(), + software: NodeInfoSoftware { + name: "lemmy".to_string(), + version: version::VERSION.to_string(), + }, + protocols, + usage: NodeInfoUsage { + users: NodeInfoUsers { + total: site_view.number_of_users, }, - }) - }) - .await - .map(|json| HttpResponse::Ok().json(json)) - .map_err(ErrorBadRequest)?; - Ok(res) + local_posts: site_view.number_of_posts, + local_comments: site_view.number_of_comments, + open_registrations: site_view.open_registration, + }, + }; + + Ok(HttpResponse::Ok().json(json)) } #[derive(Serialize, Deserialize, Debug)] |