fix: accept any domain cuz bridge

This commit is contained in:
aprilthepink 2024-08-03 08:15:54 +02:00
parent 2910702c19
commit dde8692a5d
3 changed files with 14 additions and 2 deletions

2
Cargo.lock generated
View file

@ -1949,7 +1949,9 @@ dependencies = [
"env_logger", "env_logger",
"lazy_static", "lazy_static",
"num_cpus", "num_cpus",
"once_cell",
"rand", "rand",
"regex",
"reqwest 0.12.5", "reqwest 0.12.5",
"sea-orm", "sea-orm",
"serde", "serde",

View file

@ -35,6 +35,8 @@ dotenv = "0.15.0"
async-recursion = "1.1.1" async-recursion = "1.1.1"
base64-url = "3.0.0" base64-url = "3.0.0"
webfinger = "0.5.1" webfinger = "0.5.1"
regex = "1.10.6"
once_cell = "1.19.0"
[dependencies.sea-orm] [dependencies.sea-orm]
version = "0.12.0" version = "0.12.0"

View file

@ -13,13 +13,15 @@ use crate::{
use activitypub_federation::{ use activitypub_federation::{
actix_web::{inbox::receive_activity, signing_actor}, actix_web::{inbox::receive_activity, signing_actor},
config::{Data, FederationConfig, FederationMiddleware}, config::{Data, FederationConfig, FederationMiddleware},
fetch::webfinger::{build_webfinger_response, extract_webfinger_name}, fetch::webfinger::{build_webfinger_response, extract_webfinger_name, WebFingerError},
protocol::context::WithContext, protocol::context::WithContext,
traits::{Actor, Object}, traits::{Actor, Object},
FEDERATION_CONTENT_TYPE, FEDERATION_CONTENT_TYPE,
}; };
use actix_web::{web, web::Bytes, App, HttpRequest, HttpResponse, HttpServer}; use actix_web::{web, web::Bytes, App, HttpRequest, HttpResponse, HttpServer};
use anyhow::anyhow; use anyhow::anyhow;
use once_cell::sync::Lazy;
use regex::Regex;
use serde::Deserialize; use serde::Deserialize;
use tracing::info; use tracing::info;
use url::Url; use url::Url;
@ -106,7 +108,13 @@ pub async fn webfinger(
query: web::Query<WebfingerQuery>, query: web::Query<WebfingerQuery>,
data: Data<StateHandle>, data: Data<StateHandle>,
) -> Result<HttpResponse, Error> { ) -> Result<HttpResponse, Error> {
let name = extract_webfinger_name(&query.resource, &data)?; static WEBFINGER_REGEX: Lazy<Regex> =
Lazy::new(|| Regex::new(r"^acct:([\p{L}0-9_\.\-]+)@(.*)$").expect("compile regex"));
let captures = WEBFINGER_REGEX
.captures(&query.resource)
.ok_or(WebFingerError::WrongFormat)?;
let account_name = captures.get(1).ok_or(WebFingerError::WrongFormat)?;
let name = account_name.as_str();
let user = local_db_user_from_name(name.to_string()).await?; let user = local_db_user_from_name(name.to_string()).await?;
Ok(HttpResponse::Ok().json(build_webfinger_response( Ok(HttpResponse::Ok().json(build_webfinger_response(
query.resource.clone(), query.resource.clone(),