summaryrefslogtreecommitdiffstats
path: root/server/src/routes/nodeinfo.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/routes/nodeinfo.rs')
-rw-r--r--server/src/routes/nodeinfo.rs62
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)]