summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Ableitner <me@nutomic.com>2020-06-16 13:35:26 +0200
committerFelix Ableitner <me@nutomic.com>2020-06-16 13:35:26 +0200
commit68bcc26ff611cf716e75aacd9427a73fd39a2fcc (patch)
tree9afc362b6af4ded8cf6642aa6bf36bfa51e3e7c9
parent325ed2ec3b2c6266de7af32a6d1fec74808f1cb7 (diff)
Fix community description federation (ref #647)
Also disable the actor refetch interval in debug builds.
-rw-r--r--docker/federation/Dockerfile2
-rw-r--r--server/src/apub/community.rs2
-rw-r--r--server/src/apub/fetcher.rs33
3 files changed, 21 insertions, 16 deletions
diff --git a/docker/federation/Dockerfile b/docker/federation/Dockerfile
index d8302ea7..ec7bf2d2 100644
--- a/docker/federation/Dockerfile
+++ b/docker/federation/Dockerfile
@@ -1,4 +1,4 @@
-FROM ekidd/rust-musl-builder:1.38.0-openssl11
+FROM ekidd/rust-musl-builder:1.42.0-openssl11
USER root
RUN mkdir /app/dist/documentation/ -p \
diff --git a/server/src/apub/community.rs b/server/src/apub/community.rs
index 3752798f..8c8c3b28 100644
--- a/server/src/apub/community.rs
+++ b/server/src/apub/community.rs
@@ -76,7 +76,7 @@ impl ToApub for Community {
if let Some(d) = self.description.to_owned() {
// TODO: this should be html, also add source field with raw markdown
// -> same for post.content and others
- oprops.set_summary_xsd_string(d)?;
+ oprops.set_content_xsd_string(d)?;
}
let mut endpoint_props = EndpointProperties::default();
diff --git a/server/src/apub/fetcher.rs b/server/src/apub/fetcher.rs
index 05b7492e..7f7a3f97 100644
--- a/server/src/apub/fetcher.rs
+++ b/server/src/apub/fetcher.rs
@@ -38,6 +38,9 @@ use crate::{
},
db::user_view::UserView,
};
+use chrono::NaiveDateTime;
+
+static ACTOR_REFETCH_INTERVAL_SECONDS: i64 = 24 * 60 * 60;
// Fetch nodeinfo metadata from a remote instance.
fn _fetch_node_info(domain: &str) -> Result<NodeInfo, Error> {
@@ -166,14 +169,7 @@ pub fn get_or_fetch_and_upsert_remote_user(
match User_::read_from_actor_id(&conn, &apub_id) {
Ok(u) => {
// If its older than a day, re-fetch it
- if !u.local
- && u
- .last_refreshed_at
- // TODO it won't pick up new avatars, summaries etc until a day after.
- // Both user and community need an "update" action pushed to other servers
- // to fix this
- .lt(&(naive_now() - chrono::Duration::days(1)))
- {
+ if !u.local && should_refetch_actor(u.last_refreshed_at) {
debug!("Fetching and updating from remote user: {}", apub_id);
let person = fetch_remote_object::<PersonExt>(&Url::parse(apub_id)?)?;
let mut uf = UserForm::from_apub(&person, &conn)?;
@@ -193,6 +189,20 @@ pub fn get_or_fetch_and_upsert_remote_user(
}
}
+/// Determines when a remote actor should be refetched from its instance. In release builds, this is
+/// ACTOR_REFETCH_INTERVAL_SECONDS after the last refetch, in debug builds always.
+///
+/// TODO it won't pick up new avatars, summaries etc until a day after.
+/// Actors need an "update" activity pushed to other servers to fix this.
+fn should_refetch_actor(last_refreshed: NaiveDateTime) -> bool {
+ if cfg!(debug_assertions) {
+ true
+ } else {
+ let update_interval = chrono::Duration::seconds(ACTOR_REFETCH_INTERVAL_SECONDS);
+ last_refreshed.lt(&(naive_now() - update_interval))
+ }
+}
+
/// Check if a remote community exists, create if not found, if its too old update it.Fetch a community, insert/update it in the database and return the community.
pub fn get_or_fetch_and_upsert_remote_community(
apub_id: &str,
@@ -200,12 +210,7 @@ pub fn get_or_fetch_and_upsert_remote_community(
) -> Result<Community, Error> {
match Community::read_from_actor_id(&conn, &apub_id) {
Ok(c) => {
- // If its older than a day, re-fetch it
- if !c.local
- && c
- .last_refreshed_at
- .lt(&(naive_now() - chrono::Duration::days(1)))
- {
+ if !c.local && should_refetch_actor(c.last_refreshed_at) {
debug!("Fetching and updating from remote community: {}", apub_id);
let group = fetch_remote_object::<GroupExt>(&Url::parse(apub_id)?)?;
let mut cf = CommunityForm::from_apub(&group, conn)?;