@bnsights/bbsf-utilities 1.0.31 → 1.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/bnsights-bbsf-utilities-1.0.32.tgz +0 -0
- package/bnsights-bbsf-utilities.d.ts +1 -0
- package/{esm2015/bnsights-bbsf-utilities.js → esm2020/bnsights-bbsf-utilities.mjs} +0 -0
- package/esm2020/lib/bbsf-utilities.module.mjs +74 -0
- package/esm2020/lib/shared/authentication/auth.service.mjs +217 -0
- package/{esm2015/lib/shared/config/environment.js → esm2020/lib/shared/config/environment.mjs} +0 -0
- package/{esm2015/lib/shared/models/AreaModel.js → esm2020/lib/shared/models/AreaModel.mjs} +0 -0
- package/{esm2015/lib/shared/models/ErrorModel.js → esm2020/lib/shared/models/ErrorModel.mjs} +0 -0
- package/{esm2015/lib/shared/models/RequestOptionsModel.js → esm2020/lib/shared/models/RequestOptionsModel.mjs} +0 -0
- package/esm2020/lib/shared/services/AppearanceConfiguration.service.mjs +35 -0
- package/esm2020/lib/shared/services/configuration.service.mjs +24 -0
- package/esm2020/lib/shared/services/controlvalidation.service.mjs +166 -0
- package/esm2020/lib/shared/services/environment.service.mjs +50 -0
- package/esm2020/lib/shared/services/masterlayout.service.mjs +84 -0
- package/esm2020/lib/shared/services/requesthandler.service.mjs +202 -0
- package/esm2020/lib/shared/services/stylesbundle.service.mjs +55 -0
- package/esm2020/lib/shared/services/translate.service.mjs +14 -0
- package/esm2020/lib/shared/services/translationresolver.service.mjs +18 -0
- package/esm2020/lib/shared/services/utility.service.mjs +90 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{bnsights-bbsf-utilities.js → bnsights-bbsf-utilities.mjs} +160 -157
- package/fesm2015/bnsights-bbsf-utilities.mjs.map +1 -0
- package/fesm2020/bnsights-bbsf-utilities.mjs +997 -0
- package/fesm2020/bnsights-bbsf-utilities.mjs.map +1 -0
- package/lib/bbsf-utilities.module.d.ts +9 -0
- package/lib/shared/authentication/auth.service.d.ts +3 -0
- package/lib/shared/services/AppearanceConfiguration.service.d.ts +3 -0
- package/lib/shared/services/configuration.service.d.ts +3 -0
- package/lib/shared/services/controlvalidation.service.d.ts +3 -0
- package/lib/shared/services/environment.service.d.ts +3 -0
- package/lib/shared/services/masterlayout.service.d.ts +3 -0
- package/lib/shared/services/requesthandler.service.d.ts +3 -0
- package/lib/shared/services/stylesbundle.service.d.ts +3 -0
- package/lib/shared/services/translate.service.d.ts +3 -0
- package/lib/shared/services/translationresolver.service.d.ts +3 -0
- package/lib/shared/services/utility.service.d.ts +3 -0
- package/package.json +19 -7
- package/bnsights-bbsf-utilities-1.0.31.tgz +0 -0
- package/bnsights-bbsf-utilities.metadata.json +0 -1
- package/bundles/bnsights-bbsf-utilities.umd.js +0 -1485
- package/bundles/bnsights-bbsf-utilities.umd.js.map +0 -1
- package/esm2015/lib/bbsf-utilities.module.js +0 -52
- package/esm2015/lib/shared/authentication/auth.service.js +0 -236
- package/esm2015/lib/shared/services/AppearanceConfiguration.service.js +0 -37
- package/esm2015/lib/shared/services/configuration.service.js +0 -26
- package/esm2015/lib/shared/services/controlvalidation.service.js +0 -168
- package/esm2015/lib/shared/services/environment.service.js +0 -48
- package/esm2015/lib/shared/services/masterlayout.service.js +0 -96
- package/esm2015/lib/shared/services/requesthandler.service.js +0 -206
- package/esm2015/lib/shared/services/stylesbundle.service.js +0 -56
- package/esm2015/lib/shared/services/translate.service.js +0 -13
- package/esm2015/lib/shared/services/translationresolver.service.js +0 -20
- package/esm2015/lib/shared/services/utility.service.js +0 -96
- package/fesm2015/bnsights-bbsf-utilities.js.map +0 -1
package/README.md
CHANGED
|
@@ -6,12 +6,15 @@ For more info please visit [BBSF Controls documenation](https://bbsfadmin.bnsigh
|
|
|
6
6
|
|
|
7
7
|
# Change Log
|
|
8
8
|
|
|
9
|
+
##1.0.32 / 22-2-2023 (!!!Warning!! Testing Release)
|
|
10
|
+
===================
|
|
11
|
+
* This package is only for testing angular update v13 and may include some issues
|
|
9
12
|
|
|
10
|
-
##1.0.31 / 5-1-
|
|
13
|
+
##1.0.31 / 5-1-2023
|
|
11
14
|
===================
|
|
12
15
|
* Solve Change Language Issue
|
|
13
16
|
|
|
14
|
-
##1.0.30 / 3-1-
|
|
17
|
+
##1.0.30 / 3-1-2023
|
|
15
18
|
===================
|
|
16
19
|
* Update Auth Service With ClearUserSessionClaims Function
|
|
17
20
|
|
|
Binary file
|
|
File without changes
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { RouterModule } from '@angular/router';
|
|
4
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
5
|
+
import { BlockUIModule } from 'ng-block-ui';
|
|
6
|
+
import { ToastrModule } from 'ngx-toastr';
|
|
7
|
+
import { HttpModule } from '@angular/http';
|
|
8
|
+
import { UtilityService } from './shared/services/utility.service';
|
|
9
|
+
import { EnvironmentService } from './shared/services/environment.service';
|
|
10
|
+
import { AuthService } from './shared/authentication/auth.service';
|
|
11
|
+
import { RequestHandlerService } from './shared/services/requesthandler.service';
|
|
12
|
+
import { StylesBundleService } from './shared/services/stylesbundle.service';
|
|
13
|
+
import { BBSFTranslateService } from './shared/services/translate.service';
|
|
14
|
+
import { ControlValidationService } from './shared/services/controlvalidation.service';
|
|
15
|
+
import { MasterLayoutService } from './shared/services/masterlayout.service';
|
|
16
|
+
import { ConfigurationService } from './shared/services/configuration.service';
|
|
17
|
+
import * as i0 from "@angular/core";
|
|
18
|
+
import * as i1 from "ng-block-ui";
|
|
19
|
+
import * as i2 from "ngx-toastr";
|
|
20
|
+
export let AppInjector;
|
|
21
|
+
export class BBSFUtilitiesModule {
|
|
22
|
+
constructor(injector) {
|
|
23
|
+
this.injector = injector;
|
|
24
|
+
AppInjector = this.injector;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
BBSFUtilitiesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BBSFUtilitiesModule, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule });
|
|
28
|
+
BBSFUtilitiesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BBSFUtilitiesModule, imports: [CommonModule, i1.BlockUIModule, HttpModule,
|
|
29
|
+
RouterModule, i2.ToastrModule] });
|
|
30
|
+
BBSFUtilitiesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BBSFUtilitiesModule, providers: [
|
|
31
|
+
UtilityService,
|
|
32
|
+
EnvironmentService,
|
|
33
|
+
AuthService,
|
|
34
|
+
RequestHandlerService,
|
|
35
|
+
StylesBundleService,
|
|
36
|
+
TranslateService,
|
|
37
|
+
BBSFTranslateService,
|
|
38
|
+
ControlValidationService,
|
|
39
|
+
MasterLayoutService,
|
|
40
|
+
ConfigurationService
|
|
41
|
+
], imports: [[
|
|
42
|
+
CommonModule,
|
|
43
|
+
BlockUIModule.forRoot(),
|
|
44
|
+
HttpModule,
|
|
45
|
+
RouterModule,
|
|
46
|
+
ToastrModule.forRoot(),
|
|
47
|
+
]] });
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BBSFUtilitiesModule, decorators: [{
|
|
49
|
+
type: NgModule,
|
|
50
|
+
args: [{
|
|
51
|
+
declarations: [],
|
|
52
|
+
imports: [
|
|
53
|
+
CommonModule,
|
|
54
|
+
BlockUIModule.forRoot(),
|
|
55
|
+
HttpModule,
|
|
56
|
+
RouterModule,
|
|
57
|
+
ToastrModule.forRoot(),
|
|
58
|
+
],
|
|
59
|
+
exports: [],
|
|
60
|
+
providers: [
|
|
61
|
+
UtilityService,
|
|
62
|
+
EnvironmentService,
|
|
63
|
+
AuthService,
|
|
64
|
+
RequestHandlerService,
|
|
65
|
+
StylesBundleService,
|
|
66
|
+
TranslateService,
|
|
67
|
+
BBSFTranslateService,
|
|
68
|
+
ControlValidationService,
|
|
69
|
+
MasterLayoutService,
|
|
70
|
+
ConfigurationService
|
|
71
|
+
]
|
|
72
|
+
}]
|
|
73
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJzZi11dGlsaXRpZXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi11dGlsaXRpZXMvc3JjL2xpYi9iYnNmLXV0aWxpdGllcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBWSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7QUFFL0UsTUFBTSxDQUFDLElBQUksV0FBcUIsQ0FBQztBQTZCakMsTUFBTSxPQUFPLG1CQUFtQjtJQUU5QixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBRTlCLENBQUM7O2lIQUxVLG1CQUFtQjtrSEFBbkIsbUJBQW1CLFlBdkI1QixZQUFZLG9CQUVaLFVBQVU7UUFDVixZQUFZO2tIQW9CSCxtQkFBbUIsYUFicEI7UUFDUixjQUFjO1FBQ2Qsa0JBQWtCO1FBQ2xCLFdBQVc7UUFDWCxxQkFBcUI7UUFDckIsbUJBQW1CO1FBQ25CLGdCQUFnQjtRQUNoQixvQkFBb0I7UUFDcEIsd0JBQXdCO1FBQ3hCLG1CQUFtQjtRQUNuQixvQkFBb0I7S0FDckIsWUF0QlE7WUFDUCxZQUFZO1lBQ1osYUFBYSxDQUFDLE9BQU8sRUFBRTtZQUN2QixVQUFVO1lBQ1YsWUFBWTtZQUNaLFlBQVksQ0FBQyxPQUFPLEVBQUU7U0FFdkI7NEZBaUJVLG1CQUFtQjtrQkEzQi9CLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLEVBQ2I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osYUFBYSxDQUFDLE9BQU8sRUFBRTt3QkFDdkIsVUFBVTt3QkFDVixZQUFZO3dCQUNaLFlBQVksQ0FBQyxPQUFPLEVBQUU7cUJBRXZCO29CQUNELE9BQU8sRUFBRSxFQUVSO29CQUNELFNBQVMsRUFBQzt3QkFDUixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsV0FBVzt3QkFDWCxxQkFBcUI7d0JBQ3JCLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixvQkFBb0I7d0JBQ3BCLHdCQUF3Qjt3QkFDeEIsbUJBQW1CO3dCQUNuQixvQkFBb0I7cUJBQ3JCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0b3IsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQmxvY2tVSU1vZHVsZSB9IGZyb20gJ25nLWJsb2NrLXVpJztcclxuaW1wb3J0IHsgVG9hc3RyTW9kdWxlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IEh0dHBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9odHRwJztcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcy91dGlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcy9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9hdXRoZW50aWNhdGlvbi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXF1ZXN0SGFuZGxlclNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcy9yZXF1ZXN0aGFuZGxlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3R5bGVzQnVuZGxlU2VydmljZSB9IGZyb20gJy4vc2hhcmVkL3NlcnZpY2VzL3N0eWxlc2J1bmRsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQkJTRlRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcy90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vc2hhcmVkL3NlcnZpY2VzL2NvbnRyb2x2YWxpZGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXN0ZXJMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvc2VydmljZXMvbWFzdGVybGF5b3V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vc2hhcmVkL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcblxyXG5leHBvcnQgbGV0IEFwcEluamVjdG9yOiBJbmplY3RvcjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBCbG9ja1VJTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIEh0dHBNb2R1bGUsXHJcbiAgICBSb3V0ZXJNb2R1bGUsXHJcbiAgICBUb2FzdHJNb2R1bGUuZm9yUm9vdCgpLFxyXG5cclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOltcclxuICAgIFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgQXV0aFNlcnZpY2UsXHJcbiAgICBSZXF1ZXN0SGFuZGxlclNlcnZpY2UsXHJcbiAgICBTdHlsZXNCdW5kbGVTZXJ2aWNlLFxyXG4gICAgVHJhbnNsYXRlU2VydmljZSxcclxuICAgIEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgTWFzdGVyTGF5b3V0U2VydmljZSxcclxuICAgIENvbmZpZ3VyYXRpb25TZXJ2aWNlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQkJTRlV0aWxpdGllc01vZHVsZSB7IFxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgQXBwSW5qZWN0b3IgPSB0aGlzLmluamVjdG9yO1xyXG5cclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { HttpHeaders } from '@angular/common/http';
|
|
3
|
+
import { UserManager, WebStorageStateStore, } from 'oidc-client';
|
|
4
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
5
|
+
import { MasterLayoutService } from '../services/masterlayout.service';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/common/http";
|
|
8
|
+
import * as i2 from "../services/environment.service";
|
|
9
|
+
import * as i3 from "../services/translate.service";
|
|
10
|
+
import * as i4 from "@angular/router";
|
|
11
|
+
export class AuthService {
|
|
12
|
+
constructor(injector, http, environmentService, translateService, router) {
|
|
13
|
+
this.injector = injector;
|
|
14
|
+
this.http = http;
|
|
15
|
+
this.environmentService = environmentService;
|
|
16
|
+
this.translateService = translateService;
|
|
17
|
+
this.router = router;
|
|
18
|
+
// Observable navItem source
|
|
19
|
+
this._authNavStatusSource = new BehaviorSubject(false);
|
|
20
|
+
// Observable navItem stream
|
|
21
|
+
this.authNavStatus$ = this._authNavStatusSource.asObservable();
|
|
22
|
+
// Observable navItem source
|
|
23
|
+
this._userSource = new Subject();
|
|
24
|
+
this.UserStatus$ = this._userSource.asObservable();
|
|
25
|
+
this.manager = this.getUserManager();
|
|
26
|
+
this.redirectUrl = '';
|
|
27
|
+
this.manager.getUser().then(async (user) => {
|
|
28
|
+
this.manager.storeUser(user);
|
|
29
|
+
AuthService.user = user;
|
|
30
|
+
this.user = user;
|
|
31
|
+
this._authNavStatusSource.next(await this.isAuthenticated());
|
|
32
|
+
});
|
|
33
|
+
this.manager.events.addAccessTokenExpired((_) => {
|
|
34
|
+
this._authNavStatusSource.next(false);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
getUserManager() {
|
|
38
|
+
let user = null;
|
|
39
|
+
let isExternal = this.environmentService.getIsIdentityServerExternal().toLowerCase() ==
|
|
40
|
+
'true';
|
|
41
|
+
if (isExternal) {
|
|
42
|
+
user = new UserManager({
|
|
43
|
+
authority: this.environmentService.getIdentityServerUrl(),
|
|
44
|
+
client_id: this.environmentService.getIsIdentityServerClientId(),
|
|
45
|
+
client_secret: this.environmentService.getIsIdentityServerClientSecret(),
|
|
46
|
+
redirect_uri: this.environmentService.getBaseUrl() +
|
|
47
|
+
'/Admin/authentication/auth-callback',
|
|
48
|
+
post_logout_redirect_uri: this.environmentService.getBaseUrl(),
|
|
49
|
+
response_type: 'code',
|
|
50
|
+
scope: 'openid profile email',
|
|
51
|
+
filterProtocolClaims: true,
|
|
52
|
+
loadUserInfo: true,
|
|
53
|
+
automaticSilentRenew: true,
|
|
54
|
+
silent_redirect_uri: this.environmentService.getBaseUrl() + '/assets/silent-callback.html',
|
|
55
|
+
userStore: new WebStorageStateStore({ store: window.localStorage }),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
user = new UserManager({
|
|
60
|
+
authority: this.environmentService.getIdentityServerUrl(),
|
|
61
|
+
client_id: 'angular_spa',
|
|
62
|
+
redirect_uri: this.environmentService.getBaseUrl() +
|
|
63
|
+
'/Admin/authentication/auth-callback',
|
|
64
|
+
post_logout_redirect_uri: this.environmentService.getBaseUrl(),
|
|
65
|
+
response_type: 'id_token token',
|
|
66
|
+
scope: 'openid profile email IdentityServerApi',
|
|
67
|
+
filterProtocolClaims: true,
|
|
68
|
+
loadUserInfo: true,
|
|
69
|
+
automaticSilentRenew: true,
|
|
70
|
+
silent_redirect_uri: this.environmentService.getBaseUrl() + '/assets/silent-callback.html',
|
|
71
|
+
userStore: new WebStorageStateStore({ store: window.localStorage }),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return user;
|
|
75
|
+
}
|
|
76
|
+
login() {
|
|
77
|
+
return this.manager.signinRedirect();
|
|
78
|
+
}
|
|
79
|
+
getUser() {
|
|
80
|
+
this.manager.getUser().then(async (user) => {
|
|
81
|
+
AuthService.user = user;
|
|
82
|
+
this.user = user;
|
|
83
|
+
this._authNavStatusSource.next(await this.isAuthenticated());
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
storUser(User) {
|
|
87
|
+
this.manager.storeUser(User);
|
|
88
|
+
}
|
|
89
|
+
revokeAccessToken() {
|
|
90
|
+
this.manager.revokeAccessToken();
|
|
91
|
+
}
|
|
92
|
+
signinSilent() {
|
|
93
|
+
let x = this.manager.signinSilentCallback();
|
|
94
|
+
x.then((s) => {
|
|
95
|
+
//console.log(s)
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async completeAuthentication() {
|
|
99
|
+
this.user = await this.manager.signinRedirectCallback();
|
|
100
|
+
AuthService.user = this.user;
|
|
101
|
+
this._userSource.next(AuthService.user);
|
|
102
|
+
this._authNavStatusSource.next(await this.isAuthenticated());
|
|
103
|
+
let isExternal = this.environmentService.getIsIdentityServerExternal().toLowerCase() ==
|
|
104
|
+
'true';
|
|
105
|
+
if (isExternal) {
|
|
106
|
+
const masterLayoutService = this.injector.get(MasterLayoutService);
|
|
107
|
+
let userClaims = await masterLayoutService
|
|
108
|
+
.getUserClaims()
|
|
109
|
+
.toPromise()
|
|
110
|
+
.then((e) => {
|
|
111
|
+
AuthService.UserClaims = e;
|
|
112
|
+
}, (error) => {
|
|
113
|
+
console.log(error);
|
|
114
|
+
});
|
|
115
|
+
AuthService.user.profile = Object.assign(AuthService.user.profile, AuthService.UserClaims);
|
|
116
|
+
}
|
|
117
|
+
this.storUser(AuthService.user);
|
|
118
|
+
if (!localStorage.getItem('language') ||
|
|
119
|
+
localStorage.getItem('language') == this.user.profile.locale)
|
|
120
|
+
localStorage.setItem('language', this.user.profile.locale);
|
|
121
|
+
if (this.translateService.currentLang != localStorage.getItem('language')) {
|
|
122
|
+
this.translateService.resetLang(this.translateService.currentLang);
|
|
123
|
+
await this.translateService
|
|
124
|
+
.reloadLang(localStorage.getItem('language'))
|
|
125
|
+
.subscribe((res) => {
|
|
126
|
+
console.log(res);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
this._userSource.next(AuthService.user);
|
|
130
|
+
this._authNavStatusSource.next(await this.isAuthenticated());
|
|
131
|
+
this.user = AuthService.user;
|
|
132
|
+
}
|
|
133
|
+
async refreshToken(token) {
|
|
134
|
+
const httpOptions = {
|
|
135
|
+
headers: new HttpHeaders({
|
|
136
|
+
'Content-Type': 'application/json',
|
|
137
|
+
Authorization: token,
|
|
138
|
+
}),
|
|
139
|
+
};
|
|
140
|
+
this.manager.revokeAccessToken();
|
|
141
|
+
return await this.http
|
|
142
|
+
.post(`${this.environmentService.getIdentityServerUrl()}/users/refresh-token`, httpOptions, { withCredentials: true })
|
|
143
|
+
.subscribe((user) => {
|
|
144
|
+
this._userSource.next(user);
|
|
145
|
+
AuthService.user = user;
|
|
146
|
+
this.user = user;
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
getCurrentUser() {
|
|
150
|
+
return this.manager.getUser();
|
|
151
|
+
}
|
|
152
|
+
async isAuthenticated() {
|
|
153
|
+
let user = await this.manager.getUser().then((user) => {
|
|
154
|
+
return user;
|
|
155
|
+
});
|
|
156
|
+
return this.user != null && !this.user.expired;
|
|
157
|
+
}
|
|
158
|
+
isUserInRole(allowedPermission) {
|
|
159
|
+
let selectedPermissionSetID = Number.parseInt(this.user.profile['selectedpermissionsetid']);
|
|
160
|
+
return allowedPermission.includes(selectedPermissionSetID);
|
|
161
|
+
}
|
|
162
|
+
authorizationHeaderValue() {
|
|
163
|
+
return AuthService.user
|
|
164
|
+
? `${AuthService.user.token_type} ${AuthService.user.access_token}`
|
|
165
|
+
: '';
|
|
166
|
+
}
|
|
167
|
+
name() {
|
|
168
|
+
return AuthService.user != null ? AuthService.user.profile.given_name : '';
|
|
169
|
+
}
|
|
170
|
+
setUrl(url) {
|
|
171
|
+
localStorage.setItem('redirectUrl', url);
|
|
172
|
+
}
|
|
173
|
+
getUrl() {
|
|
174
|
+
return localStorage.getItem('redirectUrl');
|
|
175
|
+
}
|
|
176
|
+
async signinSilentCallback() {
|
|
177
|
+
let user = await this.manager.signinSilentCallback();
|
|
178
|
+
//await this.manager.storeUser(user);
|
|
179
|
+
AuthService.user = user;
|
|
180
|
+
console.log('Token from signinSilentCallback :' + AuthService.user);
|
|
181
|
+
this.user = user;
|
|
182
|
+
}
|
|
183
|
+
async signout() {
|
|
184
|
+
if (await !this.isAuthenticated())
|
|
185
|
+
this.router.navigate(['/Admin/account/login']), localStorage.clear();
|
|
186
|
+
let isExternal = this.environmentService.getIsIdentityServerExternal().toLowerCase() ==
|
|
187
|
+
'true';
|
|
188
|
+
if (isExternal) {
|
|
189
|
+
await this.clearUserSessionClaims()
|
|
190
|
+
.toPromise()
|
|
191
|
+
.then((res) => {
|
|
192
|
+
let result = res;
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
await this.manager.signoutRedirect();
|
|
196
|
+
}
|
|
197
|
+
clearUserSessionClaims() {
|
|
198
|
+
const httpOptions = {
|
|
199
|
+
headers: new HttpHeaders({
|
|
200
|
+
'Content-Type': 'application/json',
|
|
201
|
+
}),
|
|
202
|
+
};
|
|
203
|
+
let ApiUrl = '/api/Home/';
|
|
204
|
+
return this.http.get(this.environmentService.getBaseUrl() + ApiUrl + 'ClearCurrentUserSession', httpOptions);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
AuthService.user = null;
|
|
208
|
+
AuthService.UserClaims = null;
|
|
209
|
+
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AuthService, deps: [{ token: i0.Injector }, { token: i1.HttpClient }, { token: i2.EnvironmentService }, { token: i3.BBSFTranslateService }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
210
|
+
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
211
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AuthService, decorators: [{
|
|
212
|
+
type: Injectable,
|
|
213
|
+
args: [{
|
|
214
|
+
providedIn: 'root',
|
|
215
|
+
}]
|
|
216
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.HttpClient }, { type: i2.EnvironmentService }, { type: i3.BBSFTranslateService }, { type: i4.Router }]; } });
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi11dGlsaXRpZXMvc3JjL2xpYi9zaGFyZWQvYXV0aGVudGljYXRpb24vYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9ELE9BQU8sRUFDTCxXQUFXLEVBR1gsb0JBQW9CLEdBQ3JCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSWhELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7QUFNdkUsTUFBTSxPQUFPLFdBQVc7SUFjdEIsWUFDVSxRQUFrQixFQUNsQixJQUFnQixFQUNoQixrQkFBc0MsRUFDdEMsZ0JBQXNDLEVBQ3RDLE1BQWM7UUFKZCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXNCO1FBQ3RDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFsQnhCLDRCQUE0QjtRQUNwQix5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNuRSw0QkFBNEI7UUFDNUIsbUJBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUQsNEJBQTRCO1FBQ3BCLGdCQUFXLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFDekQsZ0JBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RDLFlBQU8sR0FBRyxJQUFJLENB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R0FBRyx5QkFBeUIsRUFBQyxXQUFXLENBQUMsQ0FBQztJQUM5RyxDQUFDOztBQTlOTSxnQkFBSSxHQUFnQixJQUFLLENBQUE7QUFFekIsc0JBQVUsR0FBUSxJQUFLLENBQUE7eUdBWm5CLFdBQVc7NkdBQVgsV0FBVyxjQUZWLE1BQU07NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtcclxuICBVc2VyTWFuYWdlcixcclxuICBVc2VyTWFuYWdlclNldHRpbmdzLFxyXG4gIFVzZXIsXHJcbiAgV2ViU3RvcmFnZVN0YXRlU3RvcmUsXHJcbn0gZnJvbSAnb2lkYy1jbGllbnQnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZW52aXJvbm1lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBNYXN0ZXJMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWFzdGVybGF5b3V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXF1ZXN0SGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZXF1ZXN0aGFuZGxlci5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XHJcbiAgLy8gT2JzZXJ2YWJsZSBuYXZJdGVtIHNvdXJjZVxyXG4gIHByaXZhdGUgX2F1dGhOYXZTdGF0dXNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAvLyBPYnNlcnZhYmxlIG5hdkl0ZW0gc3RyZWFtXHJcbiAgYXV0aE5hdlN0YXR1cyQgPSB0aGlzLl9hdXRoTmF2U3RhdHVzU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIC8vIE9ic2VydmFibGUgbmF2SXRlbSBzb3VyY2VcclxuICBwcml2YXRlIF91c2VyU291cmNlOiBTdWJqZWN0PFVzZXI+ID0gbmV3IFN1YmplY3Q8VXNlcj4oKTtcclxuICBVc2VyU3RhdHVzJCA9IHRoaXMuX3VzZXJTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJpdmF0ZSBtYW5hZ2VyID0gdGhpcy5nZXRVc2VyTWFuYWdlcigpO1xyXG4gIHB1YmxpYyByZWRpcmVjdFVybDogc3RyaW5nID0gJyc7XHJcbiAgc3RhdGljIHVzZXI6IFVzZXIgfCBudWxsID0gbnVsbDtcclxuICB1c2VyOiBVc2VyIHwgbnVsbDtcclxuICBzdGF0aWMgVXNlckNsYWltczogYW55ID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICkge1xyXG4gICAgdGhpcy5tYW5hZ2VyLmdldFVzZXIoKS50aGVuKGFzeW5jICh1c2VyKSA9PiB7XHJcbiAgICAgIHRoaXMubWFuYWdlci5zdG9yZVVzZXIodXNlcik7XHJcbiAgICAgIEF1dGhTZXJ2aWNlLnVzZXIgPSB1c2VyO1xyXG4gICAgICB0aGlzLnVzZXIgPSB1c2VyO1xyXG4gICAgICB0aGlzLl9hdXRoTmF2U3RhdHVzU291cmNlLm5leHQoYXdhaXQgdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMubWFuYWdlci5ldmVudHMuYWRkQWNjZXNzVG9rZW5FeHBpcmVkKChfKSA9PiB7XHJcbiAgICAgIHRoaXMuX2F1dGhOYXZTdGF0dXNTb3VyY2UubmV4dChmYWxzZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJNYW5hZ2VyKCkge1xyXG4gICAgbGV0IHVzZXIgPSBudWxsO1xyXG4gICAgbGV0IGlzRXh0ZXJuYWwgPVxyXG4gICAgICB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRJc0lkZW50aXR5U2VydmVyRXh0ZXJuYWwoKS50b0xvd2VyQ2FzZSgpID09XHJcbiAgICAgICd0cnVlJztcclxuICAgIGlmIChpc0V4dGVybmFsKSB7XHJcbiAgICAgIHVzZXIgPSBuZXcgVXNlck1hbmFnZXIoe1xyXG4gICAgICAgIGF1dGhvcml0eTogdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0SWRlbnRpdHlTZXJ2ZXJVcmwoKSxcclxuICAgICAgICBjbGllbnRfaWQ6IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldElzSWRlbnRpdHlTZXJ2ZXJDbGllbnRJZCgpLFxyXG4gICAgICAgIGNsaWVudF9zZWNyZXQ6XHJcbiAgICAgICAgICB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRJc0lkZW50aXR5U2VydmVyQ2xpZW50U2VjcmV0KCksXHJcbiAgICAgICAgcmVkaXJlY3RfdXJpOlxyXG4gICAgICAgICAgdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QmFzZVVybCgpICtcclxuICAgICAgICAgICcvQWRtaW4vYXV0aGVudGljYXRpb24vYXV0aC1jYWxsYmFjaycsXHJcbiAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpOiB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRCYXNlVXJsKCksXHJcbiAgICAgICAgcmVzcG9uc2VfdHlwZTogJ2NvZGUnLFxyXG4gICAgICAgIHNjb3BlOiAnb3BlbmlkIHByb2ZpbGUgZW1haWwnLFxyXG4gICAgICAgIGZpbHRlclByb3RvY29sQ2xhaW1zOiB0cnVlLFxyXG4gICAgICAgIGxvYWRVc2VySW5mbzogdHJ1ZSxcclxuICAgICAgICBhdXRvbWF0aWNTaWxlbnRSZW5ldzogdHJ1ZSxcclxuICAgICAgICBzaWxlbnRfcmVkaXJlY3RfdXJpOlxyXG4gICAgICAgICAgdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QmFzZVVybCgpICsgJy9hc3NldHMvc2lsZW50LWNhbGxiYWNrLmh0bWwnLFxyXG4gICAgICAgIHVzZXJTdG9yZTogbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKHsgc3RvcmU6IHdpbmRvdy5sb2NhbFN0b3JhZ2UgfSksXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXNlciA9IG5ldyBVc2VyTWFuYWdlcih7XHJcbiAgICAgICAgYXV0aG9yaXR5OiB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRJZGVudGl0eVNlcnZlclVybCgpLFxyXG4gICAgICAgIGNsaWVudF9pZDogJ2FuZ3VsYXJfc3BhJyxcclxuICAgICAgICByZWRpcmVjdF91cmk6XHJcbiAgICAgICAgICB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRCYXNlVXJsKCkgK1xyXG4gICAgICAgICAgJy9BZG1pbi9hdXRoZW50aWNhdGlvbi9hdXRoLWNhbGxiYWNrJyxcclxuICAgICAgICBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmk6IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEJhc2VVcmwoKSxcclxuICAgICAgICByZXNwb25zZV90eXBlOiAnaWRfdG9rZW4gdG9rZW4nLFxyXG4gICAgICAgIHNjb3BlOiAnb3BlbmlkIHByb2ZpbGUgZW1haWwgSWRlbnRpdHlTZXJ2ZXJBcGknLFxyXG4gICAgICAgIGZpbHRlclByb3RvY29sQ2xhaW1zOiB0cnVlLFxyXG4gICAgICAgIGxvYWRVc2VySW5mbzogdHJ1ZSxcclxuICAgICAgICBhdXRvbWF0aWNTaWxlbnRSZW5ldzogdHJ1ZSxcclxuICAgICAgICBzaWxlbnRfcmVkaXJlY3RfdXJpOlxyXG4gICAgICAgICAgdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QmFzZVVybCgpICsgJy9hc3NldHMvc2lsZW50LWNhbGxiYWNrLmh0bWwnLFxyXG4gICAgICAgIHVzZXJTdG9yZTogbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKHsgc3RvcmU6IHdpbmRvdy5sb2NhbFN0b3JhZ2UgfSksXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVzZXI7XHJcbiAgfVxyXG5cclxuICBsb2dpbigpIHtcclxuICAgIHJldHVybiB0aGlzLm1hbmFnZXIuc2lnbmluUmVkaXJlY3QoKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXIoKSB7XHJcbiAgICB0aGlzLm1hbmFnZXIuZ2V0VXNlcigpLnRoZW4oYXN5bmMgKHVzZXIpID0+IHtcclxuICAgICAgQXV0aFNlcnZpY2UudXNlciA9IHVzZXI7XHJcbiAgICAgIHRoaXMudXNlciA9IHVzZXI7XHJcbiAgICAgIHRoaXMuX2F1dGhOYXZTdGF0dXNTb3VyY2UubmV4dChhd2FpdCB0aGlzLmlzQXV0aGVudGljYXRlZCgpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBzdG9yVXNlcihVc2VyOiBhbnkpIHtcclxuICAgIHRoaXMubWFuYWdlci5zdG9yZVVzZXIoVXNlcik7XHJcbiAgfVxyXG5cclxuICByZXZva2VBY2Nlc3NUb2tlbigpIHtcclxuICAgIHRoaXMubWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbigpO1xyXG4gIH1cclxuXHJcbiAgc2lnbmluU2lsZW50KCkge1xyXG4gICAgbGV0IHggPSB0aGlzLm1hbmFnZXIuc2lnbmluU2lsZW50Q2FsbGJhY2soKTtcclxuICAgIHgudGhlbigocykgPT4ge1xyXG4gICAgICAvL2NvbnNvbGUubG9nKHMpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbXBsZXRlQXV0aGVudGljYXRpb24oKSB7XHJcbiAgICB0aGlzLnVzZXIgPSBhd2FpdCB0aGlzLm1hbmFnZXIuc2lnbmluUmVkaXJlY3RDYWxsYmFjaygpO1xyXG4gICAgQXV0aFNlcnZpY2UudXNlciA9IHRoaXMudXNlcjtcclxuICAgIHRoaXMuX3VzZXJTb3VyY2UubmV4dChBdXRoU2VydmljZS51c2VyKTtcclxuICAgIHRoaXMuX2F1dGhOYXZTdGF0dXNTb3VyY2UubmV4dChhd2FpdCB0aGlzLmlzQXV0aGVudGljYXRlZCgpKTtcclxuICAgIGxldCBpc0V4dGVybmFsID1cclxuICAgICAgdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0SXNJZGVudGl0eVNlcnZlckV4dGVybmFsKCkudG9Mb3dlckNhc2UoKSA9PVxyXG4gICAgICAndHJ1ZSc7XHJcbiAgICBpZiAoaXNFeHRlcm5hbCkge1xyXG4gICAgICBjb25zdCBtYXN0ZXJMYXlvdXRTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoTWFzdGVyTGF5b3V0U2VydmljZSk7XHJcbiAgICAgIGxldCB1c2VyQ2xhaW1zID0gYXdhaXQgbWFzdGVyTGF5b3V0U2VydmljZVxyXG4gICAgICAgIC5nZXRVc2VyQ2xhaW1zKClcclxuICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAudGhlbigoZSkgPT4ge1xyXG4gICAgICAgICAgQXV0aFNlcnZpY2UuVXNlckNsYWltcyA9IGU7XHJcbiAgICAgICAgfSwoZXJyb3IpPT57XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgICAgICB9KTtcclxuICAgICAgQXV0aFNlcnZpY2UudXNlci5wcm9maWxlID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICBBdXRoU2VydmljZS51c2VyLnByb2ZpbGUsXHJcbiAgICAgICAgQXV0aFNlcnZpY2UuVXNlckNsYWltc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RvclVzZXIoQXV0aFNlcnZpY2UudXNlcik7XHJcbiAgICBpZiAoXHJcbiAgICAgICFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKSB8fFxyXG4gICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKSA9PSB0aGlzLnVzZXIucHJvZmlsZS5sb2NhbGVcclxuICAgIClcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2xhbmd1YWdlJywgdGhpcy51c2VyLnByb2ZpbGUubG9jYWxlKTtcclxuXHJcbiAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nICE9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5ndWFnZScpKSB7XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5yZXNldExhbmcodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nKTtcclxuICAgICAgYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXHJcbiAgICAgICAgLnJlbG9hZExhbmcobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmd1YWdlJykpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXNlclNvdXJjZS5uZXh0KEF1dGhTZXJ2aWNlLnVzZXIpO1xyXG4gICAgdGhpcy5fYXV0aE5hdlN0YXR1c1NvdXJjZS5uZXh0KGF3YWl0IHRoaXMuaXNBdXRoZW50aWNhdGVkKCkpO1xyXG4gICAgdGhpcy51c2VyID0gQXV0aFNlcnZpY2UudXNlcjtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlZnJlc2hUb2tlbih0b2tlbikge1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICBBdXRob3JpemF0aW9uOiB0b2tlbixcclxuICAgICAgfSksXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMubWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbigpO1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cFxyXG4gICAgICAucG9zdDxhbnk+KFxyXG4gICAgICAgIGAke3RoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldElkZW50aXR5U2VydmVyVXJsKCl9L3VzZXJzL3JlZnJlc2gtdG9rZW5gLFxyXG4gICAgICAgIGh0dHBPcHRpb25zLFxyXG4gICAgICAgIHsgd2l0aENyZWRlbnRpYWxzOiB0cnVlIH1cclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCh1c2VyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNvdXJjZS5uZXh0KHVzZXIpO1xyXG4gICAgICAgIEF1dGhTZXJ2aWNlLnVzZXIgPSB1c2VyO1xyXG4gICAgICAgIHRoaXMudXNlciA9IHVzZXI7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVudFVzZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFVzZXIoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGlzQXV0aGVudGljYXRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCB1c2VyID0gYXdhaXQgdGhpcy5tYW5hZ2VyLmdldFVzZXIoKS50aGVuKCh1c2VyKSA9PiB7XHJcbiAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyICE9IG51bGwgJiYgIXRoaXMudXNlci5leHBpcmVkO1xyXG4gIH1cclxuICBpc1VzZXJJblJvbGUoYWxsb3dlZFBlcm1pc3Npb246IG51bWJlcltdKSB7XHJcbiAgICBsZXQgc2VsZWN0ZWRQZXJtaXNzaW9uU2V0SUQ6IG51bWJlciA9IE51bWJlci5wYXJzZUludChcclxuICAgICAgdGhpcy51c2VyLnByb2ZpbGVbJ3NlbGVjdGVkcGVybWlzc2lvbnNldGlkJ11cclxuICAgICk7XHJcbiAgICByZXR1cm4gYWxsb3dlZFBlcm1pc3Npb24uaW5jbHVkZXMoc2VsZWN0ZWRQZXJtaXNzaW9uU2V0SUQpO1xyXG4gIH1cclxuXHJcbiAgYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gQXV0aFNlcnZpY2UudXNlclxyXG4gICAgICA/IGAke0F1dGhTZXJ2aWNlLnVzZXIudG9rZW5fdHlwZX0gJHtBdXRoU2VydmljZS51c2VyLmFjY2Vzc190b2tlbn1gXHJcbiAgICAgIDogJyc7XHJcbiAgfVxyXG5cclxuICBuYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gQXV0aFNlcnZpY2UudXNlciAhPSBudWxsID8gQXV0aFNlcnZpY2UudXNlci5wcm9maWxlLmdpdmVuX25hbWUgOiAnJztcclxuICB9XHJcbiAgc2V0VXJsKHVybCkge1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3JlZGlyZWN0VXJsJywgdXJsKTtcclxuICB9XHJcbiAgZ2V0VXJsKCkge1xyXG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdyZWRpcmVjdFVybCcpO1xyXG4gIH1cclxuICBhc3luYyBzaWduaW5TaWxlbnRDYWxsYmFjaygpIHtcclxuICAgIGxldCB1c2VyID0gYXdhaXQgdGhpcy5tYW5hZ2VyLnNpZ25pblNpbGVudENhbGxiYWNrKCk7XHJcbiAgICAvL2F3YWl0IHRoaXMubWFuYWdlci5zdG9yZVVzZXIodXNlcik7XHJcbiAgICBBdXRoU2VydmljZS51c2VyID0gdXNlcjtcclxuICAgIGNvbnNvbGUubG9nKCdUb2tlbiBmcm9tICBzaWduaW5TaWxlbnRDYWxsYmFjayA6JyArIEF1dGhTZXJ2aWNlLnVzZXIpO1xyXG4gICAgdGhpcy51c2VyID0gdXNlcjtcclxuICB9XHJcbiAgYXN5bmMgc2lnbm91dCgpIHtcclxuICAgIGlmIChhd2FpdCAhdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSlcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvQWRtaW4vYWNjb3VudC9sb2dpbiddKSwgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XHJcbiAgICBsZXQgaXNFeHRlcm5hbCA9XHJcbiAgICAgIHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldElzSWRlbnRpdHlTZXJ2ZXJFeHRlcm5hbCgpLnRvTG93ZXJDYXNlKCkgPT1cclxuICAgICAgJ3RydWUnO1xyXG4gICAgaWYgKGlzRXh0ZXJuYWwpIHtcclxuICAgICAgYXdhaXQgdGhpcy5jbGVhclVzZXJTZXNzaW9uQ2xhaW1zKClcclxuICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gcmVzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5tYW5hZ2VyLnNpZ25vdXRSZWRpcmVjdCgpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJVc2VyU2Vzc2lvbkNsYWltcygpIHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgIH0pLFxyXG4gICAgfTtcclxuICAgIGxldCBBcGlVcmwgPSAnL2FwaS9Ib21lLyc7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRCYXNlVXJsKCkgKyBBcGlVcmwgKyAnQ2xlYXJDdXJyZW50VXNlclNlc3Npb24nLGh0dHBPcHRpb25zKTtcclxuICB9XHJcbn1cclxuIl19
|
package/{esm2015/lib/shared/config/environment.js → esm2020/lib/shared/config/environment.mjs}
RENAMED
|
File without changes
|
|
File without changes
|
package/{esm2015/lib/shared/models/ErrorModel.js → esm2020/lib/shared/models/ErrorModel.mjs}
RENAMED
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./configuration.service";
|
|
4
|
+
export class AppearanceConfigurationService {
|
|
5
|
+
constructor(configService) {
|
|
6
|
+
this.configService = configService;
|
|
7
|
+
}
|
|
8
|
+
getLayoutTheme() {
|
|
9
|
+
return this.configService.getConfigurationValue('AnonymousLayout_Theme');
|
|
10
|
+
}
|
|
11
|
+
getFooterText() {
|
|
12
|
+
return this.configService.getConfigurationValue('AnonymousLayout_FooterText');
|
|
13
|
+
}
|
|
14
|
+
getPageTitle() {
|
|
15
|
+
return this.configService.getConfigurationValue('AnonymousLayout_PageTitle');
|
|
16
|
+
}
|
|
17
|
+
getFavIcon() {
|
|
18
|
+
return this.configService.getConfigurationValue('AnonymousLayout_FavIcon');
|
|
19
|
+
}
|
|
20
|
+
getCustomStyles() {
|
|
21
|
+
return this.configService.getConfigurationValue('AnonymousLayout_CustomStyles');
|
|
22
|
+
}
|
|
23
|
+
getLogo() {
|
|
24
|
+
return this.configService.getConfigurationValue('AnonymousLayout_Logo');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
AppearanceConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AppearanceConfigurationService, deps: [{ token: i1.ConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
28
|
+
AppearanceConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AppearanceConfigurationService, providedIn: 'root' });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AppearanceConfigurationService, decorators: [{
|
|
30
|
+
type: Injectable,
|
|
31
|
+
args: [{
|
|
32
|
+
providedIn: 'root'
|
|
33
|
+
}]
|
|
34
|
+
}], ctorParameters: function () { return [{ type: i1.ConfigurationService }]; } });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwZWFyYW5jZUNvbmZpZ3VyYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtdXRpbGl0aWVzL3NyYy9saWIvc2hhcmVkL3NlcnZpY2VzL0FwcGVhcmFuY2VDb25maWd1cmF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBTzNDLE1BQU0sT0FBTyw4QkFBOEI7SUFDdkMsWUFBb0IsYUFBbUM7UUFBbkMsa0JBQWEsR0FBYixhQUFhLENBQXNCO0lBQ3ZELENBQUM7SUFFRCxjQUFjO1FBQ1YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUNELGFBQWE7UUFDVCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBQ0QsWUFBWTtRQUNSLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFDRCxVQUFVO1FBQ04sT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELGVBQWU7UUFDWCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQ0QsT0FBTztRQUNILE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzVFLENBQUM7OzRIQXJCUSw4QkFBOEI7Z0lBQTlCLDhCQUE4QixjQUYzQixNQUFNOzRGQUVULDhCQUE4QjtrQkFIMUMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4vY29uZmlndXJhdGlvbi5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwcGVhcmFuY2VDb25maWd1cmF0aW9uU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGF5b3V0VGhlbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWd1cmF0aW9uVmFsdWUoJ0Fub255bW91c0xheW91dF9UaGVtZScpO1xyXG4gICAgfVxyXG4gICAgZ2V0Rm9vdGVyVGV4dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLmdldENvbmZpZ3VyYXRpb25WYWx1ZSgnQW5vbnltb3VzTGF5b3V0X0Zvb3RlclRleHQnKTtcclxuICAgIH1cclxuICAgIGdldFBhZ2VUaXRsZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLmdldENvbmZpZ3VyYXRpb25WYWx1ZSgnQW5vbnltb3VzTGF5b3V0X1BhZ2VUaXRsZScpO1xyXG4gICAgfVxyXG4gICAgZ2V0RmF2SWNvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLmdldENvbmZpZ3VyYXRpb25WYWx1ZSgnQW5vbnltb3VzTGF5b3V0X0Zhdkljb24nKTtcclxuICAgIH1cclxuICAgIGdldEN1c3RvbVN0eWxlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLmdldENvbmZpZ3VyYXRpb25WYWx1ZSgnQW5vbnltb3VzTGF5b3V0X0N1c3RvbVN0eWxlcycpO1xyXG4gICAgfVxyXG4gICAgZ2V0TG9nbygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLmdldENvbmZpZ3VyYXRpb25WYWx1ZSgnQW5vbnltb3VzTGF5b3V0X0xvZ28nKTtcclxuICAgIH1cclxufSJdfQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common/http";
|
|
4
|
+
export class ConfigurationService {
|
|
5
|
+
constructor(httpClient) {
|
|
6
|
+
this.httpClient = httpClient;
|
|
7
|
+
this.httpClient.get("./assets/config/configurations.json").subscribe(data => {
|
|
8
|
+
ConfigurationService.JsonData = data;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
getConfigurationValue(key) {
|
|
12
|
+
return ConfigurationService.JsonData[key];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
ConfigurationService.JsonData = [];
|
|
16
|
+
ConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ConfigurationService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
17
|
+
ConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ConfigurationService, providedIn: 'root' });
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ConfigurationService, decorators: [{
|
|
19
|
+
type: Injectable,
|
|
20
|
+
args: [{
|
|
21
|
+
providedIn: 'root'
|
|
22
|
+
}]
|
|
23
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi11dGlsaXRpZXMvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU0zQyxNQUFNLE9BQU8sb0JBQW9CO0lBRTdCLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMscUNBQXFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEUsb0JBQW9CLENBQUMsUUFBUSxHQUFHLElBQWEsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQTtJQUNSLENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxHQUFVO1FBQzVCLE9BQVEsb0JBQW9CLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7O0FBUkssNkJBQVEsR0FBTyxFQUFFLENBQUE7a0hBRGQsb0JBQW9CO3NIQUFwQixvQkFBb0IsY0FGakIsTUFBTTs0RkFFVCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25TZXJ2aWNlIHtcclxuICAgc3RhdGljIEpzb25EYXRhOmFueVtdPVtdXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQpe1xyXG4gICAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoXCIuL2Fzc2V0cy9jb25maWcvY29uZmlndXJhdGlvbnMuanNvblwiKS5zdWJzY3JpYmUoZGF0YSA9PntcclxuICAgICAgICAgICAgQ29uZmlndXJhdGlvblNlcnZpY2UuSnNvbkRhdGEgPSBkYXRhIGFzIGFueVtdO1xyXG4gICAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGdldENvbmZpZ3VyYXRpb25WYWx1ZShrZXk6c3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuICBDb25maWd1cmF0aW9uU2VydmljZS5Kc29uRGF0YVtrZXldO1xyXG4gICAgfVxyXG59Il19
|