88 lines
2.7 KiB
Rust
88 lines
2.7 KiB
Rust
|
use crate::config::MagnetarConfig;
|
||
|
use axum::extract::State;
|
||
|
use axum::Json;
|
||
|
use magnetar_core::web_model::rel::{RelNodeInfo20, RelNodeInfo21};
|
||
|
use magnetar_core::web_model::Rel;
|
||
|
use magnetar_nodeinfo::version_1_0::{
|
||
|
NodeInfo10Services, NodeInfo10Software, NodeInfo10Usage, NodeInfo10UsageUsers,
|
||
|
};
|
||
|
use magnetar_nodeinfo::version_2_0::NodeInfo20;
|
||
|
use magnetar_nodeinfo::version_2_1::{NodeInfo21, NodeInfo21Software};
|
||
|
use serde::Serialize;
|
||
|
use std::collections::{HashMap, HashSet};
|
||
|
|
||
|
const NODEINFO_PATH: &str = "/nodeinfo";
|
||
|
|
||
|
#[derive(Clone, Debug, Serialize)]
|
||
|
pub struct NodeInfoLink {
|
||
|
rel: &'static str,
|
||
|
href: &'static str,
|
||
|
}
|
||
|
|
||
|
pub async fn handle_nodeinfo(
|
||
|
State(config): State<&'static MagnetarConfig>,
|
||
|
) -> Json<Vec<NodeInfoLink>> {
|
||
|
Json(vec![
|
||
|
NodeInfoLink {
|
||
|
href: "/nodeinfo/2.0",
|
||
|
rel: RelNodeInfo20.rel(),
|
||
|
},
|
||
|
NodeInfoLink {
|
||
|
href: "/nodeinfo/2.1",
|
||
|
rel: RelNodeInfo21.rel(),
|
||
|
},
|
||
|
])
|
||
|
}
|
||
|
|
||
|
pub async fn handle_nodeinfo_21(State(config): State<&'static MagnetarConfig>) -> Json<NodeInfo21> {
|
||
|
Json(NodeInfo21 {
|
||
|
software: NodeInfo21Software {
|
||
|
name: config.branding.name.clone(),
|
||
|
version: config.branding.version.clone(),
|
||
|
homepage: Some(config.branding.homepage.clone()),
|
||
|
repository: Some(config.branding.repository.clone()),
|
||
|
},
|
||
|
protocols: HashSet::from(["activitypub".to_owned()]),
|
||
|
services: NodeInfo10Services {
|
||
|
inbound: HashSet::new(),
|
||
|
outbound: HashSet::new(),
|
||
|
},
|
||
|
open_registrations: false,
|
||
|
usage: NodeInfo10Usage {
|
||
|
users: NodeInfo10UsageUsers {
|
||
|
total: Some(0),
|
||
|
active_halfyear: Some(0),
|
||
|
active_month: Some(0),
|
||
|
},
|
||
|
local_posts: Some(0),
|
||
|
local_comments: Some(0),
|
||
|
},
|
||
|
metadata: HashMap::new(),
|
||
|
})
|
||
|
}
|
||
|
|
||
|
pub async fn handle_nodeinfo_20(State(config): State<&'static MagnetarConfig>) -> Json<NodeInfo20> {
|
||
|
Json(NodeInfo20 {
|
||
|
software: NodeInfo10Software {
|
||
|
name: config.branding.name.clone(),
|
||
|
version: config.branding.version.clone(),
|
||
|
},
|
||
|
protocols: HashSet::from(["activitypub".to_owned()]),
|
||
|
services: NodeInfo10Services {
|
||
|
inbound: HashSet::new(),
|
||
|
outbound: HashSet::new(),
|
||
|
},
|
||
|
open_registrations: false,
|
||
|
usage: NodeInfo10Usage {
|
||
|
users: NodeInfo10UsageUsers {
|
||
|
total: Some(0),
|
||
|
active_halfyear: Some(0),
|
||
|
active_month: Some(0),
|
||
|
},
|
||
|
local_posts: Some(0),
|
||
|
local_comments: None,
|
||
|
},
|
||
|
metadata: HashMap::new(),
|
||
|
})
|
||
|
}
|