Don't send activities to ourselves
This commit is contained in:
parent
9434987c67
commit
ecd3061d82
3 changed files with 26 additions and 8 deletions
|
@ -219,6 +219,13 @@ where
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Don't send anything to ourselves
|
||||||
|
let hostname = Settings::get().get_hostname_without_port()?;
|
||||||
|
let inboxes: Vec<&Url> = inboxes
|
||||||
|
.iter()
|
||||||
|
.filter(|i| i.domain().unwrap() != hostname)
|
||||||
|
.collect();
|
||||||
|
|
||||||
let activity = activity.into_any_base()?;
|
let activity = activity.into_any_base()?;
|
||||||
let serialised_activity = serde_json::to_string(&activity)?;
|
let serialised_activity = serde_json::to_string(&activity)?;
|
||||||
|
|
||||||
|
@ -232,7 +239,7 @@ where
|
||||||
for i in inboxes {
|
for i in inboxes {
|
||||||
let message = SendActivityTask {
|
let message = SendActivityTask {
|
||||||
activity: serialised_activity.to_owned(),
|
activity: serialised_activity.to_owned(),
|
||||||
inbox: i,
|
inbox: i.to_owned(),
|
||||||
actor_id: actor.actor_id()?,
|
actor_id: actor.actor_id()?,
|
||||||
private_key: actor.private_key().context(location_info!())?,
|
private_key: actor.private_key().context(location_info!())?,
|
||||||
};
|
};
|
||||||
|
|
|
@ -61,13 +61,7 @@ pub static APUB_JSON_CONTENT_TYPE: &str = "application/activity+json";
|
||||||
fn check_is_apub_id_valid(apub_id: &Url) -> Result<(), LemmyError> {
|
fn check_is_apub_id_valid(apub_id: &Url) -> Result<(), LemmyError> {
|
||||||
let settings = Settings::get();
|
let settings = Settings::get();
|
||||||
let domain = apub_id.domain().context(location_info!())?.to_string();
|
let domain = apub_id.domain().context(location_info!())?.to_string();
|
||||||
let local_instance = settings
|
let local_instance = settings.get_hostname_without_port()?;
|
||||||
.hostname
|
|
||||||
.split(':')
|
|
||||||
.collect::<Vec<&str>>()
|
|
||||||
.first()
|
|
||||||
.context(location_info!())?
|
|
||||||
.to_string();
|
|
||||||
|
|
||||||
if !settings.federation.enabled {
|
if !settings.federation.enabled {
|
||||||
return if domain == local_instance {
|
return if domain == local_instance {
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
use crate::location_info;
|
||||||
|
use anyhow::Context;
|
||||||
use config::{Config, ConfigError, Environment, File};
|
use config::{Config, ConfigError, Environment, File};
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use std::{env, fs, io::Error, net::IpAddr, path::PathBuf, sync::RwLock};
|
use std::{env, fs, io::Error, net::IpAddr, path::PathBuf, sync::RwLock};
|
||||||
|
@ -178,6 +180,21 @@ impl Settings {
|
||||||
format!("{}://{}", self.get_protocol_string(), self.hostname)
|
format!("{}://{}", self.get_protocol_string(), self.hostname)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// When running the federation test setup in `api_tests/` or `docker/federation`, the `hostname`
|
||||||
|
/// variable will be like `lemmy-alpha:8541`. This method removes the port and returns
|
||||||
|
/// `lemmy-alpha` instead. It has no effect in production.
|
||||||
|
pub fn get_hostname_without_port(&self) -> Result<String, anyhow::Error> {
|
||||||
|
Ok(
|
||||||
|
self
|
||||||
|
.hostname
|
||||||
|
.split(':')
|
||||||
|
.collect::<Vec<&str>>()
|
||||||
|
.first()
|
||||||
|
.context(location_info!())?
|
||||||
|
.to_string(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn save_config_file(data: &str) -> Result<String, Error> {
|
pub fn save_config_file(data: &str) -> Result<String, Error> {
|
||||||
fs::write(CONFIG_FILE, data)?;
|
fs::write(CONFIG_FILE, data)?;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue