]> Untitled Git - lemmy.git/blobdiff - crates/routes/src/nodeinfo.rs
Make functions work with both connection and pool (#3420)
[lemmy.git] / crates / routes / src / nodeinfo.rs
index b30b9f977dcb038aa71123dd5ead263e2bb9d35b..ef654462276642f085e1c77beb9fb25cda1ad4d0 100644 (file)
@@ -1,9 +1,9 @@
-use actix_web::{body::Body, error::ErrorBadRequest, *};
+use actix_web::{error::ErrorBadRequest, web, Error, HttpResponse, Result};
 use anyhow::anyhow;
-use lemmy_api_common::blocking;
-use lemmy_db_views::site_view::SiteView;
-use lemmy_utils::{version, LemmyError};
-use lemmy_websocket::LemmyContext;
+use lemmy_api_common::context::LemmyContext;
+use lemmy_db_schema::RegistrationMode;
+use lemmy_db_views::structs::SiteView;
+use lemmy_utils::{error::LemmyError, version};
 use serde::{Deserialize, Serialize};
 use url::Url;
 
@@ -15,7 +15,7 @@ pub fn config(cfg: &mut web::ServiceConfig) {
 
 async fn node_info_well_known(
   context: web::Data<LemmyContext>,
-) -> Result<HttpResponse<Body>, LemmyError> {
+) -> Result<HttpResponse, LemmyError> {
   let node_info = NodeInfoWellKnown {
     links: vec![NodeInfoWellKnownLinks {
       rel: Url::parse("http://nodeinfo.diaspora.software/ns/schema/2.0")?,
@@ -29,33 +29,33 @@ async fn node_info_well_known(
 }
 
 async fn node_info(context: web::Data<LemmyContext>) -> Result<HttpResponse, Error> {
-  let site_view = blocking(context.pool(), SiteView::read)
-    .await?
+  let site_view = SiteView::read_local(&mut context.pool())
+    .await
     .map_err(|_| ErrorBadRequest(LemmyError::from(anyhow!("not_found"))))?;
 
-  let protocols = if context.settings().federation.enabled {
-    vec!["activitypub".to_string()]
+  let protocols = if site_view.local_site.federation_enabled {
+    Some(vec!["activitypub".to_string()])
   } else {
-    vec![]
+    None
   };
-
+  let open_registrations = Some(site_view.local_site.registration_mode == RegistrationMode::Open);
   let json = NodeInfo {
-    version: "2.0".to_string(),
-    software: NodeInfoSoftware {
-      name: "lemmy".to_string(),
-      version: version::VERSION.to_string(),
-    },
+    version: Some("2.0".to_string()),
+    software: Some(NodeInfoSoftware {
+      name: Some("lemmy".to_string()),
+      version: Some(version::VERSION.to_string()),
+    }),
     protocols,
-    usage: NodeInfoUsage {
-      users: NodeInfoUsers {
-        total: site_view.counts.users,
-        active_halfyear: site_view.counts.users_active_half_year,
-        active_month: site_view.counts.users_active_month,
-      },
-      local_posts: site_view.counts.posts,
-      local_comments: site_view.counts.comments,
-    },
-    open_registrations: site_view.site.open_registration,
+    usage: Some(NodeInfoUsage {
+      users: Some(NodeInfoUsers {
+        total: Some(site_view.counts.users),
+        active_halfyear: Some(site_view.counts.users_active_half_year),
+        active_month: Some(site_view.counts.users_active_month),
+      }),
+      local_posts: Some(site_view.counts.posts),
+      local_comments: Some(site_view.counts.comments),
+    }),
+    open_registrations,
   };
 
   Ok(HttpResponse::Ok().json(json))
@@ -72,34 +72,35 @@ struct NodeInfoWellKnownLinks {
   pub href: Url,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
-#[serde(rename_all = "camelCase")]
-struct NodeInfo {
-  pub version: String,
-  pub software: NodeInfoSoftware,
-  pub protocols: Vec<String>,
-  pub usage: NodeInfoUsage,
-  pub open_registrations: bool,
+#[derive(Serialize, Deserialize, Debug, Default)]
+#[serde(rename_all = "camelCase", default)]
+pub struct NodeInfo {
+  pub version: Option<String>,
+  pub software: Option<NodeInfoSoftware>,
+  pub protocols: Option<Vec<String>>,
+  pub usage: Option<NodeInfoUsage>,
+  pub open_registrations: Option<bool>,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
-struct NodeInfoSoftware {
-  pub name: String,
-  pub version: String,
+#[derive(Serialize, Deserialize, Debug, Default)]
+#[serde(default)]
+pub struct NodeInfoSoftware {
+  pub name: Option<String>,
+  pub version: Option<String>,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
-#[serde(rename_all = "camelCase")]
-struct NodeInfoUsage {
-  pub users: NodeInfoUsers,
-  pub local_posts: i64,
-  pub local_comments: i64,
+#[derive(Serialize, Deserialize, Debug, Default)]
+#[serde(rename_all = "camelCase", default)]
+pub struct NodeInfoUsage {
+  pub users: Option<NodeInfoUsers>,
+  pub local_posts: Option<i64>,
+  pub local_comments: Option<i64>,
 }
 
-#[derive(Serialize, Deserialize, Debug)]
-#[serde(rename_all = "camelCase")]
-struct NodeInfoUsers {
-  pub total: i64,
-  pub active_halfyear: i64,
-  pub active_month: i64,
+#[derive(Serialize, Deserialize, Debug, Default)]
+#[serde(rename_all = "camelCase", default)]
+pub struct NodeInfoUsers {
+  pub total: Option<i64>,
+  pub active_halfyear: Option<i64>,
+  pub active_month: Option<i64>,
 }