forked from mirrors/relay
Fix nodeinfo, expose peers
This commit is contained in:
parent
8efb00dc72
commit
43280f30fe
3 changed files with 30 additions and 14 deletions
|
@ -118,7 +118,7 @@ impl Config {
|
||||||
UrlKind::Following => format!("{}://{}/following", scheme, self.hostname),
|
UrlKind::Following => format!("{}://{}/following", scheme, self.hostname),
|
||||||
UrlKind::Inbox => format!("{}://{}/inbox", scheme, self.hostname),
|
UrlKind::Inbox => format!("{}://{}/inbox", scheme, self.hostname),
|
||||||
UrlKind::MainKey => format!("{}://{}/actor#main-key", scheme, self.hostname),
|
UrlKind::MainKey => format!("{}://{}/actor#main-key", scheme, self.hostname),
|
||||||
UrlKind::NodeInfo => format!("{}://{}/nodeinfo/2.0", scheme, self.hostname),
|
UrlKind::NodeInfo => format!("{}://{}/nodeinfo/2.0.json", scheme, self.hostname),
|
||||||
UrlKind::Outbox => format!("{}://{}/outbox", scheme, self.hostname),
|
UrlKind::Outbox => format!("{}://{}/outbox", scheme, self.hostname),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,7 +120,7 @@ async fn main() -> Result<(), anyhow::Error> {
|
||||||
.route(web::post().to(inbox::inbox)),
|
.route(web::post().to(inbox::inbox)),
|
||||||
)
|
)
|
||||||
.service(web::resource("/actor").route(web::get().to(actor::route)))
|
.service(web::resource("/actor").route(web::get().to(actor::route)))
|
||||||
.service(web::resource("/nodeinfo/2.0").route(web::get().to(nodeinfo::route)))
|
.service(web::resource("/nodeinfo/2.0.json").route(web::get().to(nodeinfo::route)))
|
||||||
.service(
|
.service(
|
||||||
web::scope("/.well-known")
|
web::scope("/.well-known")
|
||||||
.service(actix_webfinger::scoped::<_, RelayResolver>())
|
.service(actix_webfinger::scoped::<_, RelayResolver>())
|
||||||
|
|
|
@ -1,19 +1,26 @@
|
||||||
use crate::config::{Config, UrlKind};
|
use crate::{
|
||||||
|
config::{Config, UrlKind},
|
||||||
|
state::State,
|
||||||
|
};
|
||||||
use actix_web::{web, Responder};
|
use actix_web::{web, Responder};
|
||||||
use actix_webfinger::Link;
|
use actix_webfinger::Link;
|
||||||
use std::collections::HashMap;
|
use serde_json::json;
|
||||||
|
|
||||||
pub async fn well_known(config: web::Data<Config>) -> impl Responder {
|
pub async fn well_known(config: web::Data<Config>) -> impl Responder {
|
||||||
web::Json(Link {
|
web::Json(json!({
|
||||||
|
"links": [
|
||||||
|
Link {
|
||||||
rel: "http://nodeinfo.diaspora.software/ns/schema/2.0".to_owned(),
|
rel: "http://nodeinfo.diaspora.software/ns/schema/2.0".to_owned(),
|
||||||
href: Some(config.generate_url(UrlKind::NodeInfo)),
|
href: Some(config.generate_url(UrlKind::NodeInfo)),
|
||||||
template: None,
|
template: None,
|
||||||
kind: None,
|
kind: None,
|
||||||
})
|
}
|
||||||
|
]
|
||||||
|
}))
|
||||||
.with_header("Content-Type", "application/jrd+json")
|
.with_header("Content-Type", "application/jrd+json")
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn route(config: web::Data<Config>) -> web::Json<NodeInfo> {
|
pub async fn route(config: web::Data<Config>, state: web::Data<State>) -> web::Json<NodeInfo> {
|
||||||
web::Json(NodeInfo {
|
web::Json(NodeInfo {
|
||||||
version: NodeInfoVersion,
|
version: NodeInfoVersion,
|
||||||
software: Software {
|
software: Software {
|
||||||
|
@ -27,7 +34,15 @@ pub async fn route(config: web::Data<Config>) -> web::Json<NodeInfo> {
|
||||||
local_posts: 0,
|
local_posts: 0,
|
||||||
local_comments: 0,
|
local_comments: 0,
|
||||||
},
|
},
|
||||||
metadata: Metadata::default(),
|
metadata: Metadata {
|
||||||
|
peers: state
|
||||||
|
.listeners()
|
||||||
|
.await
|
||||||
|
.iter()
|
||||||
|
.filter_map(|listener| listener.as_url().domain())
|
||||||
|
.map(|s| s.to_owned())
|
||||||
|
.collect(),
|
||||||
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,8 +84,9 @@ pub struct Usage {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Default, serde::Serialize)]
|
#[derive(Clone, Debug, Default, serde::Serialize)]
|
||||||
#[serde(transparent)]
|
pub struct Metadata {
|
||||||
pub struct Metadata(pub HashMap<String, serde_json::Value>);
|
peers: Vec<String>,
|
||||||
|
}
|
||||||
|
|
||||||
impl serde::ser::Serialize for NodeInfoVersion {
|
impl serde::ser::Serialize for NodeInfoVersion {
|
||||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
|
Loading…
Reference in a new issue