]> Untitled Git - lemmy.git/commitdiff
Adding a banned endpoint for admins. Removing it from GetSite. Fixes #1806
authorDessalines <tyhou13@gmx.com>
Fri, 19 Nov 2021 20:56:41 +0000 (15:56 -0500)
committerDessalines <tyhou13@gmx.com>
Tue, 4 Jan 2022 14:50:30 +0000 (09:50 -0500)
crates/api/src/lib.rs
crates/api/src/local_user.rs
crates/api/src/site.rs
crates/api_common/src/person.rs
crates/api_common/src/site.rs
crates/api_crud/src/site/read.rs
crates/websocket/src/lib.rs
src/api_routes.rs

index 26a41d3d22b350af5e2cd715d1ef9f5f8e00d0c3..3cffe016642f80730e07ee4bb251007b0be0d7f3 100644 (file)
@@ -48,6 +48,9 @@ pub async fn match_websocket_operation(
       do_websocket_operation::<ApproveRegistrationApplication>(context, id, op, data).await
     }
     UserOperation::BanPerson => do_websocket_operation::<BanPerson>(context, id, op, data).await,
+    UserOperation::GetBannedPersons => {
+      do_websocket_operation::<GetBannedPersons>(context, id, op, data).await
+    }
     UserOperation::BlockPerson => {
       do_websocket_operation::<BlockPerson>(context, id, op, data).await
     }
index 781a581a7c10819ccb7b26e6aa5a14169a3a2d93..8a2d2a9224225b25aac3735798c60760e7a94452 100644 (file)
@@ -528,6 +528,30 @@ impl Perform for BanPerson {
   }
 }
 
+#[async_trait::async_trait(?Send)]
+impl Perform for GetBannedPersons {
+  type Response = BannedPersonsResponse;
+
+  async fn perform(
+    &self,
+    context: &Data<LemmyContext>,
+    _websocket_id: Option<ConnectionId>,
+  ) -> Result<Self::Response, LemmyError> {
+    let data: &GetBannedPersons = self;
+    let local_user_view =
+      get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?;
+
+    // Make sure user is an admin
+    is_admin(&local_user_view)?;
+
+    let banned = blocking(context.pool(), PersonViewSafe::banned).await??;
+
+    let res = Self::Response { banned };
+
+    Ok(res)
+  }
+}
+
 #[async_trait::async_trait(?Send)]
 impl Perform for BlockPerson {
   type Response = BlockPersonResponse;
index fdcd91cfef0f23018a3a8002be0bf42dcfdc4613..04cd099ecff72478cfdcbc92c4455068373193f6 100644 (file)
@@ -510,7 +510,6 @@ impl Perform for TransferSite {
     let creator_person = admins.remove(creator_index);
     admins.insert(0, creator_person);
 
-    let banned = blocking(context.pool(), PersonViewSafe::banned).await??;
     let federated_instances = build_federated_instances(
       context.pool(),
       &context.settings().federation,
@@ -521,7 +520,6 @@ impl Perform for TransferSite {
     Ok(GetSiteResponse {
       site_view: Some(site_view),
       admins,
-      banned,
       online: 0,
       version: version::VERSION.to_string(),
       my_user: None,
index 47c26591e2c7bf88279956e224f5e77ec1e99b9a..0b5da49fea2493f57beb6935a4db845aa2ff9daf 100644 (file)
@@ -145,6 +145,16 @@ pub struct BanPerson {
   pub auth: Sensitive<String>,
 }
 
+#[derive(Debug, Serialize, Deserialize)]
+pub struct GetBannedPersons {
+  pub auth: String,
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct BannedPersonsResponse {
+  pub banned: Vec<PersonViewSafe>,
+}
+
 #[derive(Debug, Serialize, Deserialize, Clone)]
 pub struct BanPersonResponse {
   pub person_view: PersonViewSafe,
index b53b99d4fe74202e97e632885808f6ff7c46424c..07f7e8539537e38ecd01a8eeb2abb1c4b3bd8591 100644 (file)
@@ -139,7 +139,6 @@ pub struct SiteResponse {
 pub struct GetSiteResponse {
   pub site_view: Option<SiteView>, // Because the site might not be set up yet
   pub admins: Vec<PersonViewSafe>,
-  pub banned: Vec<PersonViewSafe>,
   pub online: usize,
   pub version: String,
   pub my_user: Option<MyUserInfo>,
index 06146b96f00ad56ed851424f641d79bddec62c25..229d5939c5a35a993043ff82c0601acbd4781fae 100644 (file)
@@ -92,8 +92,6 @@ impl PerformCrud for GetSite {
       }
     }
 
-    let banned = blocking(context.pool(), PersonViewSafe::banned).await??;
-
     let online = context
       .chat_server()
       .send(GetUsersOnline)
@@ -160,7 +158,6 @@ impl PerformCrud for GetSite {
     Ok(GetSiteResponse {
       site_view,
       admins,
-      banned,
       online,
       version: version::VERSION.to_string(),
       my_user,
index 5a132a18bf212f87f3fccbb72db586ced4d2423a..e5c2730faa7334c72027fe27ba4251e9b5b4e71e 100644 (file)
@@ -130,6 +130,7 @@ pub enum UserOperation {
   ListRegistrationApplications,
   ApproveRegistrationApplication,
   BanPerson,
+  GetBannedPersons,
   Search,
   ResolveObject,
   MarkAllAsRead,
index 88466485bf9bf0a59f03ce961b04c47dbd0d4eff..5d5fe876c30ef38b0a0b361e8a2842375efbf21a 100644 (file)
@@ -181,6 +181,7 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimit) {
           .route("/join", web::post().to(route_post::<UserJoin>))
           // Admin action. I don't like that it's in /user
           .route("/ban", web::post().to(route_post::<BanPerson>))
+          .route("/banned", web::get().to(route_get::<GetBannedPersons>))
           .route("/block", web::post().to(route_post::<BlockPerson>))
           // Account actions. I don't like that they're in /user maybe /accounts
           .route("/login", web::post().to(route_post::<Login>))