···
3
-
EndpointExt, Route, Server, get, handler,
3
+
EndpointExt, Response, Route, Server, get, handler,
middleware::{AddData, Tracing},
6
-
web::{Data, Json, TypedHeader, headers::Host},
7
+
web::{Data, Json, Query, TypedHeader, headers::Host},
8
-
use serde::Serialize;
9
+
use serde::{Deserialize, Serialize};
···
37
+
#[derive(Deserialize)]
43
+
Data(parent): Data<&Option<String>>,
44
+
Query(AskQuery { domain }): Query<AskQuery>,
46
+
if let Some(parent) = parent {
47
+
if let Some(prefix) = domain.strip_suffix(&format!(".{parent}")) {
48
+
if !prefix.contains('.') {
49
+
// no sub-sub-domains allowed
50
+
return Response::builder().body("ok");
55
+
.status(StatusCode::FORBIDDEN)
/// Slingshot record edge cache
#[derive(Parser, Debug, Clone)]
#[command(version, about, long_about = None)]
···
/// The HTTPS endpoint for the service
service_endpoint: String,
76
+
/// The parent domain; requests should come from subdomains of this
78
+
domain: Option<String>,
impl From<Args> for DidService {
···
let args = Args::parse();
97
+
let domain = args.domain.clone();
let service: DidService = args.into();
Server::new(TcpListener::bind("0.0.0.0:3001"))
···
.at("/.well-known/did.json", get(did_doc))
105
+
.at("/ask", get(ask_caddy))
.with(AddData::new(service))
107
+
.with(AddData::new(domain))