From 221ea8e6c9242d3f75953103e87064f5dbf3bc2b Mon Sep 17 00:00:00 2001 From: BaGe Date: Wed, 20 Jan 2021 13:08:23 +0100 Subject: [PATCH] Changed getAllUsers to getDevPortalUsers --- .../create-developer.component.spec.ts | 4 ++-- .../create-developer.component.ts | 2 +- .../admin/services/admin.service.ts | 8 +++---- .../services/keycloak-interaction.service.ts | 21 ++++++++++++++----- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/app/components/admin/create-developer/create-developer.component.spec.ts b/src/app/components/admin/create-developer/create-developer.component.spec.ts index 5fba0b68..8cbf4f36 100644 --- a/src/app/components/admin/create-developer/create-developer.component.spec.ts +++ b/src/app/components/admin/create-developer/create-developer.component.spec.ts @@ -57,8 +57,8 @@ describe('CreateDeveloperComponent', () => { } }]; - const adminService = jasmine.createSpyObj('adminService', ['getKeycloakUsers', 'getAllClients']); - adminService.getKeycloakUsers.and.returnValue(from( + const adminService = jasmine.createSpyObj('adminService', ['getDevPortalUsers', 'getAllClients']); + adminService.getDevPortalUsers.and.returnValue(from( keycloakUsers )); adminService.getAllClients.and.returnValue(from( diff --git a/src/app/components/admin/create-developer/create-developer.component.ts b/src/app/components/admin/create-developer/create-developer.component.ts index eb9de486..f498eab9 100644 --- a/src/app/components/admin/create-developer/create-developer.component.ts +++ b/src/app/components/admin/create-developer/create-developer.component.ts @@ -57,7 +57,7 @@ export class CreateDeveloperComponent implements OnInit, OnDestroy { * On init life circle */ ngOnInit(): void { - const getKeycloakUserTask = this.adminService.getKeycloakUsers().pipe(map(keycloakUsers => { + const getKeycloakUserTask = this.adminService.getDevPortalUsers().pipe(map(keycloakUsers => { this.keycloakUsers = keycloakUsers; this.filteredKeycloakUsers = keycloakUsers.filter((user => this.checkDeveloperNotExists(user.username))); })); diff --git a/src/app/components/admin/services/admin.service.ts b/src/app/components/admin/services/admin.service.ts index c15e59d1..ebc720ce 100644 --- a/src/app/components/admin/services/admin.service.ts +++ b/src/app/components/admin/services/admin.service.ts @@ -15,8 +15,8 @@ */ import {Inject, Injectable} from '@angular/core'; -import {Observable, of} from 'rxjs'; -import {catchError, map, mergeMap} from 'rxjs/operators'; +import {from, Observable, of} from 'rxjs'; +import {mergeMap} from 'rxjs/operators'; import {ClientSearchResult, Developer} from '../../../services/api-data.service'; import {HttpClient} from '@angular/common/http'; import {KeycloakInteractionService} from './keycloak-interaction.service'; @@ -57,8 +57,8 @@ export class AdminService { /** * Get all keycloak users */ - public getKeycloakUsers() { - return this.keycloak.getAllUsers(); + public getDevPortalUsers() { + return from(this.keycloak.getDevPortalUsers()); } /** diff --git a/src/app/components/admin/services/keycloak-interaction.service.ts b/src/app/components/admin/services/keycloak-interaction.service.ts index e39b1efc..eab9be19 100644 --- a/src/app/components/admin/services/keycloak-interaction.service.ts +++ b/src/app/components/admin/services/keycloak-interaction.service.ts @@ -17,9 +17,9 @@ import {Inject, Injectable} from '@angular/core'; import {KeycloakService} from 'keycloak-angular'; import KcAdminClient from 'keycloak-admin'; -import {from} from 'rxjs'; -import {map, mergeMap} from 'rxjs/operators'; import {TokenService} from '../../../services/token.service'; +import UserRepresentation from 'keycloak-admin/lib/defs/userRepresentation'; +import GroupRepresentation from 'keycloak-admin/lib/defs/groupRepresentation'; @Injectable({ providedIn: 'root' @@ -28,6 +28,7 @@ export class KeycloakInteractionService { private kcAdminClient: KcAdminClient; + /** * Constructor of Keycloak Interaction Service * @param keycloak the keycloak service @@ -55,9 +56,19 @@ export class KeycloakInteractionService { /** * Get all keycloak users - * Max value: https://www.keycloak.org/docs-api/9.0/rest-api/index.html#_users_resource + * id, max value: https://www.keycloak.org/docs-api/12.0/rest-api/index.html#_groups_resource */ - public getAllUsers() { - return from(this.kcAdminClient.users.find({max: (Math.pow(2, 31) - 1)})); + public async getDevPortalUsers(): Promise { + const keycloakGroups: GroupRepresentation[] = []; + const devPortalGroups: GroupRepresentation[] = []; + const devPortalUsers: UserRepresentation[] = []; + keycloakGroups.push(...(await this.kcAdminClient.groups.find())); + devPortalGroups.push(...(keycloakGroups.filter(group => { + return group.name === 'API-Management-Developer-Portal-Users' || group.name === 'API-Management-Administrators'; + }))); + for (const group of devPortalGroups){ + devPortalUsers.push(...(await this.kcAdminClient.groups.listMembers({id: group.id, max: (Math.pow(2, 31) - 1)}))); + } + return devPortalUsers; } }