.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)
}
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()?;
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),
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;