public async Task UnsyncGroupAsync(Guid groupId, Guid scimAppSettingsId) { ScimGroupSyncState syncState = await _authDbContext .ScimGroupSyncStates .SingleAsync(s => s.SCIMAppSettings.Id == scimAppSettingsId && s.UserGroup.Id == groupId); Gatekeeper.SCIM.Client.Client scimClient = await GetScimClient(scimAppSettingsId); DeleteGroupAction deleteGroup = new DeleteGroupAction(syncState.ServiceId); DeleteGroupResult deleteGroupResult = await scimClient.PerformAction <DeleteGroupResult>(deleteGroup); _authDbContext.Remove(syncState); await _authDbContext.SaveChangesAsync(); }
public async Task SyncGroupAsync(Guid groupId, Guid scimAppSettingsId) { ScimGroupSyncState?syncState = await _authDbContext .ScimGroupSyncStates .SingleOrDefaultAsync(s => s.SCIMAppSettings.Id == scimAppSettingsId && s.UserGroup.Id == groupId); List <ScimUserSyncState> userSyncStates = await _authDbContext .ScimUserSyncStates .Where(s => s.SCIMAppSettings.Id == scimAppSettingsId && s.User.Groups.Any(g => g.Id == groupId)) .ToListAsync(); List <Gatekeeper.SCIM.Client.Schema.Core20.Group.GroupMembership> groupMemberships = new List <Gatekeeper.SCIM.Client.Schema.Core20.Group.GroupMembership>(); foreach (ScimUserSyncState userSyncState in userSyncStates) { groupMemberships.Add(new Gatekeeper.SCIM.Client.Schema.Core20.Group.GroupMembership { Value = userSyncState.ServiceId, }); } UserGroup group = await _authDbContext .UserGroup .SingleAsync(u => u.Id == groupId); Gatekeeper.SCIM.Client.Schema.Core20.Group scimGroup = new Gatekeeper.SCIM.Client.Schema.Core20.Group { ExternalId = group.Id.ToString(), DisplayName = group.Name, Members = groupMemberships, }; Gatekeeper.SCIM.Client.Client scimClient = await GetScimClient(scimAppSettingsId); if (syncState == null) { CreateAction <Gatekeeper.SCIM.Client.Schema.Core20.Group> createGroupAction = new CreateAction <Gatekeeper.SCIM.Client.Schema.Core20.Group>(scimGroup); CreateResult <Gatekeeper.SCIM.Client.Schema.Core20.Group> createUserResult = await scimClient.PerformAction <CreateResult <Gatekeeper.SCIM.Client.Schema.Core20.Group> >(createGroupAction); if (createUserResult.ResultStatus == StateEnum.Success && createUserResult.Resource != null && createUserResult.Resource.Id != null ) { syncState = new ScimGroupSyncState { UserGroup = group, SCIMAppSettingsId = scimAppSettingsId, ServiceId = createUserResult.Resource.Id, }; _authDbContext.Add(syncState); await _authDbContext.SaveChangesAsync(); } else { throw new Exception("SCIM initial sync failed"); } } else { scimGroup.Id = syncState.ServiceId; UpdateGroupAction updateGroup = new UpdateGroupAction(scimGroup); UpdateGroupResult updateGroupResult = await scimClient.PerformAction <UpdateGroupResult>(updateGroup); if (updateGroupResult.ResultStatus != StateEnum.Success) { throw new Exception("SCIM update failed"); } } }