summaryrefslogtreecommitdiffstats
path: root/server/src/nodeinfo.rs
blob: 69c86919ce93125c2c11bb00edd432f53ce0299d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use crate::db::community_view::SiteView;
use crate::db::establish_connection;
use crate::version;
use crate::Settings;
use actix_web::body::Body;
use actix_web::HttpResponse;
use serde_json::json;

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());
}

pub 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 json = json!({
    "version": "2.0",
    "software": {
      "name": "lemmy",
      "version": version::VERSION,
    },
    "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());
}