feat: Implement WebFinger discovery and ActivityPub user actor endpoint

- Added a new router for handling well-known endpoints, specifically WebFinger.
- Implemented the `webfinger` function to respond to WebFinger queries.
- Created a new route for WebFinger in the router.
- Refactored user retrieval logic to support both user ID and username in a single endpoint.
- Updated user router to use the new `get_user_by_param` function.
- Added tests for WebFinger discovery and ActivityPub user actor endpoint.
- Updated dependencies in Cargo.toml files to include necessary libraries.
This commit is contained in:
2025-09-06 01:18:04 +02:00
parent 3d73c7f198
commit c7c573f3f4
11 changed files with 935 additions and 70 deletions

View File

@@ -1,4 +1,9 @@
use axum::{body::Body, http::Request, response::Response, Router};
use axum::{
body::Body,
http::{header, Request},
response::Response,
Router,
};
use tower::ServiceExt;
pub async fn make_get_request(app: Router, url: &str, user_id: Option<i32>) -> Response {
@@ -68,3 +73,25 @@ pub async fn make_jwt_request(
.await
.unwrap()
}
pub async fn make_request_with_headers(
app: Router,
url: &str,
method: &str,
body: Option<String>,
headers: Vec<(header::HeaderName, &str)>,
) -> Response {
let mut builder = Request::builder()
.method(method)
.uri(url)
.header("Content-Type", "application/json");
for (key, value) in headers {
builder = builder.header(key, value);
}
let request_body = body.unwrap_or_default();
app.oneshot(builder.body(Body::from(request_body)).unwrap())
.await
.unwrap()
}

View File

@@ -1,5 +1,8 @@
mod api;
mod db;
pub use api::{make_delete_request, make_get_request, make_jwt_request, make_post_request};
pub use api::{
make_delete_request, make_get_request, make_jwt_request, make_post_request,
make_request_with_headers,
};
pub use db::setup_test_db;