]> Untitled Git - lemmy.git/commitdiff
Fixing duplicate actor_id for community and user. Fixes #957
authorDessalines <tyhou13@gmx.com>
Sun, 19 Jul 2020 17:12:42 +0000 (13:12 -0400)
committerDessalines <tyhou13@gmx.com>
Sun, 19 Jul 2020 17:12:42 +0000 (13:12 -0400)
14 files changed:
server/lemmy_db/src/activity.rs
server/lemmy_db/src/comment.rs
server/lemmy_db/src/comment_view.rs
server/lemmy_db/src/community.rs
server/lemmy_db/src/moderator.rs
server/lemmy_db/src/password_reset_request.rs
server/lemmy_db/src/post.rs
server/lemmy_db/src/post_view.rs
server/lemmy_db/src/private_message.rs
server/lemmy_db/src/user.rs
server/lemmy_db/src/user_mention.rs
server/migrations/2020-07-18-234519_add_unique_community_user_actor_ids/down.sql [new file with mode: 0644]
server/migrations/2020-07-18-234519_add_unique_community_user_actor_ids/up.sql [new file with mode: 0644]
server/src/code_migrations.rs

index 83f85ca1eea9ae94593e3a16534df2a9e7e4a796..557eb9e9ef1e9ea45b8c6ac53640087a1f01504c 100644 (file)
@@ -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,
index acdddcc34485ab2284bd20aac24c235fb83ed557..dc369c8bc7d939884a229f48142a62ad6ddd0dc3 100644 (file)
@@ -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,
index 4af13c2d9012abed1f12d878fd56052eb20a0a2d..7f99ba4ade9b704eb863883a6db45e8260507244 100644 (file)
@@ -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,
index ef91eb849bd8f4636816db8154bd458531391971..e1f24391991f312771ab501ac7fddbf429149a5f 100644 (file)
@@ -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,
index f5d33d9672b9c04d228d7cb7813290d0f4dc7cda..0992197b1df80e4c13b555b3e00342001dcabda8 100644 (file)
@@ -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,
index a2692add863bdda3a3aac2fa3d5d8a61c0d400b0..2529ba67a989595761c52827ec6685d08c961893 100644 (file)
@@ -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,
index 12cf927e8a76a8e1a0176ab45e2161ed3d923dae..66e24773a6e1adbb600da6dd15f0d489aff6c1a2 100644 (file)
@@ -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,
index 3e9f8737676891d4cb5a07ce4c69a7379479c1ce..ffc8afebd1b47290890fde4e7cf066d4904f37af 100644 (file)
@@ -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,
index 1c0b455f3cbbd6584c943e4e009eaf8b9be05023..3492be2fc1fee233a7961bd5ad5714f347e98979 100644 (file)
@@ -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,
index 556fc1a75d52b5c6680f87bef52354b8fd751a62..718067f998570eb9e7d467f48ea8a23706d33633 100644 (file)
@@ -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,
index 9f23f4410c2434db011ba0e6e1aeb4c8d0f2bfba..5dc899b29ce8623016cb3adbdf1404b806ffb441 100644 (file)
@@ -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 (file)
index 0000000..7a4f2e2
--- /dev/null
@@ -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 (file)
index 0000000..bbf6b18
--- /dev/null
@@ -0,0 +1,48 @@
+-- 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)
+$$;
+
+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';
+
+-- Need to delete the possible community and user dupes for ones that don't start with the fake one
+-- TODO make sure this removes the later ids, not the first
+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;
+
+-- 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));
index b28e120a1ddb021efff7ac769cdae5f28bcf2fd6..7c85fefcbe4039148530dccf037028704e77ca33 100644 (file)
@@ -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::<User_>(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::<Community>(conn)?;