|
|
@ -6,8 +6,7 @@ use serde_json::Value;
|
|
|
|
use crate::{
|
|
|
|
use crate::{
|
|
|
|
api::{
|
|
|
|
api::{
|
|
|
|
core::{log_event, CipherSyncData, CipherSyncType},
|
|
|
|
core::{log_event, CipherSyncData, CipherSyncType},
|
|
|
|
ApiResult, EmptyResult, JsonResult, JsonUpcase, JsonUpcaseVec, JsonVec, Notify, NumberOrString, PasswordData,
|
|
|
|
EmptyResult, JsonResult, JsonUpcase, JsonUpcaseVec, JsonVec, Notify, NumberOrString, PasswordData, UpdateType,
|
|
|
|
UpdateType,
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
auth::{decode_invite, AdminHeaders, Headers, ManagerHeaders, ManagerHeadersLoose, OwnerHeaders},
|
|
|
|
auth::{decode_invite, AdminHeaders, Headers, ManagerHeaders, ManagerHeadersLoose, OwnerHeaders},
|
|
|
|
db::{models::*, DbConn},
|
|
|
|
db::{models::*, DbConn},
|
|
|
@ -468,7 +467,11 @@ async fn post_organization_collection_update(
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
collection.name = data.Name;
|
|
|
|
collection.name = data.Name;
|
|
|
|
collection.external_id = data.ExternalId;
|
|
|
|
collection.external_id = match data.ExternalId {
|
|
|
|
|
|
|
|
Some(external_id) if !external_id.trim().is_empty() => Some(external_id),
|
|
|
|
|
|
|
|
_ => None,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
collection.save(&mut conn).await?;
|
|
|
|
collection.save(&mut conn).await?;
|
|
|
|
|
|
|
|
|
|
|
|
log_event(
|
|
|
|
log_event(
|
|
|
@ -2222,29 +2225,22 @@ struct GroupRequest {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl GroupRequest {
|
|
|
|
impl GroupRequest {
|
|
|
|
pub fn to_group(&self, organizations_uuid: &str) -> ApiResult<Group> {
|
|
|
|
pub fn to_group(&self, organizations_uuid: &str) -> Group {
|
|
|
|
match self.AccessAll {
|
|
|
|
Group::new(
|
|
|
|
Some(access_all_value) => Ok(Group::new(
|
|
|
|
String::from(organizations_uuid),
|
|
|
|
organizations_uuid.to_owned(),
|
|
|
|
self.Name.clone(),
|
|
|
|
self.Name.clone(),
|
|
|
|
self.AccessAll.unwrap_or(false),
|
|
|
|
access_all_value,
|
|
|
|
self.ExternalId.clone(),
|
|
|
|
self.ExternalId.clone(),
|
|
|
|
)
|
|
|
|
)),
|
|
|
|
|
|
|
|
_ => err!("Could not convert GroupRequest to Group, because AccessAll has no value!"),
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pub fn update_group(&self, mut group: Group) -> ApiResult<Group> {
|
|
|
|
pub fn update_group(&self, mut group: Group) -> Group {
|
|
|
|
match self.AccessAll {
|
|
|
|
group.name = self.Name.clone();
|
|
|
|
Some(access_all_value) => {
|
|
|
|
group.access_all = self.AccessAll.unwrap_or(false);
|
|
|
|
group.name = self.Name.clone();
|
|
|
|
// Group Updates do not support changing the external_id
|
|
|
|
group.access_all = access_all_value;
|
|
|
|
// These input fields are in a disabled state, and can only be updated/added via ldap_import
|
|
|
|
group.set_external_id(self.ExternalId.clone());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ok(group)
|
|
|
|
group
|
|
|
|
}
|
|
|
|
|
|
|
|
_ => err!("Could not update group, because AccessAll has no value!"),
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -2305,7 +2301,7 @@ async fn post_groups(
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let group_request = data.into_inner().data;
|
|
|
|
let group_request = data.into_inner().data;
|
|
|
|
let group = group_request.to_group(org_id)?;
|
|
|
|
let group = group_request.to_group(org_id);
|
|
|
|
|
|
|
|
|
|
|
|
log_event(
|
|
|
|
log_event(
|
|
|
|
EventType::GroupCreated as i32,
|
|
|
|
EventType::GroupCreated as i32,
|
|
|
@ -2339,7 +2335,7 @@ async fn put_group(
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
let group_request = data.into_inner().data;
|
|
|
|
let group_request = data.into_inner().data;
|
|
|
|
let updated_group = group_request.update_group(group)?;
|
|
|
|
let updated_group = group_request.update_group(group);
|
|
|
|
|
|
|
|
|
|
|
|
CollectionGroup::delete_all_by_group(group_id, &mut conn).await?;
|
|
|
|
CollectionGroup::delete_all_by_group(group_id, &mut conn).await?;
|
|
|
|
GroupUser::delete_all_by_group(group_id, &mut conn).await?;
|
|
|
|
GroupUser::delete_all_by_group(group_id, &mut conn).await?;
|
|
|
|