proxy support

This commit is contained in:
Aiden McClelland
2021-01-11 13:27:52 -07:00
parent 615a5fe346
commit 24aac22b89
63 changed files with 23942 additions and 21669 deletions
+2 -1
View File
@@ -8,6 +8,7 @@ use plume_common::{activity_pub::broadcast, utils::md_to_html};
use plume_models::{
blogs::Blog, db_conn::DbConn, instance::Instance, medias::Media, mentions::*, post_authors::*,
posts::*, safe_string::SafeString, tags::*, timeline::*, users::User, Error, PlumeRocket,
CONFIG,
};
#[get("/posts/<id>")]
@@ -201,7 +202,7 @@ pub fn create(
let act = post.create_activity(&*conn)?;
let dest = User::one_by_instance(&*conn)?;
worker.execute(move || broadcast(&author, act, dest));
worker.execute(move || broadcast(&author, act, dest, CONFIG.proxy().cloned()));
}
Timeline::add_to_all_timelines(&rockets, &post, Kind::Original)?;
+3 -3
View File
@@ -4,7 +4,7 @@ use plume_common::activity_pub::{
sign::{verify_http_headers, Signable},
};
use plume_models::{
headers::Headers, inbox::inbox, instance::Instance, users::User, Error, PlumeRocket,
headers::Headers, inbox::inbox, instance::Instance, users::User, Error, PlumeRocket, CONFIG,
};
use rocket::{data::*, http::Status, response::status, Outcome::*, Request};
use rocket_contrib::json::*;
@@ -27,8 +27,8 @@ pub fn handle_incoming(
.or_else(|| activity["actor"]["id"].as_str())
.ok_or(status::BadRequest(Some("Missing actor id for activity")))?;
let actor =
User::from_id(&rockets, actor_id, None).expect("instance::shared_inbox: user error");
let actor = User::from_id(&rockets, actor_id, None, CONFIG.proxy())
.expect("instance::shared_inbox: user error");
if !verify_http_headers(&actor, &headers.0, &sig).is_secure() && !act.clone().verify(&actor) {
// maybe we just know an old key?
actor
+7 -7
View File
@@ -16,7 +16,7 @@ use plume_common::{
};
use plume_models::{
blogs::Blog, comments::*, inbox::inbox, instance::Instance, medias::Media, mentions::Mention,
posts::Post, safe_string::SafeString, tags::Tag, users::User, Error, PlumeRocket,
posts::Post, safe_string::SafeString, tags::Tag, users::User, Error, PlumeRocket, CONFIG,
};
#[derive(Default, FromForm, Debug, Validate)]
@@ -86,9 +86,9 @@ pub fn create(
// federate
let dest = User::one_by_instance(&*conn).expect("comments::create: dest error");
let user_clone = user.clone();
rockets
.worker
.execute(move || broadcast(&user_clone, new_comment, dest));
rockets.worker.execute(move || {
broadcast(&user_clone, new_comment, dest, CONFIG.proxy().cloned())
});
Flash::success(
Redirect::to(
@@ -155,9 +155,9 @@ pub fn delete(
)?;
let user_c = user.clone();
rockets
.worker
.execute(move || broadcast(&user_c, delete_activity, dest));
rockets.worker.execute(move || {
broadcast(&user_c, delete_activity, dest, CONFIG.proxy().cloned())
});
let conn = rockets.conn;
rockets
.worker
+3 -3
View File
@@ -387,7 +387,7 @@ fn ban(
.unwrap();
let target = User::one_by_instance(&*conn)?;
let delete_act = u.delete_activity(&*conn)?;
worker.execute(move || broadcast(&u, delete_act, target));
worker.execute(move || broadcast(&u, delete_act, target, CONFIG.proxy().cloned()));
}
Ok(())
@@ -408,13 +408,13 @@ pub fn interact(rockets: PlumeRocket, user: Option<User>, target: String) -> Opt
return Some(Redirect::to(uri!(super::user::details: name = target)));
}
if let Ok(post) = Post::from_id(&rockets, &target, None) {
if let Ok(post) = Post::from_id(&rockets, &target, None, CONFIG.proxy()) {
return Some(Redirect::to(
uri!(super::posts::details: blog = post.get_blog(&rockets.conn).expect("Can't retrieve blog").fqn, slug = &post.slug, responding_to = _),
));
}
if let Ok(comment) = Comment::from_id(&rockets, &target, None) {
if let Ok(comment) = Comment::from_id(&rockets, &target, None, CONFIG.proxy()) {
if comment.can_see(&rockets.conn, user.as_ref()) {
let post = comment
.get_post(&rockets.conn)
+5 -2
View File
@@ -6,6 +6,7 @@ use plume_common::activity_pub::broadcast;
use plume_common::utils;
use plume_models::{
blogs::Blog, inbox::inbox, likes, posts::Post, timeline::*, users::User, Error, PlumeRocket,
CONFIG,
};
#[post("/~/<blog>/<slug>/like")]
@@ -27,7 +28,9 @@ pub fn create(
let dest = User::one_by_instance(&*conn)?;
let act = like.to_activity(&*conn)?;
rockets.worker.execute(move || broadcast(&user, act, dest));
rockets
.worker
.execute(move || broadcast(&user, act, dest, CONFIG.proxy().cloned()));
} else {
let like = likes::Like::find_by_user_on_post(&*conn, user.id, post.id)?;
let delete_act = like.build_undo(&*conn)?;
@@ -39,7 +42,7 @@ pub fn create(
let dest = User::one_by_instance(&*conn)?;
rockets
.worker
.execute(move || broadcast(&user, delete_act, dest));
.execute(move || broadcast(&user, delete_act, dest, CONFIG.proxy().cloned()));
}
Ok(Redirect::to(
+9 -5
View File
@@ -30,7 +30,7 @@ use plume_models::{
tags::*,
timeline::*,
users::User,
Error, PlumeRocket,
Error, PlumeRocket, CONFIG,
};
#[get("/~/<blog>/<slug>?<responding_to>", rank = 4)]
@@ -339,7 +339,9 @@ pub fn update(
.create_activity(&conn)
.expect("post::update: act error");
let dest = User::one_by_instance(&*conn).expect("post::update: dest error");
rockets.worker.execute(move || broadcast(&user, act, dest));
rockets
.worker
.execute(move || broadcast(&user, act, dest, CONFIG.proxy().cloned()));
Timeline::add_to_all_timelines(&rockets, &post, Kind::Original).ok();
} else {
@@ -347,7 +349,9 @@ pub fn update(
.update_activity(&*conn)
.expect("post::update: act error");
let dest = User::one_by_instance(&*conn).expect("posts::update: dest error");
rockets.worker.execute(move || broadcast(&user, act, dest));
rockets
.worker
.execute(move || broadcast(&user, act, dest, CONFIG.proxy().cloned()));
}
}
@@ -533,7 +537,7 @@ pub fn create(
.expect("posts::create: activity error");
let dest = User::one_by_instance(&*conn).expect("posts::create: dest error");
let worker = &rockets.worker;
worker.execute(move || broadcast(&user, act, dest));
worker.execute(move || broadcast(&user, act, dest, CONFIG.proxy().cloned()));
Timeline::add_to_all_timelines(&rockets, &post, Kind::Original)?;
}
@@ -594,7 +598,7 @@ pub fn delete(
let user_c = user.clone();
rockets
.worker
.execute(move || broadcast(&user_c, delete_activity, dest));
.execute(move || broadcast(&user_c, delete_activity, dest, CONFIG.proxy().cloned()));
let conn = rockets.conn;
rockets
.worker
+5 -3
View File
@@ -6,7 +6,7 @@ use plume_common::activity_pub::broadcast;
use plume_common::utils;
use plume_models::{
blogs::Blog, inbox::inbox, posts::Post, reshares::*, timeline::*, users::User, Error,
PlumeRocket,
PlumeRocket, CONFIG,
};
#[post("/~/<blog>/<slug>/reshare")]
@@ -28,7 +28,9 @@ pub fn create(
let dest = User::one_by_instance(&*conn)?;
let act = reshare.to_activity(&*conn)?;
rockets.worker.execute(move || broadcast(&user, act, dest));
rockets
.worker
.execute(move || broadcast(&user, act, dest, CONFIG.proxy().cloned()));
} else {
let reshare = Reshare::find_by_user_on_post(&*conn, user.id, post.id)?;
let delete_act = reshare.build_undo(&*conn)?;
@@ -40,7 +42,7 @@ pub fn create(
let dest = User::one_by_instance(&*conn)?;
rockets
.worker
.execute(move || broadcast(&user, delete_act, dest));
.execute(move || broadcast(&user, delete_act, dest, CONFIG.proxy().cloned()));
}
Ok(Redirect::to(
+7 -6
View File
@@ -31,7 +31,7 @@ use plume_models::{
reshares::Reshare,
safe_string::SafeString,
users::*,
Error, PlumeRocket,
Error, PlumeRocket, CONFIG,
};
#[get("/me")]
@@ -82,8 +82,9 @@ pub fn details(
.fetch_followers_ids()
.expect("Remote user: fetching followers error")
{
let follower = User::from_id(&fetch_followers_rockets, &user_id, None)
.expect("user::details: Couldn't fetch follower");
let follower =
User::from_id(&fetch_followers_rockets, &user_id, None, CONFIG.proxy())
.expect("user::details: Couldn't fetch follower");
follows::Follow::insert(
&*fetch_followers_rockets.conn,
follows::NewFollow {
@@ -164,7 +165,7 @@ pub fn follow(
let msg = i18n!(rockets.intl.catalog, "You are no longer following {}."; target.name());
rockets
.worker
.execute(move || broadcast(&user, delete_act, vec![target]));
.execute(move || broadcast(&user, delete_act, vec![target], CONFIG.proxy().cloned()));
msg
} else {
let f = follows::Follow::insert(
@@ -181,7 +182,7 @@ pub fn follow(
let msg = i18n!(rockets.intl.catalog, "You are now following {}."; target.name());
rockets
.worker
.execute(move || broadcast(&user, act, vec![target]));
.execute(move || broadcast(&user, act, vec![target], CONFIG.proxy().cloned()));
msg
};
Ok(Flash::success(
@@ -426,7 +427,7 @@ pub fn delete(
let delete_act = account.delete_activity(&*rockets.conn)?;
rockets
.worker
.execute(move || broadcast(&account, delete_act, target));
.execute(move || broadcast(&account, delete_act, target, CONFIG.proxy().cloned()));
if let Some(cookie) = cookies.get_private(AUTH_COOKIE) {
cookies.remove_private(cookie);