Browse Source

Don't allow duplicate community names in API. #957

community_name_dupe_quickfix
Dessalines 7 months ago
parent
commit
fcdd1fd0f1
3 changed files with 15 additions and 4 deletions
  1. +2
    -2
      server/lemmy_db/src/community.rs
  2. +12
    -1
      server/src/api/community.rs
  3. +1
    -1
      ui/src/components/create-community.tsx

+ 2
- 2
server/lemmy_db/src/community.rs View File

@ -88,10 +88,10 @@ impl Community {
.first::<Self>(conn)
}
pub fn read_from_actor_id(conn: &PgConnection, community_id: &str) -> Result<Self, Error> {
pub fn read_from_actor_id(conn: &PgConnection, for_actor_id: &str) -> Result<Self, Error> {
use crate::schema::community::dsl::*;
community
.filter(actor_id.eq(community_id))
.filter(actor_id.eq(for_actor_id))
.first::<Self>(conn)
}


+ 12
- 1
server/src/api/community.rs View File

@ -264,6 +264,17 @@ impl Perform for Oper<CreateCommunity> {
return Err(APIError::err("site_ban").into());
}
// Double check for duplicate community actor_ids
let actor_id = make_apub_endpoint(EndpointType::Community, &data.name).to_string();
let actor_id_cloned = actor_id.to_owned();
let community_dupe = blocking(pool, move |conn| {
Community::read_from_actor_id(conn, &actor_id_cloned)
})
.await?;
if community_dupe.is_ok() {
return Err(APIError::err("community_already_exists").into());
}
// When you create a community, make sure the user becomes a moderator and a follower
let keypair = generate_actor_keypair()?;
@ -277,7 +288,7 @@ impl Perform for Oper<CreateCommunity> {
deleted: None,
nsfw: data.nsfw,
updated: None,
actor_id: make_apub_endpoint(EndpointType::Community, &data.name).to_string(),
actor_id,
local: true,
private_key: Some(keypair.private_key),
public_key: Some(keypair.public_key),


+ 1
- 1
ui/src/components/create-community.tsx View File

@ -70,7 +70,7 @@ export class CreateCommunity extends Component<any, CreateCommunityState> {
console.log(msg);
let res = wsJsonToRes(msg);
if (msg.error) {
toast(i18n.t(msg.error), 'danger');
// Toast errors are already handled by community-form
return;
} else if (res.op == UserOperation.GetSite) {
let data = res.data as GetSiteResponse;


Loading…
Cancel
Save