示例#1
0
        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();
        }
示例#2
0
        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");
                }
            }
        }