]> Untitled Git - lemmy.git/commitdiff
Moving admin to person table. Fixes #1515
authorDessalines <tyhou13@gmx.com>
Mon, 22 Mar 2021 14:28:00 +0000 (10:28 -0400)
committerDessalines <tyhou13@gmx.com>
Mon, 22 Mar 2021 14:28:00 +0000 (10:28 -0400)
13 files changed:
crates/api/src/lib.rs
crates/api/src/local_user.rs
crates/apub/src/objects/person.rs
crates/db_queries/src/source/local_user.rs
crates/db_queries/src/source/person.rs
crates/db_schema/src/schema.rs
crates/db_schema/src/source/local_user.rs
crates/db_schema/src/source/person.rs
crates/db_views/src/comment_view.rs
crates/db_views/src/post_view.rs
crates/db_views_actor/src/person_view.rs
migrations/2021-03-20-185321_move_matrix_id_to_person/down.sql
migrations/2021-03-20-185321_move_matrix_id_to_person/up.sql

index fc258d6a19c8b367fda557911ebbc5d6bf45e618..dacf46f2ba707109594180fab7df9dfce2db5edf 100644 (file)
@@ -79,7 +79,7 @@ pub(crate) async fn is_mod_or_admin(
 }
 
 pub fn is_admin(local_user_view: &LocalUserView) -> Result<(), LemmyError> {
-  if !local_user_view.local_user.admin {
+  if !local_user_view.person.admin {
     return Err(ApiError::err("not_an_admin").into());
   }
   Ok(())
index f7072b6e6498d78069879ac0585df20bb4925dc1..5fbbdeec4561d3f25269c7832a745afb9bad355c 100644 (file)
@@ -204,6 +204,7 @@ impl Perform for Register {
       public_key: Some(Some(actor_keypair.public_key)),
       inbox_url: Some(generate_inbox_url(&actor_id)?),
       shared_inbox_url: Some(Some(generate_shared_inbox_url(&actor_id)?)),
+      admin: Some(no_admins),
       ..PersonForm::default()
     };
 
@@ -224,7 +225,6 @@ impl Perform for Register {
       person_id: inserted_person.id,
       email: Some(data.email.to_owned()),
       password_encrypted: data.password.to_owned(),
-      admin: Some(no_admins),
       show_nsfw: Some(data.show_nsfw),
       theme: Some("browser".into()),
       default_sort_type: Some(SortType::Active as i16),
@@ -455,6 +455,7 @@ impl Perform for SaveUserSettings {
       actor_id: None,
       bio,
       local: None,
+      admin: None,
       private_key: None,
       public_key: None,
       last_refreshed_at: None,
@@ -477,7 +478,6 @@ impl Perform for SaveUserSettings {
       person_id,
       email,
       password_encrypted,
-      admin: None,
       show_nsfw: data.show_nsfw,
       theme: data.theme.to_owned(),
       default_sort_type,
@@ -638,7 +638,7 @@ impl Perform for AddAdmin {
     let added = data.added;
     let added_person_id = data.person_id;
     let added_admin = match blocking(context.pool(), move |conn| {
-      LocalUser::add_admin(conn, added_person_id, added)
+      Person::add_admin(conn, added_person_id, added)
     })
     .await?
     {
@@ -651,7 +651,7 @@ impl Perform for AddAdmin {
     // Mod tables
     let form = ModAddForm {
       mod_person_id: local_user_view.person.id,
-      other_person_id: added_admin.person_id,
+      other_person_id: added_admin.id,
       removed: Some(!data.added),
     };
 
index d1eb67071ef9bad9fa38351fdb3dce223dbabb92..c8e3a35017dc148b1ac1be70097bb85922c62bc6 100644 (file)
@@ -182,6 +182,7 @@ impl FromApubToForm<PersonExt> for PersonForm {
       actor_id: Some(check_object_domain(person, expected_domain)?),
       bio: Some(bio),
       local: Some(false),
+      admin: Some(false),
       private_key: None,
       public_key: Some(Some(person.ext_one.public_key.to_owned().public_key_pem)),
       last_refreshed_at: Some(naive_now()),
index 7e84011b4ef9e52e4954a5804c265eeb58b5bd0d..18720ceba3c0a95469955558a9d271817c5e86d7 100644 (file)
@@ -6,7 +6,6 @@ use lemmy_db_schema::{
   schema::local_user::dsl::*,
   source::local_user::{LocalUser, LocalUserForm},
   LocalUserId,
-  PersonId,
 };
 
 mod safe_settings_type {
@@ -17,7 +16,6 @@ mod safe_settings_type {
     id,
     person_id,
     email,
-    admin,
     show_nsfw,
     theme,
     default_sort_type,
@@ -37,7 +35,6 @@ mod safe_settings_type {
         id,
         person_id,
         email,
-        admin,
         show_nsfw,
         theme,
         default_sort_type,
@@ -58,7 +55,6 @@ pub trait LocalUser_ {
     local_user_id: LocalUserId,
     new_password: &str,
   ) -> Result<LocalUser, Error>;
-  fn add_admin(conn: &PgConnection, person_id: PersonId, added: bool) -> Result<LocalUser, Error>;
 }
 
 impl LocalUser_ for LocalUser {
@@ -85,12 +81,6 @@ impl LocalUser_ for LocalUser {
       ))
       .get_result::<Self>(conn)
   }
-
-  fn add_admin(conn: &PgConnection, for_person_id: PersonId, added: bool) -> Result<Self, Error> {
-    diesel::update(local_user.filter(person_id.eq(for_person_id)))
-      .set(admin.eq(added))
-      .get_result::<Self>(conn)
-  }
 }
 
 impl Crud<LocalUserForm, LocalUserId> for LocalUser {
index 6d5ad9b4d34581a46e29ee589b373504cfcc1ebe..35ed540c0fc4f51846cbc8f3d5937707c5d5df93 100644 (file)
@@ -28,6 +28,7 @@ mod safe_type {
     inbox_url,
     shared_inbox_url,
     matrix_user_id,
+    admin,
   );
 
   impl ToSafe for Person {
@@ -49,6 +50,7 @@ mod safe_type {
         inbox_url,
         shared_inbox_url,
         matrix_user_id,
+        admin,
       )
     }
   }
@@ -74,6 +76,7 @@ mod safe_type_alias_1 {
     inbox_url,
     shared_inbox_url,
     matrix_user_id,
+    admin,
   );
 
   impl ToSafe for PersonAlias1 {
@@ -95,6 +98,7 @@ mod safe_type_alias_1 {
         inbox_url,
         shared_inbox_url,
         matrix_user_id,
+        admin,
       )
     }
   }
@@ -120,6 +124,7 @@ mod safe_type_alias_2 {
     inbox_url,
     shared_inbox_url,
     matrix_user_id,
+    admin,
   );
 
   impl ToSafe for PersonAlias2 {
@@ -141,6 +146,7 @@ mod safe_type_alias_2 {
         inbox_url,
         shared_inbox_url,
         matrix_user_id,
+        admin,
       )
     }
   }
@@ -187,6 +193,7 @@ impl ApubObject<PersonForm> for Person {
 
 pub trait Person_ {
   fn ban_person(conn: &PgConnection, person_id: PersonId, ban: bool) -> Result<Person, Error>;
+  fn add_admin(conn: &PgConnection, person_id: PersonId, added: bool) -> Result<Person, Error>;
   fn find_by_name(conn: &PgConnection, name: &str) -> Result<Person, Error>;
   fn mark_as_updated(conn: &PgConnection, person_id: PersonId) -> Result<Person, Error>;
   fn delete_account(conn: &PgConnection, person_id: PersonId) -> Result<Person, Error>;
@@ -199,6 +206,12 @@ impl Person_ for Person {
       .get_result::<Self>(conn)
   }
 
+  fn add_admin(conn: &PgConnection, person_id: PersonId, added: bool) -> Result<Self, Error> {
+    diesel::update(person.find(person_id))
+      .set(admin.eq(added))
+      .get_result::<Self>(conn)
+  }
+
   fn find_by_name(conn: &PgConnection, from_name: &str) -> Result<Person, Error> {
     person
       .filter(deleted.eq(false))
@@ -261,6 +274,7 @@ mod tests {
       actor_id: inserted_person.actor_id.to_owned(),
       bio: None,
       local: true,
+      admin: false,
       private_key: None,
       public_key: None,
       last_refreshed_at: inserted_person.published,
index 4c990ec030af5f2a0a4c81c418fb91c170a50a0f..5bc55f529bc6a63fb620d545e93c4640959990c8 100644 (file)
@@ -146,7 +146,6 @@ table! {
         person_id -> Int4,
         password_encrypted -> Text,
         email -> Nullable<Text>,
-        admin -> Bool,
         show_nsfw -> Bool,
         theme -> Varchar,
         default_sort_type -> Int2,
@@ -287,6 +286,7 @@ table! {
         inbox_url -> Varchar,
         shared_inbox_url -> Nullable<Varchar>,
         matrix_user_id -> Nullable<Text>,
+        admin -> Bool,
     }
 }
 
@@ -486,6 +486,7 @@ table! {
         inbox_url -> Varchar,
         shared_inbox_url -> Nullable<Varchar>,
         matrix_user_id -> Nullable<Text>,
+        admin -> Bool,
     }
 }
 
@@ -509,6 +510,7 @@ table! {
         inbox_url -> Varchar,
         shared_inbox_url -> Nullable<Varchar>,
         matrix_user_id -> Nullable<Text>,
+        admin -> Bool,
     }
 }
 
index 2f4a9fc2b40f24f538ed59af2262aac9d6935616..6f28a8fbcdba6e4e1c44d0f1696ec0684291aaa7 100644 (file)
@@ -8,7 +8,6 @@ pub struct LocalUser {
   pub person_id: PersonId,
   pub password_encrypted: String,
   pub email: Option<String>,
-  pub admin: bool,
   pub show_nsfw: bool,
   pub theme: String,
   pub default_sort_type: i16,
@@ -26,7 +25,6 @@ pub struct LocalUserForm {
   pub person_id: PersonId,
   pub password_encrypted: String,
   pub email: Option<Option<String>>,
-  pub admin: Option<bool>,
   pub show_nsfw: Option<bool>,
   pub theme: Option<String>,
   pub default_sort_type: Option<i16>,
@@ -43,7 +41,6 @@ pub struct LocalUserSettings {
   pub id: LocalUserId,
   pub person_id: PersonId,
   pub email: Option<String>,
-  pub admin: bool,
   pub show_nsfw: bool,
   pub theme: String,
   pub default_sort_type: i16,
index f5f10ac46284be4b50ce94dc85fd31b4da1b715f..2c0e7e8b790238b7c5a6c4b9fa6c45576b44da24 100644 (file)
@@ -26,6 +26,7 @@ pub struct Person {
   pub inbox_url: DbUrl,
   pub shared_inbox_url: Option<DbUrl>,
   pub matrix_user_id: Option<String>,
+  pub admin: bool,
 }
 
 /// A safe representation of person, without the sensitive info
@@ -47,6 +48,7 @@ pub struct PersonSafe {
   pub inbox_url: DbUrl,
   pub shared_inbox_url: Option<DbUrl>,
   pub matrix_user_id: Option<String>,
+  pub admin: bool,
 }
 
 #[derive(Clone, Queryable, Identifiable, PartialEq, Debug, Serialize)]
@@ -70,6 +72,7 @@ pub struct PersonAlias1 {
   pub inbox_url: DbUrl,
   pub shared_inbox_url: Option<DbUrl>,
   pub matrix_user_id: Option<String>,
+  pub admin: bool,
 }
 
 #[derive(Clone, Queryable, Identifiable, PartialEq, Debug, Serialize)]
@@ -90,6 +93,7 @@ pub struct PersonSafeAlias1 {
   pub inbox_url: DbUrl,
   pub shared_inbox_url: Option<DbUrl>,
   pub matrix_user_id: Option<String>,
+  pub admin: bool,
 }
 
 #[derive(Clone, Queryable, Identifiable, PartialEq, Debug, Serialize)]
@@ -113,6 +117,7 @@ pub struct PersonAlias2 {
   pub inbox_url: DbUrl,
   pub shared_inbox_url: Option<DbUrl>,
   pub matrix_user_id: Option<String>,
+  pub admin: bool,
 }
 
 #[derive(Clone, Queryable, Identifiable, PartialEq, Debug, Serialize)]
@@ -133,6 +138,7 @@ pub struct PersonSafeAlias2 {
   pub inbox_url: DbUrl,
   pub shared_inbox_url: Option<DbUrl>,
   pub matrix_user_id: Option<String>,
+  pub admin: bool,
 }
 
 #[derive(Insertable, AsChangeset, Clone, Default)]
@@ -155,4 +161,5 @@ pub struct PersonForm {
   pub inbox_url: Option<DbUrl>,
   pub shared_inbox_url: Option<Option<DbUrl>>,
   pub matrix_user_id: Option<Option<String>>,
+  pub admin: Option<bool>,
 }
index e44ddfef3043789a18299c788918a5db30fe97e5..6b13103c0eb19b06f7db3c165b6ac389fcedcecc 100644 (file)
@@ -526,6 +526,7 @@ mod tests {
         local: true,
         banned: false,
         deleted: false,
+        admin: false,
         bio: None,
         banner: None,
         updated: None,
index 8e305b486a671a1cd9f37aaf9fe7dd9a05dfde62..df67d36933376becf7cfad72d85b9dc77887898f 100644 (file)
@@ -546,6 +546,7 @@ mod tests {
         avatar: None,
         actor_id: inserted_person.actor_id.to_owned(),
         local: true,
+        admin: false,
         banned: false,
         deleted: false,
         bio: None,
index a44a468c40fc42df6bb0537e70ffc97641bf5413..8e292c3fcaf045ec02c8d69750e2f33a801a0d64 100644 (file)
@@ -9,7 +9,7 @@ use lemmy_db_queries::{
   ViewToVec,
 };
 use lemmy_db_schema::{
-  schema::{local_user, person, person_aggregates},
+  schema::{person, person_aggregates},
   source::person::{Person, PersonSafe},
   PersonId,
 };
@@ -36,9 +36,8 @@ impl PersonViewSafe {
   pub fn admins(conn: &PgConnection) -> Result<Vec<Self>, Error> {
     let admins = person::table
       .inner_join(person_aggregates::table)
-      .inner_join(local_user::table)
       .select((Person::safe_columns_tuple(), person_aggregates::all_columns))
-      .filter(local_user::admin.eq(true))
+      .filter(person::admin.eq(true))
       .order_by(person::published)
       .load::<PersonViewSafeTuple>(conn)?;
 
index 70cbe9bfa5f1514674a97a3ec99348c2889773d7..990d8fe97777435a8ed4ae050843d49b875aa66a 100644 (file)
@@ -1,12 +1,16 @@
 alter table local_user add column matrix_user_id text;
+alter table local_user add column admin boolean default false not null;
 
 update local_user lu
-set matrix_user_id = p.matrix_user_id 
+set 
+  matrix_user_id = p.matrix_user_id,
+  admin = p.admin
 from person p
 where p.id = lu.person_id;
 
 drop view person_alias_1, person_alias_2;
 alter table person drop column matrix_user_id;
+alter table person drop column admin;
 
 -- Regenerate the person_alias views
 create view person_alias_1 as select * from person;
index 92f20c6cb9ba539127d6daad75ae17d8752e8ec8..d9ba3dd9c2097abae78c5fbd6df58909c653f3c6 100644 (file)
@@ -1,11 +1,15 @@
 alter table person add column matrix_user_id text;
+alter table person add column admin boolean default false not null;
 
 update person p
-set matrix_user_id = lu.matrix_user_id 
+set 
+  matrix_user_id = lu.matrix_user_id,
+  admin = lu.admin
 from local_user lu
 where p.id = lu.person_id;
 
 alter table local_user drop column matrix_user_id;
+alter table local_user drop column admin;
 
 -- Regenerate the person_alias views
 drop view person_alias_1, person_alias_2;