From 786ac364bde75cc7c62b0fb09e23f9e9d9853724 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Mon, 29 Jun 2020 08:17:51 +0200 Subject: [PATCH] Can change group membership --- src/controllers/groups_controller.rs | 23 ++++++++++++++++++++++- src/data/group_member.rs | 12 ++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/controllers/groups_controller.rs b/src/controllers/groups_controller.rs index 37d276c..c44ad3b 100644 --- a/src/controllers/groups_controller.rs +++ b/src/controllers/groups_controller.rs @@ -272,5 +272,26 @@ pub fn delete_member(r: &mut HttpRequestHandler) -> RequestResult { /// Update a user's membership pub fn update_membership(r: &mut HttpRequestHandler) -> RequestResult { - r.success("ready to implement") + let group_id = r.post_group_id_with_access("groupID", GroupAccessLevel::ADMIN_ACCESS)?; + let user_id = r.post_user_id("userID")?; + + if user_id == r.user_id()? { + r.bad_request("You can not update your own membership!".to_string())?; + } + + let level = groups_helper::get_membership_level(&group_id, Some(user_id.clone()))?; + + if level > GroupMembershipLevel::MEMBER { + r.forbidden("This user is not a member of the group!".to_string())?; + } + + let new_level = GroupMembershipLevel::from_api(&r.post_string("level")?); + + if new_level > GroupMembershipLevel::MEMBER { + r.forbidden("You can not assign this visibility level!".to_string())?; + } + + groups_helper::update_membership_level(&group_id, &user_id, new_level)?; + + r.success("User membership has been successfully updated!") } \ No newline at end of file diff --git a/src/data/group_member.rs b/src/data/group_member.rs index 6e86abd..9b922b7 100644 --- a/src/data/group_member.rs +++ b/src/data/group_member.rs @@ -30,6 +30,18 @@ impl GroupMembershipLevel { GroupMembershipLevel::VISITOR => "visitor", }.to_string() } + + pub fn from_api(level: &str) -> GroupMembershipLevel { + match level { + "administrator" => GroupMembershipLevel::ADMINISTRATOR, + "moderator" => GroupMembershipLevel::MODERATOR, + "member" => GroupMembershipLevel::MEMBER, + "invited" => GroupMembershipLevel::INVITED, + "pending" => GroupMembershipLevel::PENDING, + "visitor" => GroupMembershipLevel::VISITOR, + _ => GroupMembershipLevel::VISITOR, + } + } } pub struct GroupMember {