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 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))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Add table
Reference in a new issue