mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[AAE-9019] - People/Group cloud with HxP (#7658)
* Cover the use cases by mocking them * Replace the mock with real stream and remove useless code * Provide new service to fetch groups * Fix group tests * Use the interface and token injection * [AAE-8870] add unit test and mock for new service * Improve roles condifion * initialize the stream as part of NgOnInit to be sure it relies on the correct FormControl instance(input) * Rollback tmp change for roles * [AAE-8641] people abstraction mock * [AAE-8641] revert angular.json changes * [AAE-8641] few conditions and code improvements * [AAE-8641] revert change input controls name * [AAE-8641] initialize the stream as part of ngOnInit * [AAE-8641] people abstraction improvements * [AAE-8870] cherry pick people abstraction * [AAE-8641] fix people-group e2es * fix lint * remove hardcoded identityHost * Use the identityhost api in case of cloud * Solve issue with returnType array string * Rebase and use GroupModel from cloud * Rebase and use GroupModel from cloud * Use the bpmHost instead of identityFor * Add identity ingress for user access service * Rename test * Fix linting issues * Fix playwright storybook e2e for people and group * Trigger travis * Fix people group e2e * improved formatting * Remove not needed travis var override * Remove unused import after rebase * Make roles in filter optional + remove comments Co-authored-by: Tomasz <tomasz.gnyp@hyland.com> Co-authored-by: arditdomi <ardit.domi@hyland.com>
This commit is contained in:
@@ -0,0 +1,150 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2019 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Injectable } from '@angular/core';
|
||||
import {
|
||||
AppConfigService,
|
||||
JwtHelperService,
|
||||
OAuth2Service
|
||||
} from '@alfresco/adf-core';
|
||||
import { EMPTY, Observable, throwError } from 'rxjs';
|
||||
import { catchError } from 'rxjs/operators';
|
||||
import { IdentityUserServiceInterface } from './identity-user.service.interface';
|
||||
import { IdentityUserModel } from '../models/identity-user.model';
|
||||
import { IdentityUserFilterInterface } from './identity-user-filter.interface';
|
||||
|
||||
const IDENTITY_MICRO_SERVICE_INGRESS = 'modeling-service';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class IdentityUserService implements IdentityUserServiceInterface {
|
||||
|
||||
queryParams: { search: string; application?: string; roles?: string[]; groups?: string[] };
|
||||
|
||||
constructor(
|
||||
private jwtHelperService: JwtHelperService,
|
||||
private oAuth2Service: OAuth2Service,
|
||||
private appConfigService: AppConfigService) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the name and other basic details of the current user.
|
||||
*
|
||||
* @returns The user's details
|
||||
*/
|
||||
public getCurrentUserInfo(): IdentityUserModel {
|
||||
const familyName = this.jwtHelperService.getValueFromLocalToken<string>(JwtHelperService.FAMILY_NAME);
|
||||
const givenName = this.jwtHelperService.getValueFromLocalToken<string>(JwtHelperService.GIVEN_NAME);
|
||||
const email = this.jwtHelperService.getValueFromLocalToken<string>(JwtHelperService.USER_EMAIL);
|
||||
const username = this.jwtHelperService.getValueFromLocalToken<string>(JwtHelperService.USER_PREFERRED_USERNAME);
|
||||
return { firstName: givenName, lastName: familyName, email, username };
|
||||
}
|
||||
|
||||
/**
|
||||
* Search users based on name input and filters.
|
||||
*
|
||||
* @param name Search query string
|
||||
* @param [filters] Search query filters
|
||||
* @returns List of users
|
||||
*/
|
||||
public search(name: string, filters?: IdentityUserFilterInterface): Observable<IdentityUserModel[]> {
|
||||
if (name.trim() === '') {
|
||||
return EMPTY;
|
||||
} else if (filters?.groups?.length > 0) {
|
||||
return this.searchUsersWithGroups(name, filters);
|
||||
} else if (filters?.withinApplication) {
|
||||
return this.searchUsersWithinApp(name, filters.withinApplication, filters?.roles);
|
||||
} else if (filters?.roles?.length > 0) {
|
||||
return this.searchUsersWithGlobalRoles(name, filters.roles);
|
||||
} else {
|
||||
return this.searchUsersByName(name);
|
||||
}
|
||||
}
|
||||
|
||||
private searchUsersByName(name: string): Observable<IdentityUserModel[]> {
|
||||
this.buildQueryParam(name);
|
||||
|
||||
return this.invokeIdentityUserApi().pipe(
|
||||
catchError((err) => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
private searchUsersWithGlobalRoles(name: string, roles: string []): Observable<IdentityUserModel[]> {
|
||||
this.buildQueryParam(name, {roles});
|
||||
|
||||
return this.invokeIdentityUserApi().pipe(
|
||||
catchError((err) => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
private searchUsersWithinApp(name: string, withinApplication: string, roles?: string []): Observable<IdentityUserModel[]> {
|
||||
this.buildQueryParam(name, {roles, withinApplication});
|
||||
|
||||
return this.invokeIdentityUserApi().pipe(
|
||||
catchError((err) => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
private searchUsersWithGroups(name: string, filters: IdentityUserFilterInterface): Observable<IdentityUserModel[]> {
|
||||
this.buildQueryParam(name, filters);
|
||||
|
||||
return this.invokeIdentityUserApi().pipe(
|
||||
catchError((err) => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
private invokeIdentityUserApi(): Observable<any> {
|
||||
const url = `${this.identityHost}/${IDENTITY_MICRO_SERVICE_INGRESS}/v1/identity/users`;
|
||||
return this.oAuth2Service.get({ url, queryParams: this.queryParams });
|
||||
}
|
||||
|
||||
private buildQueryParam(name: string, filters?: IdentityUserFilterInterface) {
|
||||
this.queryParams = { search: name };
|
||||
this.addOptionalValueToQueryParam('application', filters?.withinApplication);
|
||||
this.addOptionalCommaValueToQueryParam('role', filters?.roles);
|
||||
this.addOptionalCommaValueToQueryParam('group', filters?.groups);
|
||||
}
|
||||
|
||||
private addOptionalCommaValueToQueryParam(key: string, values: string []) {
|
||||
if (values?.length > 0) {
|
||||
const valuesNotEmpty = this.filterOutEmptyValue(values);
|
||||
if (valuesNotEmpty?.length > 0) {
|
||||
this.queryParams[key] = valuesNotEmpty.join(',');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private addOptionalValueToQueryParam(key: string, value: string) {
|
||||
if (value?.trim()) {
|
||||
this.queryParams[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
private filterOutEmptyValue(values: string []): string [] {
|
||||
return values.filter( value => value.trim() ? true : false);
|
||||
}
|
||||
|
||||
private get identityHost(): string {
|
||||
return `${this.appConfigService.get('bpmHost')}`;
|
||||
}
|
||||
|
||||
private handleError(error: any) {
|
||||
return throwError(error || 'Server error');
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user