2021-04-09 00:22:17 +00:00
|
|
|
/// http://nodeinfo.diaspora.software/protocol.html
|
|
|
|
|
|
|
|
use actix_web::{get, web, HttpResponse};
|
|
|
|
|
2023-02-18 23:52:48 +00:00
|
|
|
use mitra_config::Config;
|
|
|
|
|
2022-12-03 21:23:52 +00:00
|
|
|
use crate::database::{get_database_client, DbPool};
|
2021-04-09 00:22:17 +00:00
|
|
|
use crate::errors::HttpError;
|
|
|
|
use crate::webfinger::types::{
|
|
|
|
Link,
|
|
|
|
JsonResourceDescriptor,
|
|
|
|
};
|
2022-07-07 18:55:47 +00:00
|
|
|
use super::helpers::get_usage;
|
2021-04-09 00:22:17 +00:00
|
|
|
use super::types::NodeInfo20;
|
|
|
|
|
|
|
|
#[get("/.well-known/nodeinfo")]
|
|
|
|
pub async fn get_nodeinfo(
|
|
|
|
config: web::Data<Config>,
|
|
|
|
) -> Result<HttpResponse, HttpError> {
|
|
|
|
let nodeinfo_2_0_url = format!("{}/nodeinfo/2.0", config.instance_url());
|
|
|
|
let link = Link {
|
|
|
|
rel: "http://nodeinfo.diaspora.software/ns/schema/2.0".to_string(),
|
2023-02-24 00:49:18 +00:00
|
|
|
media_type: None,
|
2021-04-09 00:22:17 +00:00
|
|
|
href: Some(nodeinfo_2_0_url),
|
2023-02-24 13:12:10 +00:00
|
|
|
properties: Default::default(),
|
2021-04-09 00:22:17 +00:00
|
|
|
};
|
|
|
|
let jrd = JsonResourceDescriptor {
|
|
|
|
subject: config.instance_url(),
|
|
|
|
links: vec![link],
|
|
|
|
};
|
|
|
|
let response = HttpResponse::Ok().json(jrd);
|
|
|
|
Ok(response)
|
|
|
|
}
|
|
|
|
|
|
|
|
#[get("/nodeinfo/2.0")]
|
|
|
|
pub async fn get_nodeinfo_2_0(
|
|
|
|
config: web::Data<Config>,
|
2022-12-03 21:23:52 +00:00
|
|
|
db_pool: web::Data<DbPool>,
|
2021-04-09 00:22:17 +00:00
|
|
|
) -> Result<HttpResponse, HttpError> {
|
2022-07-07 18:55:47 +00:00
|
|
|
let db_client = &**get_database_client(&db_pool).await?;
|
|
|
|
let usage = get_usage(db_client).await?;
|
|
|
|
let nodeinfo = NodeInfo20::new(&config, usage);
|
2021-04-09 00:22:17 +00:00
|
|
|
let response = HttpResponse::Ok().json(nodeinfo);
|
|
|
|
Ok(response)
|
|
|
|
}
|