diff --git a/server/lemmy_db/src/activity.rs b/server/lemmy_db/src/activity.rs index 83f85ca1..557eb9e9 100644 --- a/server/lemmy_db/src/activity.rs +++ b/server/lemmy_db/src/activity.rs @@ -117,7 +117,7 @@ mod tests { lang: "browser".into(), show_avatars: true, send_notifications_to_email: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_862362".into(), bio: None, local: true, private_key: None, diff --git a/server/lemmy_db/src/comment.rs b/server/lemmy_db/src/comment.rs index acdddcc3..dc369c8b 100644 --- a/server/lemmy_db/src/comment.rs +++ b/server/lemmy_db/src/comment.rs @@ -233,7 +233,7 @@ mod tests { lang: "browser".into(), show_avatars: true, send_notifications_to_email: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_283687".into(), bio: None, local: true, private_key: None, @@ -253,7 +253,7 @@ mod tests { deleted: None, updated: None, nsfw: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_928738972".into(), local: true, private_key: None, public_key: None, diff --git a/server/lemmy_db/src/comment_view.rs b/server/lemmy_db/src/comment_view.rs index 4af13c2d..7f99ba4a 100644 --- a/server/lemmy_db/src/comment_view.rs +++ b/server/lemmy_db/src/comment_view.rs @@ -498,7 +498,7 @@ mod tests { lang: "browser".into(), show_avatars: true, send_notifications_to_email: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_92873982".into(), bio: None, local: true, private_key: None, @@ -518,7 +518,7 @@ mod tests { deleted: None, updated: None, nsfw: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_7625376".into(), local: true, private_key: None, public_key: None, diff --git a/server/lemmy_db/src/community.rs b/server/lemmy_db/src/community.rs index ef91eb84..e1f24391 100644 --- a/server/lemmy_db/src/community.rs +++ b/server/lemmy_db/src/community.rs @@ -258,7 +258,7 @@ mod tests { lang: "browser".into(), show_avatars: true, send_notifications_to_email: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_8266238".into(), bio: None, local: true, private_key: None, @@ -278,7 +278,7 @@ mod tests { removed: None, deleted: None, updated: None, - actor_id: "http://fake.com".into(), + actor_id: "changeme_7625376".into(), local: true, private_key: None, public_key: None, @@ -300,7 +300,7 @@ mod tests { deleted: false, published: inserted_community.published, updated: None, - actor_id: "http://fake.com".into(), + actor_id: inserted_community.actor_id.to_owned(), local: true, private_key: None, public_key: None, diff --git a/server/lemmy_db/src/moderator.rs b/server/lemmy_db/src/moderator.rs index f5d33d96..0992197b 100644 --- a/server/lemmy_db/src/moderator.rs +++ b/server/lemmy_db/src/moderator.rs @@ -470,7 +470,7 @@ mod tests { lang: "browser".into(), show_avatars: true, send_notifications_to_email: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_829398".into(), bio: None, local: true, private_key: None, @@ -497,7 +497,7 @@ mod tests { lang: "browser".into(), show_avatars: true, send_notifications_to_email: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_82982738".into(), bio: None, local: true, private_key: None, @@ -517,7 +517,7 @@ mod tests { deleted: None, updated: None, nsfw: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_283687".into(), local: true, private_key: None, public_key: None, diff --git a/server/lemmy_db/src/password_reset_request.rs b/server/lemmy_db/src/password_reset_request.rs index a2692add..2529ba67 100644 --- a/server/lemmy_db/src/password_reset_request.rs +++ b/server/lemmy_db/src/password_reset_request.rs @@ -105,7 +105,7 @@ mod tests { lang: "browser".into(), show_avatars: true, send_notifications_to_email: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_8292378".into(), bio: None, local: true, private_key: None, diff --git a/server/lemmy_db/src/post.rs b/server/lemmy_db/src/post.rs index 12cf927e..66e24773 100644 --- a/server/lemmy_db/src/post.rs +++ b/server/lemmy_db/src/post.rs @@ -279,7 +279,7 @@ mod tests { lang: "browser".into(), show_avatars: true, send_notifications_to_email: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_8292683678".into(), bio: None, local: true, private_key: None, @@ -299,7 +299,7 @@ mod tests { deleted: None, updated: None, nsfw: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_8223262378".into(), local: true, private_key: None, public_key: None, diff --git a/server/lemmy_db/src/post_view.rs b/server/lemmy_db/src/post_view.rs index 3e9f8737..ffc8afeb 100644 --- a/server/lemmy_db/src/post_view.rs +++ b/server/lemmy_db/src/post_view.rs @@ -415,7 +415,7 @@ mod tests { lang: "browser".into(), show_avatars: true, send_notifications_to_email: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_8282738268".into(), bio: None, local: true, private_key: None, @@ -435,7 +435,7 @@ mod tests { deleted: None, updated: None, nsfw: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_2763".into(), local: true, private_key: None, public_key: None, diff --git a/server/lemmy_db/src/private_message.rs b/server/lemmy_db/src/private_message.rs index 1c0b455f..3492be2f 100644 --- a/server/lemmy_db/src/private_message.rs +++ b/server/lemmy_db/src/private_message.rs @@ -113,7 +113,7 @@ mod tests { lang: "browser".into(), show_avatars: true, send_notifications_to_email: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_6723878".into(), bio: None, local: true, private_key: None, @@ -140,7 +140,7 @@ mod tests { lang: "browser".into(), show_avatars: true, send_notifications_to_email: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_287263876".into(), bio: None, local: true, private_key: None, diff --git a/server/lemmy_db/src/user.rs b/server/lemmy_db/src/user.rs index 556fc1a7..718067f9 100644 --- a/server/lemmy_db/src/user.rs +++ b/server/lemmy_db/src/user.rs @@ -166,7 +166,7 @@ mod tests { lang: "browser".into(), show_avatars: true, send_notifications_to_email: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_9826382637".into(), bio: None, local: true, private_key: None, @@ -195,7 +195,7 @@ mod tests { lang: "browser".into(), show_avatars: true, send_notifications_to_email: false, - actor_id: "http://fake.com".into(), + actor_id: inserted_user.actor_id.to_owned(), bio: None, local: true, private_key: None, diff --git a/server/lemmy_db/src/user_mention.rs b/server/lemmy_db/src/user_mention.rs index 9f23f441..5dc899b2 100644 --- a/server/lemmy_db/src/user_mention.rs +++ b/server/lemmy_db/src/user_mention.rs @@ -86,7 +86,7 @@ mod tests { lang: "browser".into(), show_avatars: true, send_notifications_to_email: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_628763".into(), bio: None, local: true, private_key: None, @@ -113,7 +113,7 @@ mod tests { lang: "browser".into(), show_avatars: true, send_notifications_to_email: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_927389278".into(), bio: None, local: true, private_key: None, @@ -133,7 +133,7 @@ mod tests { deleted: None, updated: None, nsfw: false, - actor_id: "http://fake.com".into(), + actor_id: "changeme_876238".into(), local: true, private_key: None, public_key: None, diff --git a/server/migrations/2020-07-18-234519_add_unique_community_user_actor_ids/down.sql b/server/migrations/2020-07-18-234519_add_unique_community_user_actor_ids/down.sql new file mode 100644 index 00000000..7a4f2e2f --- /dev/null +++ b/server/migrations/2020-07-18-234519_add_unique_community_user_actor_ids/down.sql @@ -0,0 +1,20 @@ + +alter table community alter column actor_id set not null; +alter table community alter column actor_id set default 'http://fake.com'; +alter table user_ alter column actor_id set not null; +alter table user_ alter column actor_id set default 'http://fake.com'; + +drop function generate_unique_changeme; + +update community +set actor_id = 'http://fake.com' +where actor_id like 'changeme_%'; + +update user_ +set actor_id = 'http://fake.com' +where actor_id like 'changeme_%'; + +drop index idx_user_lower_actor_id; +create unique index idx_user_name_lower_actor_id on user_ (lower(name), lower(actor_id)); + +drop index idx_community_lower_actor_id; diff --git a/server/migrations/2020-07-18-234519_add_unique_community_user_actor_ids/up.sql b/server/migrations/2020-07-18-234519_add_unique_community_user_actor_ids/up.sql new file mode 100644 index 00000000..e32ed5e0 --- /dev/null +++ b/server/migrations/2020-07-18-234519_add_unique_community_user_actor_ids/up.sql @@ -0,0 +1,50 @@ +-- Following this issue : https://github.com/LemmyNet/lemmy/issues/957 + +-- Creating a unique changeme actor_id +create or replace function generate_unique_changeme() +returns text language sql +as $$ + select 'changeme_' || string_agg (substr('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789', ceil (random() * 62)::integer, 1), '') + from generate_series(1, 20) +$$; + +-- Need to delete the possible community and user dupes for ones that don't start with the fake one +-- A few test inserts, to make sure this removes later dupes +-- insert into community (name, title, category_id, creator_id) values ('testcom', 'another testcom', 1, 2); +delete from community a using ( + select min(id) as id, actor_id + from community + group by actor_id having count(*) > 1 +) b +where a.actor_id = b.actor_id +and a.id <> b.id; + +delete from user_ a using ( + select min(id) as id, actor_id + from user_ + group by actor_id having count(*) > 1 +) b +where a.actor_id = b.actor_id +and a.id <> b.id; + +-- Replacing the current default on the columns, to the unique one +update community +set actor_id = generate_unique_changeme() +where actor_id = 'http://fake.com'; + +update user_ +set actor_id = generate_unique_changeme() +where actor_id = 'http://fake.com'; + +-- Add the unique indexes +alter table community alter column actor_id set not null; +alter table community alter column actor_id set default generate_unique_changeme(); + +alter table user_ alter column actor_id set not null; +alter table user_ alter column actor_id set default generate_unique_changeme(); + +-- Add lowercase uniqueness too +drop index idx_user_name_lower_actor_id; +create unique index idx_user_lower_actor_id on user_ (lower(actor_id)); + +create unique index idx_community_lower_actor_id on community (lower(actor_id)); diff --git a/server/src/apub/activities.rs b/server/src/apub/activities.rs index a436d30f..a14e6ec3 100644 --- a/server/src/apub/activities.rs +++ b/server/src/apub/activities.rs @@ -1,10 +1,14 @@ use crate::{ apub::{ - community::do_announce, extensions::signatures::sign, insert_activity, is_apub_id_valid, + community::do_announce, + extensions::signatures::sign, + insert_activity, + is_apub_id_valid, ActorType, }, request::retry_custom, - DbPool, LemmyError, + DbPool, + LemmyError, }; use activitystreams_new::base::AnyBase; use actix_web::client::Client; diff --git a/server/src/apub/comment.rs b/server/src/apub/comment.rs index 2a084015..774abba6 100644 --- a/server/src/apub/comment.rs +++ b/server/src/apub/comment.rs @@ -1,16 +1,25 @@ use crate::{ apub::{ activities::send_activity_to_community, - create_apub_response, create_apub_tombstone_response, create_tombstone, fetch_webfinger_url, + create_apub_response, + create_apub_tombstone_response, + create_tombstone, + fetch_webfinger_url, fetcher::{ - get_or_fetch_and_insert_remote_comment, get_or_fetch_and_insert_remote_post, + get_or_fetch_and_insert_remote_comment, + get_or_fetch_and_insert_remote_post, get_or_fetch_and_upsert_remote_user, }, - ActorType, ApubLikeableType, ApubObjectType, FromApub, ToApub, + ActorType, + ApubLikeableType, + ApubObjectType, + FromApub, + ToApub, }, blocking, routes::DbPoolParam, - DbPool, LemmyError, + DbPool, + LemmyError, }; use activitystreams_new::{ activity::{Create, Delete, Dislike, Like, Remove, Undo, Update}, diff --git a/server/src/apub/community.rs b/server/src/apub/community.rs index 0df2f3fd..f84e6508 100644 --- a/server/src/apub/community.rs +++ b/server/src/apub/community.rs @@ -1,13 +1,22 @@ use crate::{ apub::{ - activities::send_activity, create_apub_response, create_apub_tombstone_response, - create_tombstone, extensions::group_extensions::GroupExtension, - fetcher::get_or_fetch_and_upsert_remote_user, get_shared_inbox, insert_activity, ActorType, - FromApub, GroupExt, ToApub, + activities::send_activity, + create_apub_response, + create_apub_tombstone_response, + create_tombstone, + extensions::group_extensions::GroupExtension, + fetcher::get_or_fetch_and_upsert_remote_user, + get_shared_inbox, + insert_activity, + ActorType, + FromApub, + GroupExt, + ToApub, }, blocking, routes::DbPoolParam, - DbPool, LemmyError, + DbPool, + LemmyError, }; use activitystreams_ext::Ext2; use activitystreams_new::{ diff --git a/server/src/apub/community_inbox.rs b/server/src/apub/community_inbox.rs index 44a1c949..3b823674 100644 --- a/server/src/apub/community_inbox.rs +++ b/server/src/apub/community_inbox.rs @@ -2,7 +2,8 @@ use crate::{ apub::{ extensions::signatures::verify, fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user}, - insert_activity, ActorType, + insert_activity, + ActorType, }, blocking, routes::{ChatServerParam, DbPoolParam}, diff --git a/server/src/apub/fetcher.rs b/server/src/apub/fetcher.rs index 8779486b..d224b7cd 100644 --- a/server/src/apub/fetcher.rs +++ b/server/src/apub/fetcher.rs @@ -4,7 +4,8 @@ use crate::{ blocking, request::{retry, RecvError}, routes::nodeinfo::{NodeInfo, NodeInfoWellKnown}, - DbPool, LemmyError, + DbPool, + LemmyError, }; use activitystreams_new::{base::BaseExt, object::Note, prelude::*}; use actix_web::client::Client; @@ -20,7 +21,9 @@ use lemmy_db::{ post_view::PostView, user::{UserForm, User_}, user_view::UserView, - Crud, Joinable, SearchType, + Crud, + Joinable, + SearchType, }; use lemmy_utils::get_apub_protocol_string; use log::debug; diff --git a/server/src/apub/mod.rs b/server/src/apub/mod.rs index 3f61dc92..4e65d9e7 100644 --- a/server/src/apub/mod.rs +++ b/server/src/apub/mod.rs @@ -19,7 +19,8 @@ use crate::{ blocking, request::{retry, RecvError}, routes::webfinger::WebFingerResponse, - DbPool, LemmyError, + DbPool, + LemmyError, }; use activitystreams_ext::{Ext1, Ext2}; use activitystreams_new::{ diff --git a/server/src/apub/post.rs b/server/src/apub/post.rs index 039afe86..dc4ae249 100644 --- a/server/src/apub/post.rs +++ b/server/src/apub/post.rs @@ -1,14 +1,22 @@ use crate::{ apub::{ activities::send_activity_to_community, - create_apub_response, create_apub_tombstone_response, create_tombstone, + create_apub_response, + create_apub_tombstone_response, + create_tombstone, extensions::page_extension::PageExtension, fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user}, - ActorType, ApubLikeableType, ApubObjectType, FromApub, PageExt, ToApub, + ActorType, + ApubLikeableType, + ApubObjectType, + FromApub, + PageExt, + ToApub, }, blocking, routes::DbPoolParam, - DbPool, LemmyError, + DbPool, + LemmyError, }; use activitystreams_ext::Ext1; use activitystreams_new::{ diff --git a/server/src/apub/private_message.rs b/server/src/apub/private_message.rs index 17d5c09c..94cadeec 100644 --- a/server/src/apub/private_message.rs +++ b/server/src/apub/private_message.rs @@ -1,9 +1,16 @@ use crate::{ apub::{ - activities::send_activity, create_tombstone, fetcher::get_or_fetch_and_upsert_remote_user, - insert_activity, ApubObjectType, FromApub, ToApub, + activities::send_activity, + create_tombstone, + fetcher::get_or_fetch_and_upsert_remote_user, + insert_activity, + ApubObjectType, + FromApub, + ToApub, }, - blocking, DbPool, LemmyError, + blocking, + DbPool, + LemmyError, }; use activitystreams_new::{ activity::{Create, Delete, Undo, Update}, diff --git a/server/src/apub/shared_inbox.rs b/server/src/apub/shared_inbox.rs index 708cc0b2..8d6b255d 100644 --- a/server/src/apub/shared_inbox.rs +++ b/server/src/apub/shared_inbox.rs @@ -8,10 +8,16 @@ use crate::{ community::do_announce, extensions::signatures::verify, fetcher::{ - get_or_fetch_and_insert_remote_comment, get_or_fetch_and_insert_remote_post, - get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user, + get_or_fetch_and_insert_remote_comment, + get_or_fetch_and_insert_remote_post, + get_or_fetch_and_upsert_remote_community, + get_or_fetch_and_upsert_remote_user, }, - insert_activity, ActorType, FromApub, GroupExt, PageExt, + insert_activity, + ActorType, + FromApub, + GroupExt, + PageExt, }, blocking, routes::{ChatServerParam, DbPoolParam}, @@ -19,7 +25,8 @@ use crate::{ server::{SendComment, SendCommunityRoomMessage, SendPost}, UserOperation, }, - DbPool, LemmyError, + DbPool, + LemmyError, }; use activitystreams_new::{ activity::{ActorAndObjectRef, Announce, Create, Delete, Dislike, Like, Remove, Undo, Update}, @@ -38,7 +45,8 @@ use lemmy_db::{ post::{Post, PostForm, PostLike, PostLikeForm}, post_view::PostView, user::User_, - Crud, Likeable, + Crud, + Likeable, }; use lemmy_utils::scrape_text_for_mentions; use log::debug; diff --git a/server/src/apub/user.rs b/server/src/apub/user.rs index 4ebfe77b..2a98670c 100644 --- a/server/src/apub/user.rs +++ b/server/src/apub/user.rs @@ -1,12 +1,18 @@ use crate::{ api::claims::Claims, apub::{ - activities::send_activity, create_apub_response, insert_activity, ActorType, FromApub, - PersonExt, ToApub, + activities::send_activity, + create_apub_response, + insert_activity, + ActorType, + FromApub, + PersonExt, + ToApub, }, blocking, routes::DbPoolParam, - DbPool, LemmyError, + DbPool, + LemmyError, }; use activitystreams_ext::Ext1; use activitystreams_new::{ diff --git a/server/src/apub/user_inbox.rs b/server/src/apub/user_inbox.rs index 73916ee2..7b589b28 100644 --- a/server/src/apub/user_inbox.rs +++ b/server/src/apub/user_inbox.rs @@ -3,12 +3,14 @@ use crate::{ apub::{ extensions::signatures::verify, fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user}, - insert_activity, FromApub, + insert_activity, + FromApub, }, blocking, routes::{ChatServerParam, DbPoolParam}, websocket::{server::SendUserRoomMessage, UserOperation}, - DbPool, LemmyError, + DbPool, + LemmyError, }; use activitystreams_new::{ activity::{Accept, Create, Delete, Undo, Update}, @@ -22,7 +24,8 @@ use lemmy_db::{ private_message::{PrivateMessage, PrivateMessageForm}, private_message_view::PrivateMessageView, user::User_, - Crud, Followable, + Crud, + Followable, }; use log::debug; use serde::Deserialize; diff --git a/server/src/code_migrations.rs b/server/src/code_migrations.rs index b28e120a..7c85fefc 100644 --- a/server/src/code_migrations.rs +++ b/server/src/code_migrations.rs @@ -30,7 +30,7 @@ fn user_updates_2020_04_02(conn: &PgConnection) -> Result<(), LemmyError> { // Update the actor_id, private_key, and public_key, last_refreshed_at let incorrect_users = user_ - .filter(actor_id.eq("http://fake.com")) + .filter(actor_id.like("changeme_%")) .filter(local.eq(true)) .load::(conn)?; @@ -81,7 +81,7 @@ fn community_updates_2020_04_02(conn: &PgConnection) -> Result<(), LemmyError> { // Update the actor_id, private_key, and public_key, last_refreshed_at let incorrect_communities = community - .filter(actor_id.eq("http://fake.com")) + .filter(actor_id.like("changeme_%")) .filter(local.eq(true)) .load::(conn)?; diff --git a/ui/src/components/post-form.tsx b/ui/src/components/post-form.tsx index f94f902f..6656ef84 100644 --- a/ui/src/components/post-form.tsx +++ b/ui/src/components/post-form.tsx @@ -151,7 +151,7 @@ export class PostForm extends Component { componentWillUnmount() { this.subscription.unsubscribe(); - this.choices && this.choices.destroy(); + /* this.choices && this.choices.destroy(); */ window.onbeforeunload = null; }