diff options
Diffstat (limited to 'server/src/nodeinfo.rs')
-rw-r--r-- | server/src/nodeinfo.rs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/server/src/nodeinfo.rs b/server/src/nodeinfo.rs new file mode 100644 index 00000000..6790c042 --- /dev/null +++ b/server/src/nodeinfo.rs @@ -0,0 +1,60 @@ +use actix_web::web::Json; +use serde::Serialize; +use crate::db::establish_connection; +use crate::db::community_view::SiteView; +use actix_web::*; +use failure::Error; +use crate::version; + +#[derive(Serialize)] +pub struct Software { + name: String, + version: String, +} + +#[derive(Serialize)] +#[serde(rename_all = "camelCase")] +pub struct Usage { + users: Users, + local_posts: i64, + local_comments: i64, +} + +#[derive(Serialize)] +pub struct Users { + total: i64, +} + +#[derive(Serialize)] +#[serde(rename_all = "camelCase")] +pub struct NodeInfo { + version: String, + software: Software, + protocols: [String; 0], + usage: Usage, + open_registrations: bool, +} + +pub fn node_info() -> Result<Json<NodeInfo>, Error> { + let conn = establish_connection(); + let site_view = match SiteView::read(&conn) { + Ok(site_view) => site_view, + Err(_e) => return Err(_e)?, + }; + let json = Json(NodeInfo { + version: "2.0".to_string(), + software: Software { + name: "lemmy".to_string(), + version: version::VERSION.to_string(), + }, + protocols: [], // TODO: put 'activitypub' once that is implemented + usage: Usage { + users: Users { + total: site_view.number_of_users, + }, + local_posts: site_view.number_of_posts, + local_comments: site_view.number_of_comments, + }, + open_registrations: true }); + return Ok(json); +}
\ No newline at end of file |