This commit is contained in:
Tangel 2025-02-08 09:04:04 +00:00 committed by GitHub
parent 18fe8773c8
commit 67615a76a8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 34 additions and 25 deletions

View file

@ -12,8 +12,10 @@ use axum::{
Router, Router,
}; };
use error::Error; use error::Error;
use std::sync::{Arc, Mutex}; use std::{
use tokio::net::TcpListener; net::ToSocketAddrs,
sync::{Arc, Mutex},
};
use tracing::log::{info, LevelFilter}; use tracing::log::{info, LevelFilter};
mod activities; mod activities;
@ -58,8 +60,12 @@ async fn main() -> Result<(), Error> {
.route("/.well-known/webfinger", get(webfinger)) .route("/.well-known/webfinger", get(webfinger))
.layer(FederationMiddleware::new(config)); .layer(FederationMiddleware::new(config));
let addr = TcpListener::bind(BIND_ADDRESS).await?; let addr = BIND_ADDRESS
axum::serve(addr, app.into_make_service()).await?; .to_socket_addrs()?
.next()
.expect("Failed to lookup domain name");
let listener = tokio::net::TcpListener::bind(addr).await?;
axum::serve(listener, app.into_make_service()).await?;
Ok(()) Ok(())
} }

View file

@ -22,7 +22,7 @@ use axum::{
Router, Router,
}; };
use serde::Deserialize; use serde::Deserialize;
use std::net::TcpListener; use std::net::ToSocketAddrs;
use tracing::info; use tracing::info;
pub fn listen(config: &FederationConfig<DatabaseHandle>) -> Result<(), Error> { pub fn listen(config: &FederationConfig<DatabaseHandle>) -> Result<(), Error> {
@ -35,10 +35,18 @@ pub fn listen(config: &FederationConfig<DatabaseHandle>) -> Result<(), Error> {
.route("/.well-known/webfinger", get(webfinger)) .route("/.well-known/webfinger", get(webfinger))
.layer(FederationMiddleware::new(config)); .layer(FederationMiddleware::new(config));
let addr = tokio::net::TcpListener::from_std(TcpListener::bind(hostname)?)?; let addr = hostname
let server = axum::serve(addr, app.into_make_service()); .to_socket_addrs()?
.next()
.expect("Failed to lookup domain name");
let fut = async move {
let listener = tokio::net::TcpListener::bind(addr).await.unwrap();
axum::serve(listener, app.into_make_service())
.await
.unwrap();
};
tokio::spawn(async move { server.await.unwrap() }); tokio::spawn(fut);
Ok(()) Ok(())
} }

View file

@ -424,7 +424,6 @@ mod tests {
use bytes::Bytes; use bytes::Bytes;
use http::{HeaderMap, StatusCode}; use http::{HeaderMap, StatusCode};
use std::time::Instant; use std::time::Instant;
use tokio::net::TcpListener;
use tracing::debug; use tracing::debug;
// This will periodically send back internal errors to test the retry // This will periodically send back internal errors to test the retry
@ -452,12 +451,10 @@ mod tests {
.route("/", post(dodgy_handler)) .route("/", post(dodgy_handler))
.with_state(state); .with_state(state);
axum::serve( let listener = tokio::net::TcpListener::bind("0.0.0.0:8002").await.unwrap();
TcpListener::bind("0.0.0.0:8002").await.unwrap(), axum::serve(listener, app.into_make_service())
app.into_make_service(), .await
) .unwrap();
.await
.unwrap();
} }
#[tokio::test(flavor = "multi_thread")] #[tokio::test(flavor = "multi_thread")]

View file

@ -242,7 +242,6 @@ mod tests {
sync::{atomic::AtomicUsize, Arc}, sync::{atomic::AtomicUsize, Arc},
time::Instant, time::Instant,
}; };
use tokio::net::TcpListener;
use tracing::info; use tracing::info;
// This will periodically send back internal errors to test the retry // This will periodically send back internal errors to test the retry
@ -262,12 +261,10 @@ mod tests {
.route("/", post(dodgy_handler)) .route("/", post(dodgy_handler))
.with_state(state); .with_state(state);
axum::serve( let listener = tokio::net::TcpListener::bind("0.0.0.0:8001").await.unwrap();
TcpListener::bind("0.0.0.0:8001").await.unwrap(), axum::serve(listener, app.into_make_service())
app.into_make_service(), .await
) .unwrap();
.await
.unwrap();
} }
#[tokio::test(flavor = "multi_thread")] #[tokio::test(flavor = "multi_thread")]

View file

@ -26,7 +26,6 @@ use bytes::Bytes;
use derive_builder::Builder; use derive_builder::Builder;
use dyn_clone::{clone_trait_object, DynClone}; use dyn_clone::{clone_trait_object, DynClone};
use moka::future::Cache; use moka::future::Cache;
use once_cell::sync::Lazy;
use regex::Regex; use regex::Regex;
use reqwest::{redirect::Policy, Client, Request}; use reqwest::{redirect::Policy, Client, Request};
use reqwest_middleware::{ClientWithMiddleware, RequestBuilder}; use reqwest_middleware::{ClientWithMiddleware, RequestBuilder};
@ -38,6 +37,7 @@ use std::{
sync::{ sync::{
atomic::{AtomicU32, Ordering}, atomic::{AtomicU32, Ordering},
Arc, Arc,
LazyLock,
}, },
time::Duration, time::Duration,
}; };
@ -114,8 +114,8 @@ pub struct FederationConfig<T: Clone> {
pub(crate) queue_retry_count: usize, pub(crate) queue_retry_count: usize,
} }
pub(crate) static DOMAIN_REGEX: Lazy<Regex> = pub(crate) static DOMAIN_REGEX: LazyLock<Regex> =
Lazy::new(|| Regex::new(r"^[a-zA-Z0-9.-]*$").expect("compile regex")); LazyLock::new(|| Regex::new(r"^[a-zA-Z0-9.-]*$").expect("compile regex"));
impl<T: Clone> FederationConfig<T> { impl<T: Clone> FederationConfig<T> {
/// Returns a new config builder with default values. /// Returns a new config builder with default values.

View file

@ -31,6 +31,7 @@ use crate::{
traits::{ActivityHandler, Actor, Object}, traits::{ActivityHandler, Actor, Object},
}; };
pub use activitystreams_kinds as kinds; pub use activitystreams_kinds as kinds;
pub use serde_json;
use serde::{de::DeserializeOwned, Deserialize}; use serde::{de::DeserializeOwned, Deserialize};
use url::Url; use url::Url;