3 pub fn config(cfg: &mut web::ServiceConfig) {
5 .route("/nodeinfo/2.0.json", web::get().to(node_info))
6 .route("/.well-known/nodeinfo", web::get().to(node_info_well_known));
9 async fn node_info_well_known() -> HttpResponse<Body> {
10 let node_info = NodeInfoWellKnown {
11 links: NodeInfoWellKnownLinks {
12 rel: "http://nodeinfo.diaspora.software/ns/schema/2.0".to_string(),
13 href: format!("https://{}/nodeinfo/2.0.json", Settings::get().hostname),
16 HttpResponse::Ok().json(node_info)
20 db: web::Data<Pool<ConnectionManager<PgConnection>>>,
21 ) -> Result<HttpResponse, Error> {
22 let res = web::block(move || {
24 let site_view = match SiteView::read(&conn) {
25 Ok(site_view) => site_view,
26 Err(_) => return Err(format_err!("not_found")),
28 let protocols = vec![];
30 version: "2.0".to_string(),
31 software: NodeInfoSoftware {
32 name: "lemmy".to_string(),
33 version: version::VERSION.to_string(),
36 usage: NodeInfoUsage {
37 users: NodeInfoUsers {
38 total: site_view.number_of_users,
40 local_posts: site_view.number_of_posts,
41 local_comments: site_view.number_of_comments,
42 open_registrations: site_view.open_registration,
47 .map(|json| HttpResponse::Ok().json(json))
48 .map_err(ErrorBadRequest)?;
53 struct NodeInfoWellKnown {
54 links: NodeInfoWellKnownLinks,
58 struct NodeInfoWellKnownLinks {
66 software: NodeInfoSoftware,
67 protocols: Vec<String>,
72 struct NodeInfoSoftware {
78 #[serde(rename_all = "camelCase")]
79 struct NodeInfoUsage {
83 open_registrations: bool,
87 struct NodeInfoUsers {