chore: federation: refactor routes
This commit is contained in:
parent
19cfd5d014
commit
1b557e045d
3 changed files with 57 additions and 38 deletions
43
src/federation/adapter/input/web/person/routes.rs
Normal file
43
src/federation/adapter/input/web/person/routes.rs
Normal 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))
|
||||
}
|
||||
}
|
|
@ -5,21 +5,19 @@
|
|||
use crate::{settings::Settings, utils::forges::*};
|
||||
use url::Url;
|
||||
|
||||
use super::person::routes::PersonRoutes;
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
|
||||
pub struct RoutesRepository {
|
||||
webfinger: String,
|
||||
person: String,
|
||||
person_inbox: String,
|
||||
person_outbox: String,
|
||||
pub person: PersonRoutes,
|
||||
}
|
||||
|
||||
impl Default for RoutesRepository {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
webfinger: "/.well-known/webfinger?resource={resource}".into(),
|
||||
person: "/{forge_hostname}/{username}".into(),
|
||||
person_inbox: "/{forge_hostname}/{username}/inbox".into(),
|
||||
person_outbox: "/{forge_hostname}/{username}/outbox".into(),
|
||||
person: PersonRoutes::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -29,32 +27,4 @@ impl RoutesRepository {
|
|||
self.webfinger
|
||||
.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))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -128,7 +128,7 @@ async fn handler(
|
|||
Ok(person) => {
|
||||
let profile_page = absolute_url(
|
||||
&settings,
|
||||
&routes.person(&person.username(), forge, &settings),
|
||||
&&routes.person.actor(&person.username(), forge, &settings),
|
||||
)
|
||||
.unwrap();
|
||||
// .map_err(|_| InUIError::InternalServerError)?;
|
||||
|
@ -302,7 +302,9 @@ mod tests {
|
|||
.find(|l| l.rel == Some("http://webfinger.net/rel/profile-page".into()))
|
||||
.unwrap();
|
||||
let expected_profile_page_link =
|
||||
routes.person(person.username(), SupportedForges::Forgejo, &settings);
|
||||
routes
|
||||
.person
|
||||
.actor(person.username(), SupportedForges::Forgejo, &settings);
|
||||
|
||||
assert_eq!(
|
||||
profile_page_link.href.as_ref().unwrap().path(),
|
||||
|
@ -315,7 +317,9 @@ mod tests {
|
|||
let p = Person::default();
|
||||
let u = absolute_url(
|
||||
&settings,
|
||||
&routes.person(&p.username(), SupportedForges::Forgejo, &settings),
|
||||
&routes
|
||||
.person
|
||||
.actor(&p.username(), SupportedForges::Forgejo, &settings),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
|
@ -330,7 +334,9 @@ mod tests {
|
|||
x.subject,
|
||||
crate::utils::absolute_url::absolute_url(
|
||||
&settings,
|
||||
&routes.person(person.username(), SupportedForges::Forgejo, &settings)
|
||||
&routes
|
||||
.person
|
||||
.actor(person.username(), SupportedForges::Forgejo, &settings)
|
||||
)
|
||||
.unwrap()
|
||||
.to_string()
|
||||
|
|
Loading…
Add table
Reference in a new issue