diff options
author | Felix Ableitner <me@nutomic.com> | 2019-12-31 13:55:33 +0100 |
---|---|---|
committer | Felix Ableitner <me@nutomic.com> | 2019-12-31 14:17:24 +0100 |
commit | 80f76f2efd71ec86152ea0d33cc663e781a23642 (patch) | |
tree | 49db0fa5c30165bf3c20dc21364b3ecd2eb88172 /server/src/routes/nodeinfo.rs | |
parent | 47d55d9d2b69e7da49160675206b64a14ab75ebe (diff) |
Use actix config to handle routes in seperate folders (#378)
Diffstat (limited to 'server/src/routes/nodeinfo.rs')
-rw-r--r-- | server/src/routes/nodeinfo.rs | 59 |
1 files changed, 59 insertions, 0 deletions
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<Body> { + 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<Body> { + 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()); +} |