Use instance struct instead of raw string
This commit is contained in:
parent
3320c2d651
commit
507686eaf7
2 changed files with 21 additions and 14 deletions
|
@ -16,6 +16,17 @@ type PersonExt = Ext<Person, ApActorProperties>;
|
|||
|
||||
static APUB_JSON_CONTENT_TYPE: &str = "application/activity+json";
|
||||
|
||||
pub enum EndpointType {
|
||||
Community,
|
||||
User,
|
||||
Post,
|
||||
Comment,
|
||||
}
|
||||
|
||||
pub struct Instance {
|
||||
domain: String,
|
||||
}
|
||||
|
||||
fn create_apub_response<T>(json: &T) -> HttpResponse<Body>
|
||||
where
|
||||
T: serde::ser::Serialize,
|
||||
|
@ -25,13 +36,6 @@ where
|
|||
.json(json)
|
||||
}
|
||||
|
||||
pub enum EndpointType {
|
||||
Community,
|
||||
User,
|
||||
Post,
|
||||
Comment,
|
||||
}
|
||||
|
||||
// TODO: we will probably need to change apub endpoint urls so that html and activity+json content
|
||||
// types are handled at the same endpoint, so that you can copy the url into mastodon search
|
||||
// and have it fetch the object.
|
||||
|
@ -93,10 +97,13 @@ pub fn format_community_name(name: &str, instance: &str) -> String {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn get_following_instances() -> Vec<&'static str> {
|
||||
pub fn get_following_instances() -> Vec<Instance> {
|
||||
Settings::get()
|
||||
.federation
|
||||
.followed_instances
|
||||
.split(',')
|
||||
.map(|i| Instance {
|
||||
domain: i.to_string(),
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
|
|
|
@ -17,11 +17,11 @@ use serde::Deserialize;
|
|||
use std::time::Duration;
|
||||
use url::Url;
|
||||
|
||||
fn fetch_node_info(domain: &str) -> Result<NodeInfo, Error> {
|
||||
fn fetch_node_info(instance: &Instance) -> Result<NodeInfo, Error> {
|
||||
let well_known_uri = Url::parse(&format!(
|
||||
"{}://{}/.well-known/nodeinfo",
|
||||
get_apub_protocol_string(),
|
||||
domain
|
||||
instance.domain
|
||||
))?;
|
||||
let well_known = fetch_remote_object::<NodeInfoWellKnown>(&well_known_uri)?;
|
||||
Ok(fetch_remote_object::<NodeInfo>(&well_known.links.href)?)
|
||||
|
@ -75,17 +75,17 @@ where
|
|||
}
|
||||
|
||||
fn fetch_remote_community_posts(
|
||||
instance: &str,
|
||||
instance: &Instance,
|
||||
community: &Community,
|
||||
conn: &PgConnection,
|
||||
) -> Result<Vec<Post>, Error> {
|
||||
// TODO: need to add outbox field to Community
|
||||
let endpoint = Url::parse(&format!(
|
||||
"http://{}/federation/c/{}",
|
||||
instance, community.name
|
||||
instance.domain, community.name
|
||||
))?;
|
||||
let group = fetch_remote_object::<GroupExt>(&endpoint)?;
|
||||
let outbox_uri = Url::parse(&group.extension.get_outbox().to_string())?;
|
||||
// TODO: outbox url etc should be stored in local db
|
||||
let outbox = fetch_remote_object::<OrderedCollection>(&outbox_uri)?;
|
||||
let items = outbox.collection_props.get_many_items_base_boxes();
|
||||
|
||||
|
@ -134,7 +134,7 @@ pub fn fetch_all(conn: &PgConnection) -> Result<(), Error> {
|
|||
} else {
|
||||
warn!(
|
||||
"{} is not a Lemmy instance, federation is not supported",
|
||||
instance
|
||||
instance.domain
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue