feat(presentation): ActivityPub routes — WebFinger, NodeInfo, inbox, outbox

This commit is contained in:
2026-05-14 10:28:22 +02:00
parent 2080fec347
commit e0a27c99a4
5 changed files with 62 additions and 7 deletions

View File

@@ -2,19 +2,26 @@ use axum::{
routing::{delete, get, patch, post, put},
Router,
};
use activitypub_base::{
actor_handler::actor_handler,
followers_handler::{followers_handler, following_handler},
inbox::inbox_handler,
nodeinfo::{nodeinfo_handler, nodeinfo_well_known_handler},
outbox::outbox_handler,
webfinger::webfinger_handler,
ApFederationConfig,
};
use activitypub_federation::config::FederationMiddleware;
use crate::{handlers::*, state::AppState};
pub fn router() -> Router<AppState> {
Router::new()
pub fn router(fed_config: &ApFederationConfig) -> Router<AppState> {
let api_routes = Router::new()
// auth
.route("/auth/register", post(auth::post_register))
.route("/auth/login", post(auth::post_login))
// users — static paths before parameterised
.route("/users/me", patch(users::patch_profile))
.route("/users/me/top-friends", put(social::put_top_friends))
.route("/users/{username}", get(users::get_user))
.route("/users/{username}/following", get(feed::get_following_handler))
.route("/users/{username}/followers", get(feed::get_followers_handler))
.route("/users/{username}/top-friends", get(social::get_top_friends_handler))
// follows & blocks (use {id} param)
.route(
@@ -56,5 +63,20 @@ pub fn router() -> Router<AppState> {
"/api-keys",
get(api_keys::get_api_keys).post(api_keys::post_api_key),
)
.route("/api-keys/{id}", delete(api_keys::delete_api_key_handler))
.route("/api-keys/{id}", delete(api_keys::delete_api_key_handler));
let ap_routes = Router::new()
.route("/.well-known/webfinger", get(webfinger_handler))
.route("/.well-known/nodeinfo", get(nodeinfo_well_known_handler))
.route("/nodeinfo/2.0", get(nodeinfo_handler))
.route("/users/{username}", get(actor_handler))
.route("/users/{username}/inbox", post(inbox_handler))
.route("/users/{username}/outbox", get(outbox_handler))
.route("/users/{username}/followers", get(followers_handler))
.route("/users/{username}/following", get(following_handler));
Router::new()
.merge(api_routes)
.merge(ap_routes)
.layer(FederationMiddleware::new(fed_config.0.clone()))
}