示例#1
0
        public async Task <IActionResult> Get(
            Guid organizationId,
            [FromQuery] string filter,
            [FromQuery] int?count,
            [FromQuery] int?startIndex)
        {
            string nameFilter       = null;
            string externalIdFilter = null;

            if (!string.IsNullOrWhiteSpace(filter))
            {
                if (filter.StartsWith("displayName eq "))
                {
                    nameFilter = filter.Substring(15).Trim('"');
                }
                else if (filter.StartsWith("externalId eq "))
                {
                    externalIdFilter = filter.Substring(14).Trim('"');
                }
            }

            var groupList = new List <ScimGroupResponseModel>();
            var groups    = await _groupRepository.GetManyByOrganizationIdAsync(organizationId);

            var totalResults = 0;

            if (!string.IsNullOrWhiteSpace(nameFilter))
            {
                var group = groups.FirstOrDefault(g => g.Name == nameFilter);
                if (group != null)
                {
                    groupList.Add(new ScimGroupResponseModel(group));
                }
                totalResults = groupList.Count;
            }
            else if (!string.IsNullOrWhiteSpace(externalIdFilter))
            {
                var group = groups.FirstOrDefault(ou => ou.ExternalId == externalIdFilter);
                if (group != null)
                {
                    groupList.Add(new ScimGroupResponseModel(group));
                }
                totalResults = groupList.Count;
            }
            else if (string.IsNullOrWhiteSpace(filter) && startIndex.HasValue && count.HasValue)
            {
                groupList = groups.OrderBy(g => g.Name)
                            .Skip(startIndex.Value - 1)
                            .Take(count.Value)
                            .Select(g => new ScimGroupResponseModel(g))
                            .ToList();
                totalResults = groups.Count;
            }

            var result = new ScimListResponseModel <ScimGroupResponseModel>
            {
                Resources    = groupList,
                ItemsPerPage = count.GetValueOrDefault(groupList.Count),
                TotalResults = totalResults,
                StartIndex   = startIndex.GetValueOrDefault(1),
            };

            return(new ObjectResult(result));
        }
示例#2
0
        public async Task <IActionResult> Get(
            Guid organizationId,
            [FromQuery] string filter,
            [FromQuery] int?count,
            [FromQuery] int?startIndex)
        {
            string emailFilter      = null;
            string usernameFilter   = null;
            string externalIdFilter = null;

            if (!string.IsNullOrWhiteSpace(filter))
            {
                if (filter.StartsWith("userName eq "))
                {
                    usernameFilter = filter.Substring(12).Trim('"').ToLowerInvariant();
                    if (usernameFilter.Contains("@"))
                    {
                        emailFilter = usernameFilter;
                    }
                }
                else if (filter.StartsWith("externalId eq "))
                {
                    externalIdFilter = filter.Substring(14).Trim('"');
                }
            }

            var userList = new List <ScimUserResponseModel> {
            };
            var orgUsers = await _organizationUserRepository.GetManyDetailsByOrganizationAsync(organizationId);

            var totalResults = 0;

            if (!string.IsNullOrWhiteSpace(emailFilter))
            {
                var orgUser = orgUsers.FirstOrDefault(ou => ou.Email.ToLowerInvariant() == emailFilter);
                if (orgUser != null)
                {
                    userList.Add(new ScimUserResponseModel(orgUser));
                }
                totalResults = userList.Count;
            }
            else if (!string.IsNullOrWhiteSpace(externalIdFilter))
            {
                var orgUser = orgUsers.FirstOrDefault(ou => ou.ExternalId == externalIdFilter);
                if (orgUser != null)
                {
                    userList.Add(new ScimUserResponseModel(orgUser));
                }
                totalResults = userList.Count;
            }
            else if (string.IsNullOrWhiteSpace(filter) && startIndex.HasValue && count.HasValue)
            {
                userList = orgUsers.OrderBy(ou => ou.Email)
                           .Skip(startIndex.Value - 1)
                           .Take(count.Value)
                           .Select(ou => new ScimUserResponseModel(ou))
                           .ToList();
                totalResults = orgUsers.Count;
            }

            var result = new ScimListResponseModel <ScimUserResponseModel>
            {
                Resources    = userList,
                ItemsPerPage = count.GetValueOrDefault(userList.Count),
                TotalResults = totalResults,
                StartIndex   = startIndex.GetValueOrDefault(1),
            };

            return(new ObjectResult(result));
        }