chore: federation: refactor routes

This commit is contained in:
Aravinth Manivannan 2024-06-07 15:14:57 +05:30
parent 19cfd5d014
commit 1b557e045d
Signed by: realaravinth
GPG key ID: F8F50389936984FF
3 changed files with 57 additions and 38 deletions

View file

@ -0,0 +1,43 @@
// SPDX-FileCopyrightText: 2024 Aravinth Manivannan <realaravinth@batsense.net>
//
// SPDX-License-Identifier: AGPL-3.0-or-later
use crate::{settings::Settings, utils::forges::*};
use url::Url;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct PersonRoutes {
actor: String,
inbox: String,
outbox: String,
}
impl Default for PersonRoutes {
fn default() -> Self {
Self {
actor: "/{forge_hostname}/{username}".into(),
inbox: "/{forge_hostname}/{username}/inbox".into(),
outbox: "/{forge_hostname}/{username}/outbox".into(),
}
}
}
impl PersonRoutes {
pub fn actor(&self, username: &str, forge_name: SupportedForges, s: &Settings) -> String {
self.actor
.replace("{username}", username)
.replace("{forge_hostname}", &forge_name.get_hostname(s))
}
pub fn inbox(&self, username: &str, forge_name: SupportedForges, s: &Settings) -> String {
self.inbox
.replace("{username}", username)
.replace("{forge_hostname}", &forge_name.get_hostname(s))
}
pub fn outbox(&self, username: &str, forge_name: SupportedForges, s: &Settings) -> String {
self.outbox
.replace("{username}", username)
.replace("{forge_hostname}", &forge_name.get_hostname(s))
}
}

View file

@ -5,21 +5,19 @@
use crate::{settings::Settings, utils::forges::*}; use crate::{settings::Settings, utils::forges::*};
use url::Url; use url::Url;
use super::person::routes::PersonRoutes;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct RoutesRepository { pub struct RoutesRepository {
webfinger: String, webfinger: String,
person: String, pub person: PersonRoutes,
person_inbox: String,
person_outbox: String,
} }
impl Default for RoutesRepository { impl Default for RoutesRepository {
fn default() -> Self { fn default() -> Self {
Self { Self {
webfinger: "/.well-known/webfinger?resource={resource}".into(), webfinger: "/.well-known/webfinger?resource={resource}".into(),
person: "/{forge_hostname}/{username}".into(), person: PersonRoutes::default(),
person_inbox: "/{forge_hostname}/{username}/inbox".into(),
person_outbox: "/{forge_hostname}/{username}/outbox".into(),
} }
} }
} }
@ -29,32 +27,4 @@ impl RoutesRepository {
self.webfinger self.webfinger
.replace("{resource}", &resource_iri.to_string()) .replace("{resource}", &resource_iri.to_string())
} }
pub fn person(&self, username: &str, forge_name: SupportedForges, s: &Settings) -> String {
self.person
.replace("{username}", username)
.replace("{forge_hostname}", &forge_name.get_hostname(s))
}
pub fn person_inbox(
&self,
username: &str,
forge_name: SupportedForges,
s: &Settings,
) -> String {
self.person_inbox
.replace("{username}", username)
.replace("{forge_hostname}", &forge_name.get_hostname(s))
}
pub fn person_outbox(
&self,
username: &str,
forge_name: SupportedForges,
s: &Settings,
) -> String {
self.person_outbox
.replace("{username}", username)
.replace("{forge_hostname}", &forge_name.get_hostname(s))
}
} }

View file

@ -128,7 +128,7 @@ async fn handler(
Ok(person) => { Ok(person) => {
let profile_page = absolute_url( let profile_page = absolute_url(
&settings, &settings,
&routes.person(&person.username(), forge, &settings), &&routes.person.actor(&person.username(), forge, &settings),
) )
.unwrap(); .unwrap();
// .map_err(|_| InUIError::InternalServerError)?; // .map_err(|_| InUIError::InternalServerError)?;
@ -302,7 +302,9 @@ mod tests {
.find(|l| l.rel == Some("http://webfinger.net/rel/profile-page".into())) .find(|l| l.rel == Some("http://webfinger.net/rel/profile-page".into()))
.unwrap(); .unwrap();
let expected_profile_page_link = let expected_profile_page_link =
routes.person(person.username(), SupportedForges::Forgejo, &settings); routes
.person
.actor(person.username(), SupportedForges::Forgejo, &settings);
assert_eq!( assert_eq!(
profile_page_link.href.as_ref().unwrap().path(), profile_page_link.href.as_ref().unwrap().path(),
@ -315,7 +317,9 @@ mod tests {
let p = Person::default(); let p = Person::default();
let u = absolute_url( let u = absolute_url(
&settings, &settings,
&routes.person(&p.username(), SupportedForges::Forgejo, &settings), &routes
.person
.actor(&p.username(), SupportedForges::Forgejo, &settings),
) )
.unwrap(); .unwrap();
@ -330,7 +334,9 @@ mod tests {
x.subject, x.subject,
crate::utils::absolute_url::absolute_url( crate::utils::absolute_url::absolute_url(
&settings, &settings,
&routes.person(person.username(), SupportedForges::Forgejo, &settings) &routes
.person
.actor(person.username(), SupportedForges::Forgejo, &settings)
) )
.unwrap() .unwrap()
.to_string() .to_string()