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)); }
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)); }