@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
100 lines • 14.3 kB
JavaScript
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==