1
0
mirror of https://gitlab.com/comunic/comunicapiv3 synced 2025-06-21 00:45:18 +00:00

Can add member to conversations

This commit is contained in:
2021-03-06 17:57:04 +01:00
parent cbb12a87e1
commit 72a9553f1a
4 changed files with 47 additions and 101 deletions

View File

@ -11,7 +11,7 @@ use crate::api_data::res_find_private_conversations::ResFindPrivateConversations
use crate::constants::{ALLOWED_CONVERSATION_FILES_TYPES, CONVERSATION_FILES_MAX_SIZE, MAX_CONVERSATION_MESSAGE_LENGTH, MIN_CONVERSATION_MESSAGE_LENGTH};
use crate::controllers::user_ws_controller;
use crate::data::base_request_handler::{BaseRequestHandler, RequestValue};
use crate::data::conversation::{ConversationMemberSetting, NewConversationSettings};
use crate::data::conversation::NewConversationSettings;
use crate::data::conversation_message::ConversationMessageFile;
use crate::data::error::Res;
use crate::data::http_request_handler::HttpRequestHandler;
@ -87,7 +87,6 @@ pub fn get_single(r: &mut HttpRequestHandler) -> RequestResult {
/// Update the settings of a conversation
pub fn update_settings(r: &mut HttpRequestHandler) -> RequestResult {
let conv_membership = r.post_conv("conversationID")?;
let conv = conversations_helper::get_single(conv_membership.conv_id)?;
// Update following state, if required
if r.has_post_parameter("following") {
@ -98,57 +97,6 @@ pub fn update_settings(r: &mut HttpRequestHandler) -> RequestResult {
)?;
}
// Update members list
if r.has_post_parameter("members") && !conv.is_managed() {
let mut members = r.post_users_id("members")?
.into_iter()
.map(|user_id| ConversationMemberSetting { user_id, set_admin: false })
.collect::<Vec<ConversationMemberSetting>>();
let admins = r.post_users_id("admins")?;
let can_everyone_add_members = conversations_helper::can_everyone_add_members(conv_membership.conv_id)?;
if !conv_membership.is_admin && !can_everyone_add_members {
r.forbidden("You can not update the list of members of this conversation!".to_string())?;
}
// Set same admin status as earlier
if !conv_membership.is_admin {
members = members
.into_iter()
.map(|mut n| {
n.set_admin = conv.is_admin(&n.user_id);
n
})
.collect()
}
// If the user is an admin, use the values he gave
else {
members = members
.into_iter()
.map(|mut n| {
n.set_admin = admins.contains(&n.user_id);
n
})
.collect()
}
// Current user can not touch his own membership, so revert it back forcefully
members = members
.into_iter()
.filter(|m| !m.user_id.eq(&conv_membership.user_id))
.collect::<Vec<ConversationMemberSetting>>();
members.push(ConversationMemberSetting {
user_id: r.user_id()?,
set_admin: conv_membership.is_admin,
});
conversations_helper::set_members(conv_membership.conv_id, &members, conv_membership.is_admin)?;
}
// Change moderator settings
if r.has_post_parameter("name")
&& r.has_post_parameter("canEveryoneAddMembers")
@ -171,6 +119,30 @@ pub fn update_settings(r: &mut HttpRequestHandler) -> RequestResult {
r.success("Conversation information successfully updated!")
}
/// Add a new member to a conversation
pub fn add_member(r: &mut HttpRequestHandler) -> RequestResult {
let conv_membership = r.post_conv("convID")?;
let conv = conversations_helper::get_single(conv_membership.conv_id)?;
let user_to_add = r.post_user_id("userID")?;
if conv.is_managed() {
r.bad_request("This conversation is managed, you can not manually change its members!".to_string())?;
}
if !conv.can_user_add_members(r.user_id_ref()?) {
r.forbidden("You are not allowed to add members to this conversation!".to_string())?;
}
if conv.get_membership(&user_to_add).is_some() {
r.bad_request("This user is already a member of this group!".to_string())?;
}
conversations_helper::add_member(conv.id, &user_to_add, true, false, r.user_id_ref()?)?;
r.success("The user was added to the conversation!")
}
/// Find a private conversation
pub fn find_private(r: &mut HttpRequestHandler) -> RequestResult {
let other_user = r.post_user_id("otherUser")?;