UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

100 lines 14.3 kB
import { Injectable } from '@angular/core'; import { AbstractResourceService } from '../../resources/public-api'; import { Subject } from 'rxjs'; import * as i0 from "@angular/core"; import * as i1 from "../../resources/public-api"; import * as i2 from "@angular/router"; import * as i3 from "../../configuration/configuration.service"; import * as i4 from "../../user/services/user.service"; import * as i5 from "../../snack-bar/services/snack-bar.service"; import * as i6 from "../../filter/filter.repository"; import * as i7 from "../../logger/services/logger.service"; import * as i8 from "@ngx-translate/core"; export class ImpersonationService extends AbstractResourceService { provider; _router; _configService; _userService; _snackbar; _filter; _log; _translate; _impersonating$ = new Subject(); _lastUser; _sub; constructor(provider, _router, _configService, _userService, _snackbar, _filter, _log, _translate) { super('impersonation', provider, _configService); this.provider = provider; this._router = _router; this._configService = _configService; this._userService = _userService; this._snackbar = _snackbar; this._filter = _filter; this._log = _log; this._translate = _translate; this._sub = this._userService.user$.subscribe(user => this._resolveUserChange(user)); } get impersonating$() { return this._impersonating$.asObservable(); } impersonateUser(userId) { this.provider.post$('impersonate/user/' + userId, this.SERVER_URL, {}).subscribe((user) => { this._resolveSuccess(user); }, (response => { this._resolveError(response); })); } impersonateByConfig(configId) { this.provider.post$('impersonate/config/' + configId, this.SERVER_URL, {}).subscribe((user) => { this._resolveSuccess(user); }, (response => { this._resolveError(response); })); } cease() { this.provider.post$('impersonate/clear', this.SERVER_URL, {}).subscribe(user => { this._snackbar.openSuccessSnackBar(this._translate.instant('impersonation.action.deactivated')); return this._triggerReload(); }, (error => { this._snackbar.openErrorSnackBar(this._translate.instant('impersonation.action.failed')); })); } _resolveSuccess(user) { this._snackbar.openSuccessSnackBar(this._translate.instant('impersonation.user.successfullyRepresented')); this._triggerReload(); } _resolveError(response) { if (response.status === 400) { response.error.alreadyImpersonated ? this._snackbar.openErrorSnackBar(this._translate.instant('impersonation.user.currentlyAlreadyRepresented')) : this._snackbar.openErrorSnackBar(this._translate.instant('impersonation.user.currentlyLogged')); } else { this._snackbar.openErrorSnackBar(this._translate.instant('impersonation.action.failed')); } } _triggerReload() { this._userService.reload(); } _resolveUserChange(user) { if (this._lastUser && this._lastUser.isImpersonating() != user.isImpersonating()) { this._filter.removeAllFilters(); this._impersonating$.next(user.isImpersonating()); } this._lastUser = user; } ngOnDestroy() { if (this._sub) { this._sub.unsubscribe(); } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImpersonationService, deps: [{ token: i1.ResourceProvider }, { token: i2.Router }, { token: i3.ConfigurationService }, { token: i4.UserService }, { token: i5.SnackBarService }, { token: i6.FilterRepository }, { token: i7.LoggerService }, { token: i8.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImpersonationService, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImpersonationService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.ResourceProvider }, { type: i2.Router }, { type: i3.ConfigurationService }, { type: i4.UserService }, { type: i5.SnackBarService }, { type: i6.FilterRepository }, { type: i7.LoggerService }, { type: i8.TranslateService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wZXJzb25hdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9pbXBlcnNvbmF0aW9uL3NlcnZpY2VzL2ltcGVyc29uYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBR3BELE9BQU8sRUFBQyx1QkFBdUIsRUFBaUMsTUFBTSw0QkFBNEIsQ0FBQztBQU1uRyxPQUFPLEVBQWEsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBTXZELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSx1QkFBdUI7SUFPaEM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQVpyQixlQUFlLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztJQUV6QyxTQUFTLENBQU87SUFDaEIsSUFBSSxDQUFlO0lBRTNCLFlBQTZCLFFBQTBCLEVBQzFCLE9BQWUsRUFDZixjQUFvQyxFQUNwQyxZQUF5QixFQUN6QixTQUEwQixFQUMxQixPQUF5QixFQUN6QixJQUFtQixFQUNuQixVQUE0QjtRQUNyRCxLQUFLLENBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQVJ4QixhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUMxQixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsbUJBQWMsR0FBZCxjQUFjLENBQXNCO1FBQ3BDLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQ3pCLFNBQUksR0FBSixJQUFJLENBQWU7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFFckQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtB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QUMsSUFBVTtRQUNuQyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDOUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQzt3R0EvRVEsb0JBQW9COzRHQUFwQixvQkFBb0IsY0FGakIsTUFBTTs7NEZBRVQsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RSZXNvdXJjZVNlcnZpY2UsIFJlc291cmNlUHJvdmlkZXIsIFVzZXJSZXNvdXJjZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3B1YmxpYy1hcGknO1xuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSAnLi4vLi4vdXNlci9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtTbmFja0JhclNlcnZpY2V9IGZyb20gJy4uLy4uL3NuYWNrLWJhci9zZXJ2aWNlcy9zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQge0ZpbHRlclJlcG9zaXRvcnl9IGZyb20gJy4uLy4uL2ZpbHRlci9maWx0ZXIucmVwb3NpdG9yeSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1VzZXJ9IGZyb20gJy4uLy4uL3VzZXIvbW9kZWxzL3VzZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEltcGVyc29uYXRpb25TZXJ2aWNlIGV4dGVuZHMgQWJzdHJhY3RSZXNvdXJjZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgcHJpdmF0ZSBfaW1wZXJzb25hdGluZyQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgcHJpdmF0ZSBfbGFzdFVzZXI6IFVzZXI7XG4gICAgcHJpdmF0ZSBfc3ViOiBTdWJzY3JpcHRpb247XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIHByb3ZpZGVyOiBSZXNvdXJjZVByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3JvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2NvbmZpZ1NlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9zbmFja2JhcjogU25hY2tCYXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2ZpbHRlcjogRmlsdGVyUmVwb3NpdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCdpbXBlcnNvbmF0aW9uJywgcHJvdmlkZXIsIF9jb25maWdTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fc3ViID0gdGhpcy5fdXNlclNlcnZpY2UudXNlciQuc3Vic2NyaWJlKHVzZXIgPT4gdGhpcy5fcmVzb2x2ZVVzZXJDaGFuZ2UodXNlcikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaW1wZXJzb25hdGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbXBlcnNvbmF0aW5nJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW1wZXJzb25hdGVVc2VyKHVzZXJJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvdmlkZXIucG9zdCQoJ2ltcGVyc29uYXRlL3VzZXIvJyArIHVzZXJJZCwgdGhpcy5TRVJWRVJfVVJMLCB7fSkuc3Vic2NyaWJlKCh1c2VyOiBVc2VyUmVzb3VyY2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVTdWNjZXNzKHVzZXIpO1xuICAgICAgICB9LCAocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbXBlcnNvbmF0ZUJ5Q29uZmlnKGNvbmZpZ0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm92aWRlci5wb3N0JCgnaW1wZXJzb25hdGUvY29uZmlnLycgKyBjb25maWdJZCwgdGhpcy5TRVJWRVJfVVJMLCB7fSkuc3Vic2NyaWJlKCh1c2VyOiBVc2VyUmVzb3VyY2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVTdWNjZXNzKHVzZXIpO1xuICAgICAgICB9LCAocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjZWFzZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm92aWRlci5wb3N0JCgnaW1wZXJzb25hdGUvY2xlYXInLCB0aGlzLlNFUlZFUl9VUkwsIHt9KS5zdWJzY3JpYmUodXNlciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuU3VjY2Vzc1NuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdpbXBlcnNvbmF0aW9uLmFjdGlvbi5kZWFjdGl2YXRlZCcpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmlnZ2VyUmVsb2FkKCk7XG4gICAgICAgIH0sIChlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuRXJyb3JTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnaW1wZXJzb25hdGlvbi5hY3Rpb24uZmFpbGVkJykpO1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9yZXNvbHZlU3VjY2Vzcyh1c2VyOiBVc2VyUmVzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5fc25hY2tiYXIub3BlblN1Y2Nlc3NTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnaW1wZXJzb25hdGlvbi51c2VyLnN1Y2Nlc3NmdWxseVJlcHJlc2VudGVkJykpO1xuICAgICAgICB0aGlzLl90cmlnZ2VyUmVsb2FkKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9yZXNvbHZlRXJyb3IocmVzcG9uc2U6IGFueSkge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHJlc3BvbnNlLmVycm9yLmFscmVhZHlJbXBlcnNvbmF0ZWQgP1xuICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdpbXBlcnNvbmF0aW9uLnVzZXIuY3VycmVudGx5QWxyZWFkeVJlcHJlc2VudGVkJykpIDpcbiAgICAgICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuRXJyb3JTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnaW1wZXJzb25hdGlvbi51c2VyLmN1cnJlbnRseUxvZ2dlZCcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdpbXBlcnNvbmF0aW9uLmFjdGlvbi5mYWlsZWQnKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3RyaWdnZXJSZWxvYWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlLnJlbG9hZCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcmVzb2x2ZVVzZXJDaGFuZ2UodXNlcjogVXNlcikge1xuICAgICAgICBpZiAodGhpcy5fbGFzdFVzZXIgJiYgdGhpcy5fbGFzdFVzZXIuaXNJbXBlcnNvbmF0aW5nKCkgIT0gdXNlci5pc0ltcGVyc29uYXRpbmcoKSkge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyLnJlbW92ZUFsbEZpbHRlcnMoKTtcbiAgICAgICAgICAgIHRoaXMuX2ltcGVyc29uYXRpbmckLm5leHQodXNlci5pc0ltcGVyc29uYXRpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGFzdFVzZXIgPSB1c2VyO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fc3ViKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==