From 80f76f2efd71ec86152ea0d33cc663e781a23642 Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Tue, 31 Dec 2019 13:55:33 +0100 Subject: Use actix config to handle routes in seperate folders (#378) --- server/src/routes/nodeinfo.rs | 59 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 server/src/routes/nodeinfo.rs (limited to 'server/src/routes/nodeinfo.rs') diff --git a/server/src/routes/nodeinfo.rs b/server/src/routes/nodeinfo.rs new file mode 100644 index 00000000..3165aea1 --- /dev/null +++ b/server/src/routes/nodeinfo.rs @@ -0,0 +1,59 @@ +use crate::db::establish_connection; +use crate::db::site_view::SiteView; +use crate::version; +use crate::Settings; +use actix_web::body::Body; +use actix_web::web; +use actix_web::HttpResponse; +use serde_json::json; + +pub fn config(cfg: &mut web::ServiceConfig) { + cfg + .route("/nodeinfo/2.0.json", web::get().to(node_info)) + .route("/.well-known/nodeinfo", web::get().to(node_info_well_known)); +} + +pub fn node_info_well_known() -> HttpResponse { + let json = json!({ + "links": { + "rel": "http://nodeinfo.diaspora.software/ns/schema/2.0", + "href": format!("https://{}/nodeinfo/2.0.json", Settings::get().hostname), + } + }); + + return HttpResponse::Ok() + .content_type("application/json") + .body(json.to_string()); +} + +fn node_info() -> HttpResponse { + let conn = establish_connection(); + let site_view = match SiteView::read(&conn) { + Ok(site_view) => site_view, + Err(_e) => return HttpResponse::InternalServerError().finish(), + }; + let protocols = if Settings::get().federation_enabled { + vec!["activitypub"] + } else { + vec![] + }; + let json = json!({ + "version": "2.0", + "software": { + "name": "lemmy", + "version": version::VERSION, + }, + "protocols": protocols, + "usage": { + "users": { + "total": site_view.number_of_users + }, + "localPosts": site_view.number_of_posts, + "localComments": site_view.number_of_comments, + "openRegistrations": true, + } + }); + return HttpResponse::Ok() + .content_type("application/json") + .body(json.to_string()); +} -- cgit v1.2.3