summaryrefslogtreecommitdiffstats
path: root/server/src/routes/nodeinfo.rs
diff options
context:
space:
mode:
authorFelix Ableitner <me@nutomic.com>2019-12-31 13:55:33 +0100
committerFelix Ableitner <me@nutomic.com>2019-12-31 14:17:24 +0100
commit80f76f2efd71ec86152ea0d33cc663e781a23642 (patch)
tree49db0fa5c30165bf3c20dc21364b3ecd2eb88172 /server/src/routes/nodeinfo.rs
parent47d55d9d2b69e7da49160675206b64a14ab75ebe (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.rs59
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());
+}