Merge pull request #1927 from LemmyNet/add_banned_persons_endpoint

Adding a banned endpoint for admins. Removing it from GetSite. Fixes …
This commit is contained in:
Nutomic 2022-01-05 14:04:26 +00:00 committed by GitHub
commit e864685759
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 39 additions and 6 deletions

View 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
}

View 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;

View 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,

View 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,

View 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>,

View 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,

View file

@ -130,6 +130,7 @@ pub enum UserOperation {
ListRegistrationApplications,
ApproveRegistrationApplication,
BanPerson,
GetBannedPersons,
Search,
ResolveObject,
MarkAllAsRead,

View 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>))