Router, Add wellknow, fix compile errors

This commit is contained in:
Julia Lange 2025-07-02 12:32:24 -07:00
parent ee99f119f0
commit 031faf7db1
Signed by: Julia
SSH key fingerprint: SHA256:5DJcfxa5/fKCYn57dcabJa2vN2e6eT0pBerYi5SUbto
8 changed files with 71 additions and 58 deletions

View file

@ -0,0 +1 @@
pub mod handle_resolution;

View file

@ -0,0 +1,52 @@
use crate::{
wellknown::WellKnownEndpoint,
Error,
};
use atproto::types::{Handle, Did};
use axum::{
routing::{
method_routing::MethodRouter,
get,
},
http::{
StatusCode,
HeaderMap,
},
};
pub struct HandleResolutionEndpoint {
resolver: MethodRouter,
}
impl HandleResolutionEndpoint {
pub fn new<HR>(handle_resolver: HR) -> Self where
HR: HandleResolver + Clone
{
HandleResolutionEndpoint {
resolver: get(async move | headers: HeaderMap | -> (StatusCode, String) {
let Some(Ok(hostname)) = headers.get("host").map(|header_value| {
header_value.to_str()
}) else {
return (StatusCode::INTERNAL_SERVER_ERROR, String::from("Internal Server Error"));
};
let Ok(valid_handle) = hostname.parse::<atproto::types::Handle>() else {
return (StatusCode::NOT_FOUND, String::from("User not found"));
};
match handle_resolver.call(valid_handle) {
Ok(Some(did)) => (StatusCode::OK, did.to_string()),
Ok(None) => (StatusCode::NOT_FOUND, String::from("User not found")),
Err(_) => (StatusCode::INTERNAL_SERVER_ERROR, String::from("Internal Server Error")),
}
})
}
}
}
pub trait HandleResolver: Send + Sync + 'static {
fn call(&self, handle: Handle) -> Result<Option<Did>, Error>;
}
impl WellKnownEndpoint for HandleResolutionEndpoint {
fn get_known_route(&self) -> String { String::from("atproto-did") }
fn get_resolver(self) -> MethodRouter { self.resolver }
}

View file

@ -0,0 +1 @@
pub mod authorization_server;

View file

@ -0,0 +1,2 @@