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