@cleavelandprice/ngx-lib 2.2.2 → 2.3.8
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 +6 -616
- package/active-directory/active-directory.module.d.ts +11 -0
- package/active-directory/index.d.ts +5 -0
- package/active-directory/model/ad-object.d.ts +13 -0
- package/active-directory/model/cache-object.d.ts +4 -0
- package/active-directory/model/caching-config.d.ts +4 -0
- package/active-directory/model/default-caching-config.d.ts +2 -0
- package/active-directory/model/default-config.d.ts +2 -0
- package/active-directory/model/default-logging-config.d.ts +2 -0
- package/active-directory/model/logging-config.d.ts +6 -0
- package/active-directory/model/service-config.d.ts +7 -0
- package/active-directory/model/user-or-group.d.ts +7 -0
- package/active-directory/model/user.d.ts +23 -0
- package/active-directory/public_api.d.ts +8 -0
- package/active-directory/services/active-directory.service.d.ts +18 -0
- package/authentication/authentication.module.d.ts +20 -0
- package/authentication/components/login/login.component.d.ts +13 -0
- package/authentication/components/login-form/login-form.component.d.ts +23 -0
- package/authentication/index.d.ts +5 -0
- package/authentication/model/authenticated-user.d.ts +9 -0
- package/authentication/model/authentication-request.d.ts +6 -0
- package/{src/authentication → authentication}/model/authentication-token.d.ts +0 -0
- package/authentication/model/default-config.d.ts +2 -0
- package/authentication/model/login-form-data.d.ts +3 -0
- package/authentication/model/service-config.d.ts +3 -0
- package/authentication/public_api.d.ts +9 -0
- package/authentication/services/authentication.service.d.ts +25 -0
- package/dialog/components/base/base.component.d.ts +20 -0
- package/dialog/components/confirmation/confirmation.component.d.ts +12 -0
- package/dialog/components/input/input.component.d.ts +12 -0
- package/dialog/components/message/message.component.d.ts +12 -0
- package/dialog/dialog.module.d.ts +17 -0
- package/dialog/index.d.ts +5 -0
- package/{src/dialog/model/confirmation-dialog-mode.enum.d.ts → dialog/model/confirmation-dialog-mode.d.ts} +0 -0
- package/dialog/model/dialog-base-data.d.ts +10 -0
- package/dialog/model/dialog-type.d.ts +5 -0
- package/dialog/public_api.d.ts +8 -0
- package/esm2020/active-directory/active-directory.module.mjs +38 -0
- package/esm2020/active-directory/cleavelandprice-ngx-lib-active-directory.mjs +5 -0
- package/esm2020/active-directory/model/ad-object.mjs +2 -0
- package/esm2020/active-directory/model/cache-object.mjs +3 -0
- package/esm2020/active-directory/model/caching-config.mjs +2 -0
- package/esm2020/active-directory/model/default-caching-config.mjs +5 -0
- package/esm2020/active-directory/model/default-config.mjs +8 -0
- package/esm2020/active-directory/model/default-logging-config.mjs +7 -0
- package/esm2020/active-directory/model/logging-config.mjs +2 -0
- package/esm2020/active-directory/model/service-config.mjs +3 -0
- package/esm2020/active-directory/model/user-or-group.mjs +2 -0
- package/esm2020/active-directory/model/user.mjs +2 -0
- package/esm2020/active-directory/public_api.mjs +9 -0
- package/esm2020/active-directory/services/active-directory.service.mjs +89 -0
- package/esm2020/authentication/authentication.module.mjs +77 -0
- package/esm2020/authentication/cleavelandprice-ngx-lib-authentication.mjs +5 -0
- package/esm2020/authentication/components/login/login.component.mjs +39 -0
- package/esm2020/authentication/components/login-form/login-form.component.mjs +60 -0
- package/esm2020/authentication/model/authenticated-user.mjs +2 -0
- package/esm2020/authentication/model/authentication-request.mjs +2 -0
- package/esm2020/authentication/model/authentication-token.mjs +2 -0
- package/esm2020/authentication/model/default-config.mjs +4 -0
- package/esm2020/authentication/model/login-form-data.mjs +2 -0
- package/esm2020/authentication/model/service-config.mjs +3 -0
- package/esm2020/authentication/public_api.mjs +11 -0
- package/esm2020/authentication/services/authentication.service.mjs +120 -0
- package/esm2020/cleavelandprice-ngx-lib.mjs +1 -1
- package/esm2020/dialog/cleavelandprice-ngx-lib-dialog.mjs +5 -0
- package/esm2020/dialog/components/base/base.component.mjs +84 -0
- package/esm2020/dialog/components/confirmation/confirmation.component.mjs +23 -0
- package/esm2020/dialog/components/input/input.component.mjs +23 -0
- package/esm2020/dialog/components/message/message.component.mjs +23 -0
- package/esm2020/dialog/dialog.module.mjs +63 -0
- package/esm2020/dialog/model/confirmation-dialog-mode.mjs +8 -0
- package/esm2020/dialog/model/dialog-base-data.mjs +2 -0
- package/esm2020/dialog/model/dialog-type.mjs +7 -0
- package/esm2020/dialog/public_api.mjs +9 -0
- package/esm2020/lib/ngx-lib.module.mjs +16 -0
- package/esm2020/public_api.mjs +5 -8
- package/esm2020/sharepoint/cleavelandprice-ngx-lib-sharepoint.mjs +5 -0
- package/esm2020/sharepoint/model/base-item.mjs +2 -0
- package/esm2020/sharepoint/model/base-request-credential.mjs +2 -0
- package/esm2020/sharepoint/model/base-request.mjs +2 -0
- package/esm2020/sharepoint/model/cache-object.mjs +3 -0
- package/esm2020/sharepoint/model/caching-config.mjs +2 -0
- package/esm2020/sharepoint/model/default-config.mjs +25 -0
- package/esm2020/sharepoint/model/file-request.mjs +2 -0
- package/esm2020/sharepoint/model/folder-request.mjs +2 -0
- package/esm2020/sharepoint/model/list-item.mjs +2 -0
- package/esm2020/sharepoint/model/list-items-request.mjs +2 -0
- package/esm2020/sharepoint/model/logging-config.mjs +2 -0
- package/esm2020/sharepoint/model/photo-item.mjs +2 -0
- package/esm2020/sharepoint/model/service-config.mjs +3 -0
- package/esm2020/sharepoint/model/uri-request.mjs +2 -0
- package/esm2020/sharepoint/model/user-request.mjs +2 -0
- package/esm2020/sharepoint/model/user.mjs +2 -0
- package/esm2020/sharepoint/public_api.mjs +18 -0
- package/esm2020/sharepoint/services/sharepoint.service.mjs +152 -0
- package/esm2020/sharepoint/sharepoint.module.mjs +38 -0
- package/esm2020/upload/cleavelandprice-ngx-lib-upload.mjs +5 -0
- package/esm2020/upload/components/upload/upload.component.mjs +33 -0
- package/esm2020/upload/components/upload-dialog/upload-dialog.component.mjs +92 -0
- package/esm2020/upload/model/database-file-info.mjs +2 -0
- package/esm2020/upload/model/file-upload-request.mjs +2 -0
- package/esm2020/upload/model/filesystem-file-info.mjs +2 -0
- package/esm2020/upload/model/service-config.mjs +3 -0
- package/esm2020/upload/public_api.mjs +9 -0
- package/esm2020/upload/services/upload.service.mjs +93 -0
- package/esm2020/upload/upload.module.mjs +61 -0
- package/esm2020/url-utilities/cleavelandprice-ngx-lib-url-utilities.mjs +5 -0
- package/esm2020/url-utilities/pipes/safe-resource-url.pipe.mjs +20 -0
- package/esm2020/url-utilities/pipes/safe-url.pipe.mjs +20 -0
- package/esm2020/url-utilities/pipes/uri-scheme.pipe.mjs +105 -0
- package/esm2020/url-utilities/public_api.mjs +5 -0
- package/esm2020/url-utilities/url-utilities.module.mjs +34 -0
- package/fesm2015/cleavelandprice-ngx-lib-active-directory.mjs +156 -0
- package/fesm2015/cleavelandprice-ngx-lib-active-directory.mjs.map +1 -0
- package/fesm2015/cleavelandprice-ngx-lib-authentication.mjs +299 -0
- package/fesm2015/cleavelandprice-ngx-lib-authentication.mjs.map +1 -0
- package/fesm2015/cleavelandprice-ngx-lib-dialog.mjs +218 -0
- package/fesm2015/cleavelandprice-ngx-lib-dialog.mjs.map +1 -0
- package/fesm2015/cleavelandprice-ngx-lib-sharepoint.mjs +233 -0
- package/fesm2015/cleavelandprice-ngx-lib-sharepoint.mjs.map +1 -0
- package/fesm2015/cleavelandprice-ngx-lib-upload.mjs +280 -0
- package/fesm2015/cleavelandprice-ngx-lib-upload.mjs.map +1 -0
- package/fesm2015/cleavelandprice-ngx-lib-url-utilities.mjs +176 -0
- package/fesm2015/cleavelandprice-ngx-lib-url-utilities.mjs.map +1 -0
- package/fesm2015/cleavelandprice-ngx-lib.mjs +11 -1398
- package/fesm2015/cleavelandprice-ngx-lib.mjs.map +1 -1
- package/fesm2020/cleavelandprice-ngx-lib-active-directory.mjs +147 -0
- package/fesm2020/cleavelandprice-ngx-lib-active-directory.mjs.map +1 -0
- package/fesm2020/cleavelandprice-ngx-lib-authentication.mjs +290 -0
- package/fesm2020/cleavelandprice-ngx-lib-authentication.mjs.map +1 -0
- package/fesm2020/cleavelandprice-ngx-lib-dialog.mjs +212 -0
- package/fesm2020/cleavelandprice-ngx-lib-dialog.mjs.map +1 -0
- package/fesm2020/cleavelandprice-ngx-lib-sharepoint.mjs +219 -0
- package/fesm2020/cleavelandprice-ngx-lib-sharepoint.mjs.map +1 -0
- package/fesm2020/cleavelandprice-ngx-lib-upload.mjs +273 -0
- package/fesm2020/cleavelandprice-ngx-lib-upload.mjs.map +1 -0
- package/fesm2020/cleavelandprice-ngx-lib-url-utilities.mjs +176 -0
- package/fesm2020/cleavelandprice-ngx-lib-url-utilities.mjs.map +1 -0
- package/fesm2020/cleavelandprice-ngx-lib.mjs +11 -1370
- package/fesm2020/cleavelandprice-ngx-lib.mjs.map +1 -1
- package/lib/ngx-lib.module.d.ts +6 -0
- package/package.json +57 -12
- package/public_api.d.ts +1 -7
- package/sharepoint/index.d.ts +5 -0
- package/sharepoint/model/base-item.d.ts +4 -0
- package/sharepoint/model/base-request-credential.d.ts +4 -0
- package/sharepoint/model/base-request.d.ts +8 -0
- package/sharepoint/model/cache-object.d.ts +4 -0
- package/sharepoint/model/caching-config.d.ts +4 -0
- package/sharepoint/model/default-config.d.ts +2 -0
- package/sharepoint/model/file-request.d.ts +4 -0
- package/sharepoint/model/folder-request.d.ts +4 -0
- package/sharepoint/model/list-item.d.ts +10 -0
- package/sharepoint/model/list-items-request.d.ts +5 -0
- package/sharepoint/model/logging-config.d.ts +6 -0
- package/sharepoint/model/photo-item.d.ts +11 -0
- package/sharepoint/model/service-config.d.ts +16 -0
- package/sharepoint/model/uri-request.d.ts +4 -0
- package/sharepoint/model/user-request.d.ts +4 -0
- package/sharepoint/model/user.d.ts +12 -0
- package/sharepoint/public_api.d.ts +16 -0
- package/sharepoint/services/sharepoint.service.d.ts +25 -0
- package/sharepoint/sharepoint.module.d.ts +11 -0
- package/{src/file-upload → upload}/components/upload/upload.component.d.ts +0 -0
- package/{src/file-upload → upload}/components/upload-dialog/upload-dialog.component.d.ts +3 -3
- package/upload/index.d.ts +5 -0
- package/{src/file-upload → upload}/model/database-file-info.d.ts +0 -0
- package/{src/file-upload → upload}/model/file-upload-request.d.ts +0 -0
- package/{src/file-upload → upload}/model/filesystem-file-info.d.ts +0 -0
- package/{src/file-upload/model/upload.service.config.d.ts → upload/model/service-config.d.ts} +1 -1
- package/upload/public_api.d.ts +8 -0
- package/{src/file-upload → upload}/services/upload.service.d.ts +6 -8
- package/upload/upload.module.d.ts +16 -0
- package/url-utilities/index.d.ts +5 -0
- package/url-utilities/pipes/safe-resource-url.pipe.d.ts +10 -0
- package/{src/url → url-utilities}/pipes/safe-url.pipe.d.ts +0 -0
- package/{src/url → url-utilities}/pipes/uri-scheme.pipe.d.ts +1 -1
- package/url-utilities/public_api.d.ts +4 -0
- package/url-utilities/url-utilities.module.d.ts +10 -0
- package/esm2020/src/authentication/authentication.module.mjs +0 -112
- package/esm2020/src/authentication/components/login/login.component.mjs +0 -40
- package/esm2020/src/authentication/components/login-form/login-form.component.mjs +0 -45
- package/esm2020/src/authentication/model/authentication-token.mjs +0 -2
- package/esm2020/src/authentication/model/authentication.service.config.mjs +0 -3
- package/esm2020/src/authentication/services/authentication.service.mjs +0 -138
- package/esm2020/src/dialog/components/_dialog/dialog.component.mjs +0 -83
- package/esm2020/src/dialog/components/confirmation-dialog/confirmation-dialog.component.mjs +0 -21
- package/esm2020/src/dialog/components/input-dialog/input-dialog.component.mjs +0 -21
- package/esm2020/src/dialog/components/message-dialog/message-dialog.component.mjs +0 -21
- package/esm2020/src/dialog/dialog.module.mjs +0 -74
- package/esm2020/src/dialog/model/confirmation-dialog-mode.enum.mjs +0 -8
- package/esm2020/src/email/email.module.mjs +0 -47
- package/esm2020/src/email/model/email-dto.mjs +0 -2
- package/esm2020/src/email/model/email-sender.mjs +0 -2
- package/esm2020/src/email/model/email.mjs +0 -2
- package/esm2020/src/email/model/email.service.config.mjs +0 -3
- package/esm2020/src/email/services/email.service.mjs +0 -31
- package/esm2020/src/employee/employee.module.mjs +0 -91
- package/esm2020/src/employee/model/employee.mjs +0 -2
- package/esm2020/src/employee/model/employee.service.config.mjs +0 -3
- package/esm2020/src/employee/pipes/departments.pipe.mjs +0 -24
- package/esm2020/src/employee/pipes/employee-by-dn.pipe.mjs +0 -17
- package/esm2020/src/employee/pipes/employee-photo-url.pipe.mjs +0 -27
- package/esm2020/src/employee/pipes/employees-with-property-value.pipe.mjs +0 -17
- package/esm2020/src/employee/pipes/filter-employees.pipe.mjs +0 -22
- package/esm2020/src/employee/pipes/is-member-of.pipe.mjs +0 -17
- package/esm2020/src/employee/pipes/sort-employees.pipe.mjs +0 -44
- package/esm2020/src/employee/services/employee.service.mjs +0 -41
- package/esm2020/src/file-upload/components/upload/upload.component.mjs +0 -34
- package/esm2020/src/file-upload/components/upload-dialog/upload-dialog.component.mjs +0 -102
- package/esm2020/src/file-upload/model/database-file-info.mjs +0 -2
- package/esm2020/src/file-upload/model/file-upload-request.mjs +0 -2
- package/esm2020/src/file-upload/model/filesystem-file-info.mjs +0 -2
- package/esm2020/src/file-upload/model/upload.service.config.mjs +0 -3
- package/esm2020/src/file-upload/services/upload.service.mjs +0 -93
- package/esm2020/src/file-upload/upload.module.mjs +0 -93
- package/esm2020/src/sharepoint/model/sharepoint-calendar-event.mjs +0 -2
- package/esm2020/src/sharepoint/model/sharepoint-customer-visit.mjs +0 -2
- package/esm2020/src/sharepoint/model/sharepoint-employee-picture.mjs +0 -2
- package/esm2020/src/sharepoint/model/sharepoint-list-item.mjs +0 -2
- package/esm2020/src/sharepoint/model/sharepoint-list.mjs +0 -2
- package/esm2020/src/sharepoint/model/sharepoint-person.mjs +0 -2
- package/esm2020/src/sharepoint/model/sharepoint-picture.mjs +0 -2
- package/esm2020/src/sharepoint/model/sharepoint.service.config.mjs +0 -3
- package/esm2020/src/sharepoint/pipes/sharepoint-photo-url.pipe.mjs +0 -16
- package/esm2020/src/sharepoint/pipes/sharepoint-url.pipe.mjs +0 -16
- package/esm2020/src/sharepoint/services/sharepoint.service.mjs +0 -77
- package/esm2020/src/sharepoint/sharepoint.module.mjs +0 -69
- package/esm2020/src/url/pipes/safe-url.pipe.mjs +0 -21
- package/esm2020/src/url/pipes/uri-scheme.pipe.mjs +0 -103
- package/esm2020/src/url/url.module.mjs +0 -38
- package/src/authentication/authentication.module.d.ts +0 -31
- package/src/authentication/components/login/login.component.d.ts +0 -15
- package/src/authentication/components/login-form/login-form.component.d.ts +0 -20
- package/src/authentication/model/authentication.service.config.d.ts +0 -3
- package/src/authentication/services/authentication.service.d.ts +0 -68
- package/src/dialog/components/_dialog/dialog.component.d.ts +0 -22
- package/src/dialog/components/confirmation-dialog/confirmation-dialog.component.d.ts +0 -9
- package/src/dialog/components/input-dialog/input-dialog.component.d.ts +0 -9
- package/src/dialog/components/message-dialog/message-dialog.component.d.ts +0 -9
- package/src/dialog/dialog.module.d.ts +0 -20
- package/src/email/email.module.d.ts +0 -14
- package/src/email/model/email-dto.d.ts +0 -13
- package/src/email/model/email-sender.d.ts +0 -6
- package/src/email/model/email.d.ts +0 -9
- package/src/email/model/email.service.config.d.ts +0 -7
- package/src/email/services/email.service.d.ts +0 -13
- package/src/employee/employee.module.d.ts +0 -28
- package/src/employee/model/employee.d.ts +0 -35
- package/src/employee/model/employee.service.config.d.ts +0 -3
- package/src/employee/pipes/departments.pipe.d.ts +0 -8
- package/src/employee/pipes/employee-by-dn.pipe.d.ts +0 -8
- package/src/employee/pipes/employee-photo-url.pipe.d.ts +0 -9
- package/src/employee/pipes/employees-with-property-value.pipe.d.ts +0 -8
- package/src/employee/pipes/filter-employees.pipe.d.ts +0 -8
- package/src/employee/pipes/is-member-of.pipe.d.ts +0 -8
- package/src/employee/pipes/sort-employees.pipe.d.ts +0 -9
- package/src/employee/services/employee.service.d.ts +0 -15
- package/src/file-upload/upload.module.d.ts +0 -26
- package/src/sharepoint/model/sharepoint-calendar-event.d.ts +0 -6
- package/src/sharepoint/model/sharepoint-customer-visit.d.ts +0 -8
- package/src/sharepoint/model/sharepoint-employee-picture.d.ts +0 -5
- package/src/sharepoint/model/sharepoint-list-item.d.ts +0 -11
- package/src/sharepoint/model/sharepoint-list.d.ts +0 -8
- package/src/sharepoint/model/sharepoint-person.d.ts +0 -9
- package/src/sharepoint/model/sharepoint-picture.d.ts +0 -14
- package/src/sharepoint/model/sharepoint.service.config.d.ts +0 -5
- package/src/sharepoint/pipes/sharepoint-photo-url.pipe.d.ts +0 -8
- package/src/sharepoint/pipes/sharepoint-url.pipe.d.ts +0 -7
- package/src/sharepoint/services/sharepoint.service.d.ts +0 -23
- package/src/sharepoint/sharepoint.module.d.ts +0 -24
- package/src/url/url.module.d.ts +0 -11
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './model/database-file-info';
|
|
2
|
+
export * from './model/file-upload-request';
|
|
3
|
+
export * from './model/filesystem-file-info';
|
|
4
|
+
export * from './model/service-config';
|
|
5
|
+
export * from './components/upload/upload.component';
|
|
6
|
+
export * from './components/upload-dialog/upload-dialog.component';
|
|
7
|
+
export * from './services/upload.service';
|
|
8
|
+
export * from './upload.module';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { HttpClient } from '@angular/common/http';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
|
-
import {
|
|
4
|
-
import { FileUploadRequest } from '
|
|
5
|
-
import { DatabaseFileInfo } from '
|
|
6
|
-
import { FilesystemFileInfo } from '
|
|
3
|
+
import { ServiceConfig } from '../model/service-config';
|
|
4
|
+
import { FileUploadRequest } from '../model/file-upload-request';
|
|
5
|
+
import { DatabaseFileInfo } from '../model/database-file-info';
|
|
6
|
+
import { FilesystemFileInfo } from '../model/filesystem-file-info';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
export declare class UploadService {
|
|
9
9
|
private http;
|
|
@@ -18,10 +18,8 @@ export declare class UploadService {
|
|
|
18
18
|
uploadDialogCancelButtonText: string;
|
|
19
19
|
uploadDialogUploadButtonText: string;
|
|
20
20
|
uploadDialogFinishButtonText: string;
|
|
21
|
-
constructor(http: HttpClient, config:
|
|
22
|
-
upload(files: Set<File>):
|
|
23
|
-
[key: string]: Observable<number>;
|
|
24
|
-
};
|
|
21
|
+
constructor(http: HttpClient, config: ServiceConfig);
|
|
22
|
+
upload(files: Set<File>): any;
|
|
25
23
|
exists(fileName: string): Observable<boolean>;
|
|
26
24
|
download(request: FileUploadRequest): Observable<Blob>;
|
|
27
25
|
getUploadInfo(request: FileUploadRequest): Observable<DatabaseFileInfo | DatabaseFileInfo[] | FilesystemFileInfo | FilesystemFileInfo[]>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ModuleWithProviders } from '@angular/core';
|
|
2
|
+
import { ServiceConfig } from './model/service-config';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./components/upload/upload.component";
|
|
5
|
+
import * as i2 from "./components/upload-dialog/upload-dialog.component";
|
|
6
|
+
import * as i3 from "@angular/common";
|
|
7
|
+
import * as i4 from "@angular/material/dialog";
|
|
8
|
+
import * as i5 from "@angular/material/list";
|
|
9
|
+
import * as i6 from "@angular/material/progress-bar";
|
|
10
|
+
export declare class UploadModule {
|
|
11
|
+
static forRoot(uploadConfig: ServiceConfig): ModuleWithProviders<UploadModule>;
|
|
12
|
+
constructor(parentModule: UploadModule);
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UploadModule, [{ optional: true; skipSelf: true; }]>;
|
|
14
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<UploadModule, [typeof i1.UploadComponent, typeof i2.UploadDialogComponent], [typeof i3.CommonModule, typeof i4.MatDialogModule, typeof i5.MatListModule, typeof i6.MatProgressBarModule], [typeof i1.UploadComponent, typeof i2.UploadDialogComponent]>;
|
|
15
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<UploadModule>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PipeTransform } from '@angular/core';
|
|
2
|
+
import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class SafeResourceUrlPipe implements PipeTransform {
|
|
5
|
+
private domSanitizer;
|
|
6
|
+
constructor(domSanitizer: DomSanitizer);
|
|
7
|
+
transform(value: string): SafeUrl;
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SafeResourceUrlPipe, never>;
|
|
9
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<SafeResourceUrlPipe, "safeResourceUrl", false>;
|
|
10
|
+
}
|
|
File without changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PipeTransform } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export declare class UriSchemePipe implements PipeTransform {
|
|
4
|
-
transform(value: string): string;
|
|
4
|
+
transform(value: string, ignoreLocalStorage?: boolean): string;
|
|
5
5
|
private app;
|
|
6
6
|
private command;
|
|
7
7
|
static ɵfac: i0.ɵɵFactoryDeclaration<UriSchemePipe, never>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "./pipes/safe-resource-url.pipe";
|
|
3
|
+
import * as i2 from "./pipes/safe-url.pipe";
|
|
4
|
+
import * as i3 from "./pipes/uri-scheme.pipe";
|
|
5
|
+
import * as i4 from "@angular/common";
|
|
6
|
+
export declare class UrlUtilitiesModule {
|
|
7
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UrlUtilitiesModule, never>;
|
|
8
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<UrlUtilitiesModule, [typeof i1.SafeResourceUrlPipe, typeof i2.SafeUrlPipe, typeof i3.UriSchemePipe], [typeof i4.CommonModule], [typeof i1.SafeResourceUrlPipe, typeof i2.SafeUrlPipe, typeof i3.UriSchemePipe]>;
|
|
9
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<UrlUtilitiesModule>;
|
|
10
|
+
}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
//#region Imports
|
|
2
|
-
import { NgModule, Optional, SkipSelf } from '@angular/core';
|
|
3
|
-
import { CommonModule } from '@angular/common';
|
|
4
|
-
import { FormsModule } from '@angular/forms';
|
|
5
|
-
// Angular Material
|
|
6
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
7
|
-
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
8
|
-
import { MatDialogModule } from '@angular/material/dialog';
|
|
9
|
-
import { MatInputModule } from '@angular/material/input';
|
|
10
|
-
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
11
|
-
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
12
|
-
import { MatSelectModule } from '@angular/material/select';
|
|
13
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
14
|
-
// Modules
|
|
15
|
-
import { DialogModule } from './../dialog/dialog.module';
|
|
16
|
-
// Services
|
|
17
|
-
import { AuthenticationServiceConfig } from './model/authentication.service.config';
|
|
18
|
-
import { AuthenticationService } from './services/authentication.service';
|
|
19
|
-
// Components
|
|
20
|
-
import { LoginComponent } from './components/login/login.component';
|
|
21
|
-
import { LoginFormComponent } from './components/login-form/login-form.component';
|
|
22
|
-
import * as i0 from "@angular/core";
|
|
23
|
-
//#endregion
|
|
24
|
-
//#region Exports
|
|
25
|
-
// Model
|
|
26
|
-
export * from './model/authentication.service.config';
|
|
27
|
-
export * from './model/authentication-token';
|
|
28
|
-
// Services
|
|
29
|
-
export * from './services/authentication.service';
|
|
30
|
-
// Components
|
|
31
|
-
export * from './components/login/login.component';
|
|
32
|
-
export * from './components/login-form/login-form.component';
|
|
33
|
-
//#endregion
|
|
34
|
-
/**
|
|
35
|
-
* Provides a component and a service that allows you to perform Active/Directory authentication
|
|
36
|
-
*/
|
|
37
|
-
export class AuthenticationModule {
|
|
38
|
-
constructor(parentModule) {
|
|
39
|
-
if (parentModule) {
|
|
40
|
-
throw new Error('AuthenticationModule is already loaded. Import it in the AppModule only');
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
static forRoot(authenticationConfig) {
|
|
44
|
-
return {
|
|
45
|
-
ngModule: AuthenticationModule,
|
|
46
|
-
providers: [
|
|
47
|
-
AuthenticationService,
|
|
48
|
-
{ provide: AuthenticationServiceConfig, useValue: authenticationConfig }
|
|
49
|
-
]
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
AuthenticationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AuthenticationModule, deps: [{ token: AuthenticationModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule });
|
|
54
|
-
AuthenticationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.3", ngImport: i0, type: AuthenticationModule, declarations: [LoginComponent,
|
|
55
|
-
LoginFormComponent], imports: [CommonModule,
|
|
56
|
-
FormsModule,
|
|
57
|
-
MatButtonModule,
|
|
58
|
-
MatCheckboxModule,
|
|
59
|
-
MatDialogModule,
|
|
60
|
-
MatInputModule,
|
|
61
|
-
MatProgressBarModule,
|
|
62
|
-
MatProgressSpinnerModule,
|
|
63
|
-
MatTooltipModule,
|
|
64
|
-
MatSelectModule,
|
|
65
|
-
DialogModule], exports: [LoginComponent,
|
|
66
|
-
LoginFormComponent] });
|
|
67
|
-
AuthenticationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AuthenticationModule, imports: [CommonModule,
|
|
68
|
-
FormsModule,
|
|
69
|
-
MatButtonModule,
|
|
70
|
-
MatCheckboxModule,
|
|
71
|
-
MatDialogModule,
|
|
72
|
-
MatInputModule,
|
|
73
|
-
MatProgressBarModule,
|
|
74
|
-
MatProgressSpinnerModule,
|
|
75
|
-
MatTooltipModule,
|
|
76
|
-
MatSelectModule,
|
|
77
|
-
DialogModule] });
|
|
78
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AuthenticationModule, decorators: [{
|
|
79
|
-
type: NgModule,
|
|
80
|
-
args: [{
|
|
81
|
-
imports: [
|
|
82
|
-
CommonModule,
|
|
83
|
-
FormsModule,
|
|
84
|
-
MatButtonModule,
|
|
85
|
-
MatCheckboxModule,
|
|
86
|
-
MatDialogModule,
|
|
87
|
-
MatInputModule,
|
|
88
|
-
MatProgressBarModule,
|
|
89
|
-
MatProgressSpinnerModule,
|
|
90
|
-
MatTooltipModule,
|
|
91
|
-
MatSelectModule,
|
|
92
|
-
DialogModule
|
|
93
|
-
],
|
|
94
|
-
declarations: [
|
|
95
|
-
LoginComponent,
|
|
96
|
-
LoginFormComponent
|
|
97
|
-
],
|
|
98
|
-
exports: [
|
|
99
|
-
LoginComponent,
|
|
100
|
-
LoginFormComponent
|
|
101
|
-
],
|
|
102
|
-
providers: [],
|
|
103
|
-
entryComponents: [
|
|
104
|
-
LoginFormComponent
|
|
105
|
-
]
|
|
106
|
-
}]
|
|
107
|
-
}], ctorParameters: function () { return [{ type: AuthenticationModule, decorators: [{
|
|
108
|
-
type: Optional
|
|
109
|
-
}, {
|
|
110
|
-
type: SkipSelf
|
|
111
|
-
}] }]; } });
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F1dGhlbnRpY2F0aW9uL2F1dGhlbnRpY2F0aW9uLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakIsT0FBTyxFQUFFLFFBQVEsRUFBdUIsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLG1CQUFtQjtBQUNuQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsVUFBVTtBQUNWLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxXQUFXO0FBQ1gsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFMUUsYUFBYTtBQUNiLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7QUFDbEYsWUFBWTtBQUVaLGlCQUFpQjtBQUNqQixRQUFRO0FBQ1IsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLDhCQUE4QixDQUFDO0FBRTdDLFdBQVc7QUFDWCxjQUFjLG1DQUFtQyxDQUFDO0FBRWxELGFBQWE7QUFDYixjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsOENBQThDLENBQUM7QUFDN0QsWUFBWTtBQUVaOztHQUVHO0FBNEJILE1BQU0sT0FBTyxvQkFBb0I7SUFXL0IsWUFBcUMsWUFBa0M7UUFDckUsSUFBSSxZQUFZLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FDYix5RUFBeUUsQ0FBQyxDQUFDO1NBQzlFO0lBQ0gsQ0FBQztJQWZELE1BQU0sQ0FBQyxPQUFPLENBQUMsb0JBQWlEO1FBQzlELE9BQU87WUFDTCxRQUFRLEVBQUUsb0JBQW9CO1lBQzlCLFNBQVMsRUFBRTtnQkFDVCxxQkFBcUI7Z0JBQ3JCLEVBQUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRTthQUN6RTtTQUNGLENBQUM7SUFDSixDQUFDOztpSEFUVSxvQkFBb0Isa0JBV29CLG9CQUFvQjtrSEFYNUQsb0JBQW9CLGlCQVo3QixjQUFjO1FBQ2Qsa0JBQWtCLGFBZGxCLFlBQVk7UUFDWixXQUFXO1FBQ1gsZUFBZTtRQUNmLGlCQUFpQjtRQUNqQixlQUFlO1FBQ2YsY0FBYztRQUNkLG9CQUFvQjtRQUNwQix3QkFBd0I7UUFDeEIsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZixZQUFZLGFBT1osY0FBYztRQUNkLGtCQUFrQjtrSEFPVCxvQkFBb0IsWUF6QjdCLFlBQVk7UUFDWixXQUFXO1FBQ1gsZUFBZTtRQUNmLGlCQUFpQjtRQUNqQixlQUFlO1FBQ2YsY0FBYztRQUNkLG9CQUFvQjtRQUNwQix3QkFBd0I7UUFDeEIsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZixZQUFZOzJGQWVILG9CQUFvQjtrQkEzQmhDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixjQUFjO3dCQUNkLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3dCQUN4QixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsWUFBWTtxQkFDYjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osY0FBYzt3QkFDZCxrQkFBa0I7cUJBQ25CO29CQUNELE9BQU8sRUFBRTt3QkFDUCxjQUFjO3dCQUNkLGtCQUFrQjtxQkFDbkI7b0JBQ0QsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsZUFBZSxFQUFFO3dCQUNmLGtCQUFrQjtxQkFDbkI7aUJBQ0Y7MERBWW9ELG9CQUFvQjswQkFBekQsUUFBUTs7MEJBQUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiBJbXBvcnRzXHJcbmltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzLCBPcHRpb25hbCwgU2tpcFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vLyBBbmd1bGFyIE1hdGVyaWFsXHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5cclxuLy8gTW9kdWxlc1xyXG5pbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICcuLy4uL2RpYWxvZy9kaWFsb2cubW9kdWxlJztcclxuXHJcbi8vIFNlcnZpY2VzXHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZUNvbmZpZyB9IGZyb20gJy4vbW9kZWwvYXV0aGVudGljYXRpb24uc2VydmljZS5jb25maWcnO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5cclxuLy8gQ29tcG9uZW50c1xyXG5pbXBvcnQgeyBMb2dpbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9sb2dpbi9sb2dpbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2dpbkZvcm1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbG9naW4tZm9ybS9sb2dpbi1mb3JtLmNvbXBvbmVudCc7XHJcbi8vI2VuZHJlZ2lvblxyXG5cclxuLy8jcmVnaW9uIEV4cG9ydHNcclxuLy8gTW9kZWxcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbC9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlLmNvbmZpZyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwvYXV0aGVudGljYXRpb24tdG9rZW4nO1xyXG5cclxuLy8gU2VydmljZXNcclxuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcclxuXHJcbi8vIENvbXBvbmVudHNcclxuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL2xvZ2luL2xvZ2luLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9sb2dpbi1mb3JtL2xvZ2luLWZvcm0uY29tcG9uZW50JztcclxuLy8jZW5kcmVnaW9uXHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgYSBjb21wb25lbnQgYW5kIGEgc2VydmljZSB0aGF0IGFsbG93cyB5b3UgdG8gcGVyZm9ybSBBY3RpdmUvRGlyZWN0b3J5IGF1dGhlbnRpY2F0aW9uXHJcbiAqL1xyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICBNYXREaWFsb2dNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE1hdFByb2dyZXNzQmFyTW9kdWxlLFxyXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgIERpYWxvZ01vZHVsZVxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBMb2dpbkNvbXBvbmVudCxcclxuICAgIExvZ2luRm9ybUNvbXBvbmVudFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgTG9naW5Db21wb25lbnQsXHJcbiAgICBMb2dpbkZvcm1Db21wb25lbnRcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW10sXHJcbiAgZW50cnlDb21wb25lbnRzOiBbXHJcbiAgICBMb2dpbkZvcm1Db21wb25lbnRcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvbk1vZHVsZSB7XHJcbiAgc3RhdGljIGZvclJvb3QoYXV0aGVudGljYXRpb25Db25maWc6IEF1dGhlbnRpY2F0aW9uU2VydmljZUNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QXV0aGVudGljYXRpb25Nb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBBdXRoZW50aWNhdGlvbk1vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHsgcHJvdmlkZTogQXV0aGVudGljYXRpb25TZXJ2aWNlQ29uZmlnLCB1c2VWYWx1ZTogYXV0aGVudGljYXRpb25Db25maWcgfVxyXG4gICAgICBdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHBhcmVudE1vZHVsZTogQXV0aGVudGljYXRpb25Nb2R1bGUpIHtcclxuICAgIGlmIChwYXJlbnRNb2R1bGUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdBdXRoZW50aWNhdGlvbk1vZHVsZSBpcyBhbHJlYWR5IGxvYWRlZC4gSW1wb3J0IGl0IGluIHRoZSBBcHBNb2R1bGUgb25seScpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { LoginFormComponent } from './../login-form/login-form.component';
|
|
3
|
-
import { ConfirmationDialogComponent } from './../../../dialog/components/confirmation-dialog/confirmation-dialog.component';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/material/dialog";
|
|
6
|
-
import * as i2 from "./../../services/authentication.service";
|
|
7
|
-
import * as i3 from "@angular/common";
|
|
8
|
-
import * as i4 from "@angular/material/tooltip";
|
|
9
|
-
export class LoginComponent {
|
|
10
|
-
constructor(dialog, authenticationService) {
|
|
11
|
-
this.dialog = dialog;
|
|
12
|
-
this.authenticationService = authenticationService;
|
|
13
|
-
}
|
|
14
|
-
ngOnInit() {
|
|
15
|
-
}
|
|
16
|
-
login() {
|
|
17
|
-
this.dialog.open(LoginFormComponent, {
|
|
18
|
-
data: { adminGroup: this.adminGroup }
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
confirmLogout() {
|
|
22
|
-
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
|
23
|
-
data: { message: `Are you sure you want to logout?` }
|
|
24
|
-
});
|
|
25
|
-
dialogRef.afterClosed().subscribe(result => {
|
|
26
|
-
if (result) {
|
|
27
|
-
this.authenticationService.logout();
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
LoginComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: LoginComponent, deps: [{ token: i1.MatDialog }, { token: i2.AuthenticationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
33
|
-
LoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: LoginComponent, selector: "cp-login", inputs: { adminGroup: "adminGroup" }, ngImport: i0, template: "<div id=\"user-id\">\r\n <i id=\"unauthenticated-user-image\" *ngIf=\"!authenticationService.authenticated\"\r\n class=\"fa fa-user-circle\"\r\n [class.fa-spin]=\"authenticationService.authenticating\"\r\n aria-hidden=\"true\"\r\n matTooltip=\"Login\"\r\n (click)=\"login()\"></i>\r\n\r\n <img id=\"authenticated-user-image\"\r\n *ngIf=\"authenticationService.authenticated && authenticationService.authenticatedUser.photoUrl\"\r\n [src]=\"authenticationService.authenticatedUser.photoUrl\"\r\n matTooltip=\"Logout\"\r\n (click)=\"confirmLogout()\" />\r\n\r\n <i id=\"authenticated-user-image\"\r\n *ngIf=\"authenticationService.authenticated && !authenticationService.authenticatedUser.photoUrl\"\r\n class=\"fa fa-user-circle\"\r\n matTooltip=\"Logout\"\r\n (click)=\"confirmLogout()\"></i>\r\n\r\n <div id=\"user-name\" *ngIf=\"authenticationService.authenticated\">\r\n {{ authenticationService.authenticatedUser.displayName }}\r\n </div>\r\n</div>", styles: ["#user-id{display:flex;height:2em;padding:.3em;font-family:Verdana,Geneva,Tahoma,sans-serif}.fa{font-size:2em}img{border-radius:100%;width:2em;height:2em}#user-id>div{display:flex;align-items:center;height:100%;margin-left:.75em;font-size:1.15em}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
34
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: LoginComponent, decorators: [{
|
|
35
|
-
type: Component,
|
|
36
|
-
args: [{ selector: 'cp-login', template: "<div id=\"user-id\">\r\n <i id=\"unauthenticated-user-image\" *ngIf=\"!authenticationService.authenticated\"\r\n class=\"fa fa-user-circle\"\r\n [class.fa-spin]=\"authenticationService.authenticating\"\r\n aria-hidden=\"true\"\r\n matTooltip=\"Login\"\r\n (click)=\"login()\"></i>\r\n\r\n <img id=\"authenticated-user-image\"\r\n *ngIf=\"authenticationService.authenticated && authenticationService.authenticatedUser.photoUrl\"\r\n [src]=\"authenticationService.authenticatedUser.photoUrl\"\r\n matTooltip=\"Logout\"\r\n (click)=\"confirmLogout()\" />\r\n\r\n <i id=\"authenticated-user-image\"\r\n *ngIf=\"authenticationService.authenticated && !authenticationService.authenticatedUser.photoUrl\"\r\n class=\"fa fa-user-circle\"\r\n matTooltip=\"Logout\"\r\n (click)=\"confirmLogout()\"></i>\r\n\r\n <div id=\"user-name\" *ngIf=\"authenticationService.authenticated\">\r\n {{ authenticationService.authenticatedUser.displayName }}\r\n </div>\r\n</div>", styles: ["#user-id{display:flex;height:2em;padding:.3em;font-family:Verdana,Geneva,Tahoma,sans-serif}.fa{font-size:2em}img{border-radius:100%;width:2em;height:2em}#user-id>div{display:flex;align-items:center;height:100%;margin-left:.75em;font-size:1.15em}\n"] }]
|
|
37
|
-
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.AuthenticationService }]; }, propDecorators: { adminGroup: [{
|
|
38
|
-
type: Input
|
|
39
|
-
}] } });
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2F1dGhlbnRpY2F0aW9uL2NvbXBvbmVudHMvbG9naW4vbG9naW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2F1dGhlbnRpY2F0aW9uL2NvbXBvbmVudHMvbG9naW4vbG9naW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFMUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7Ozs7OztBQU83SCxNQUFNLE9BQU8sY0FBYztJQUd6QixZQUFtQixNQUFpQixFQUMzQixxQkFBNEM7UUFEbEMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUMzQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO0lBQ3JELENBQUM7SUFFRCxRQUFRO0lBQ1IsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUNuQyxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtTQUN0QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQzlELElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRTtTQUN0RCxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pDLElBQUksTUFBTSxFQUFFO2dCQUNWLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNyQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7MkdBMUJVLGNBQWM7K0ZBQWQsY0FBYyxzRkNYM0IseStCQXVCTTsyRkRaTyxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFVBQVU7b0lBS1gsVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBMb2dpbkZvcm1Db21wb25lbnQgfSBmcm9tICcuLy4uL2xvZ2luLWZvcm0vbG9naW4tZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLy4uLy4uLy4uL2RpYWxvZy9jb21wb25lbnRzL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjcC1sb2dpbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9sb2dpbi5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExvZ2luQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBhZG1pbkdyb3VwOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHB1YmxpYyBhdXRoZW50aWNhdGlvblNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgfVxyXG5cclxuICBsb2dpbigpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nLm9wZW4oTG9naW5Gb3JtQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHsgYWRtaW5Hcm91cDogdGhpcy5hZG1pbkdyb3VwIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybUxvZ291dCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHsgbWVzc2FnZTogYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBsb2dvdXQ/YCB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmxvZ291dCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cInVzZXItaWRcIj5cclxuICA8aSBpZD1cInVuYXV0aGVudGljYXRlZC11c2VyLWltYWdlXCIgKm5nSWY9XCIhYXV0aGVudGljYXRpb25TZXJ2aWNlLmF1dGhlbnRpY2F0ZWRcIlxyXG4gICAgY2xhc3M9XCJmYSBmYS11c2VyLWNpcmNsZVwiXHJcbiAgICBbY2xhc3MuZmEtc3Bpbl09XCJhdXRoZW50aWNhdGlvblNlcnZpY2UuYXV0aGVudGljYXRpbmdcIlxyXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgIG1hdFRvb2x0aXA9XCJMb2dpblwiXHJcbiAgICAoY2xpY2spPVwibG9naW4oKVwiPjwvaT5cclxuXHJcbiAgPGltZyBpZD1cImF1dGhlbnRpY2F0ZWQtdXNlci1pbWFnZVwiXHJcbiAgICAqbmdJZj1cImF1dGhlbnRpY2F0aW9uU2VydmljZS5hdXRoZW50aWNhdGVkICYmIGF1dGhlbnRpY2F0aW9uU2VydmljZS5hdXRoZW50aWNhdGVkVXNlci5waG90b1VybFwiXHJcbiAgICBbc3JjXT1cImF1dGhlbnRpY2F0aW9uU2VydmljZS5hdXRoZW50aWNhdGVkVXNlci5waG90b1VybFwiXHJcbiAgICBtYXRUb29sdGlwPVwiTG9nb3V0XCJcclxuICAgIChjbGljayk9XCJjb25maXJtTG9nb3V0KClcIiAvPlxyXG5cclxuICA8aSBpZD1cImF1dGhlbnRpY2F0ZWQtdXNlci1pbWFnZVwiXHJcbiAgICAqbmdJZj1cImF1dGhlbnRpY2F0aW9uU2VydmljZS5hdXRoZW50aWNhdGVkICYmICFhdXRoZW50aWNhdGlvblNlcnZpY2UuYXV0aGVudGljYXRlZFVzZXIucGhvdG9VcmxcIlxyXG4gICAgY2xhc3M9XCJmYSBmYS11c2VyLWNpcmNsZVwiXHJcbiAgICBtYXRUb29sdGlwPVwiTG9nb3V0XCJcclxuICAgIChjbGljayk9XCJjb25maXJtTG9nb3V0KClcIj48L2k+XHJcblxyXG4gIDxkaXYgaWQ9XCJ1c2VyLW5hbWVcIiAqbmdJZj1cImF1dGhlbnRpY2F0aW9uU2VydmljZS5hdXRoZW50aWNhdGVkXCI+XHJcbiAgICB7eyBhdXRoZW50aWNhdGlvblNlcnZpY2UuYXV0aGVudGljYXRlZFVzZXIuZGlzcGxheU5hbWUgfX1cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { Component, Inject } from '@angular/core';
|
|
2
|
-
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/material/dialog";
|
|
5
|
-
import * as i2 from "./../../../sharepoint/services/sharepoint.service";
|
|
6
|
-
import * as i3 from "./../../services/authentication.service";
|
|
7
|
-
import * as i4 from "@angular/common";
|
|
8
|
-
import * as i5 from "@angular/forms";
|
|
9
|
-
import * as i6 from "@angular/material/button";
|
|
10
|
-
import * as i7 from "@angular/material/form-field";
|
|
11
|
-
import * as i8 from "@angular/material/input";
|
|
12
|
-
import * as i9 from "@angular/material/progress-spinner";
|
|
13
|
-
export class LoginFormComponent {
|
|
14
|
-
constructor(dialogRef, sharePointService, authenticationService, data) {
|
|
15
|
-
this.dialogRef = dialogRef;
|
|
16
|
-
this.sharePointService = sharePointService;
|
|
17
|
-
this.authenticationService = authenticationService;
|
|
18
|
-
this.data = data;
|
|
19
|
-
this.adminGroup = data.adminGroup;
|
|
20
|
-
}
|
|
21
|
-
ngOnInit() {
|
|
22
|
-
this.authenticationService.authenticatedChanged
|
|
23
|
-
.subscribe(authenticated => {
|
|
24
|
-
if (authenticated) {
|
|
25
|
-
this.dialogRef.close();
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
authenticate() {
|
|
30
|
-
if (!this.sharePointService || !this.username || !this.password) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
this.authenticationService.login(this.username, this.password, this.adminGroup);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
LoginFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: LoginFormComponent, deps: [{ token: i1.MatDialogRef }, { token: i2.SharePointService }, { token: i3.AuthenticationService }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
37
|
-
LoginFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: LoginFormComponent, selector: "cp-login-form", ngImport: i0, template: "<h2 mat-dialog-title>\r\n <span *ngIf=\"!authenticationService.authenticating\">Login</span>\r\n <span *ngIf=\"authenticationService.authenticating\">Authenticating...</span>\r\n</h2>\r\n\r\n<mat-dialog-content [class.loginError]=\"loginError\">\r\n <div id=\"spinner\" *ngIf=\"authenticationService.authenticating\">\r\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n\r\n <div *ngIf=\"!authenticationService.authenticating\">\r\n <div>\r\n <mat-form-field>\r\n <input matInput placeholder=\"Username\" [(ngModel)]=\"username\" name=\"username\" required (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div>\r\n <mat-form-field>\r\n <input matInput type=\"password\" placeholder=\"Password\" [(ngModel)]=\"password\" name=\"password\" required (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!authenticationService.authenticating && loginError\" class=\"alert alert-danger\">\r\n Bad username or password\r\n </div>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions *ngIf=\"!authenticationService.authenticating\">\r\n <button type=\"button\" mat-raised-button (click)=\"authenticate()\">OK</button>\r\n <button type=\"button\" mat-button (click)=\"dialogRef.close()\">Cancel</button>\r\n</mat-dialog-actions>", styles: ["#spinner{width:100%;height:100%;display:flex;justify-content:center;align-items:center}mat-dialog-content{height:150px}mat-dialog-content.loginError{height:200px}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }] });
|
|
38
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: LoginFormComponent, decorators: [{
|
|
39
|
-
type: Component,
|
|
40
|
-
args: [{ selector: 'cp-login-form', template: "<h2 mat-dialog-title>\r\n <span *ngIf=\"!authenticationService.authenticating\">Login</span>\r\n <span *ngIf=\"authenticationService.authenticating\">Authenticating...</span>\r\n</h2>\r\n\r\n<mat-dialog-content [class.loginError]=\"loginError\">\r\n <div id=\"spinner\" *ngIf=\"authenticationService.authenticating\">\r\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n\r\n <div *ngIf=\"!authenticationService.authenticating\">\r\n <div>\r\n <mat-form-field>\r\n <input matInput placeholder=\"Username\" [(ngModel)]=\"username\" name=\"username\" required (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div>\r\n <mat-form-field>\r\n <input matInput type=\"password\" placeholder=\"Password\" [(ngModel)]=\"password\" name=\"password\" required (keyup.enter)=\"authenticate()\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!authenticationService.authenticating && loginError\" class=\"alert alert-danger\">\r\n Bad username or password\r\n </div>\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions *ngIf=\"!authenticationService.authenticating\">\r\n <button type=\"button\" mat-raised-button (click)=\"authenticate()\">OK</button>\r\n <button type=\"button\" mat-button (click)=\"dialogRef.close()\">Cancel</button>\r\n</mat-dialog-actions>", styles: ["#spinner{width:100%;height:100%;display:flex;justify-content:center;align-items:center}mat-dialog-content{height:150px}mat-dialog-content.loginError{height:200px}\n"] }]
|
|
41
|
-
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: i2.SharePointService }, { type: i3.AuthenticationService }, { type: undefined, decorators: [{
|
|
42
|
-
type: Inject,
|
|
43
|
-
args: [MAT_DIALOG_DATA]
|
|
44
|
-
}] }]; } });
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4tZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXV0aGVudGljYXRpb24vY29tcG9uZW50cy9sb2dpbi1mb3JtL2xvZ2luLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2F1dGhlbnRpY2F0aW9uL2NvbXBvbmVudHMvbG9naW4tZm9ybS9sb2dpbi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7O0FBU3pFLE1BQU0sT0FBTyxrQkFBa0I7SUFNN0IsWUFBbUIsU0FBMkMsRUFDcEQsaUJBQW9DLEVBQ3JDLHFCQUE0QyxFQUNuQixJQUFTO1FBSHhCLGNBQVMsR0FBVCxTQUFTLENBQWtDO1FBQ3BELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDckMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUNuQixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0I7YUFDNUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3pCLElBQUksYUFBYSxFQUFFO2dCQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3hCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMvRCxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEYsQ0FBQzs7K0dBM0JVLGtCQUFrQixvSEFTbkIsZUFBZTttR0FUZCxrQkFBa0IscURDVi9CLGk0Q0FnQ3FCOzJGRHRCUixrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZUFBZTs7MEJBYXRCLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaGFyZVBvaW50U2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vc2hhcmVwb2ludC9zZXJ2aWNlcy9zaGFyZXBvaW50LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjcC1sb2dpbi1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbG9naW4tZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbG9naW4tZm9ybS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExvZ2luRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgdXNlcm5hbWU6IHN0cmluZztcclxuICBwYXNzd29yZDogc3RyaW5nO1xyXG4gIGFkbWluR3JvdXA6IHN0cmluZztcclxuICBsb2dpbkVycm9yOiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8TG9naW5Gb3JtQ29tcG9uZW50PixcclxuICAgIHByaXZhdGUgc2hhcmVQb2ludFNlcnZpY2U6IFNoYXJlUG9pbnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnkpIHtcclxuICAgICAgdGhpcy5hZG1pbkdyb3VwID0gZGF0YS5hZG1pbkdyb3VwO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5hdXRoZW50aWNhdGVkQ2hhbmdlZFxyXG4gICAgICAuc3Vic2NyaWJlKGF1dGhlbnRpY2F0ZWQgPT4ge1xyXG4gICAgICAgIGlmIChhdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhdXRoZW50aWNhdGUoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2hhcmVQb2ludFNlcnZpY2UgfHwgIXRoaXMudXNlcm5hbWUgfHwgIXRoaXMucGFzc3dvcmQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UubG9naW4odGhpcy51c2VybmFtZSwgdGhpcy5wYXNzd29yZCwgdGhpcy5hZG1pbkdyb3VwKTtcclxuICB9XHJcbn1cclxuIiwiPGgyIG1hdC1kaWFsb2ctdGl0bGU+XHJcbiAgPHNwYW4gKm5nSWY9XCIhYXV0aGVudGljYXRpb25TZXJ2aWNlLmF1dGhlbnRpY2F0aW5nXCI+TG9naW48L3NwYW4+XHJcbiAgPHNwYW4gKm5nSWY9XCJhdXRoZW50aWNhdGlvblNlcnZpY2UuYXV0aGVudGljYXRpbmdcIj5BdXRoZW50aWNhdGluZy4uLjwvc3Bhbj5cclxuPC9oMj5cclxuXHJcbjxtYXQtZGlhbG9nLWNvbnRlbnQgW2NsYXNzLmxvZ2luRXJyb3JdPVwibG9naW5FcnJvclwiPlxyXG4gIDxkaXYgaWQ9XCJzcGlubmVyXCIgKm5nSWY9XCJhdXRoZW50aWNhdGlvblNlcnZpY2UuYXV0aGVudGljYXRpbmdcIj5cclxuICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjb2xvcj1cInByaW1hcnlcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCIhYXV0aGVudGljYXRpb25TZXJ2aWNlLmF1dGhlbnRpY2F0aW5nXCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiVXNlcm5hbWVcIiBbKG5nTW9kZWwpXT1cInVzZXJuYW1lXCIgbmFtZT1cInVzZXJuYW1lXCIgcmVxdWlyZWQgKGtleXVwLmVudGVyKT1cImF1dGhlbnRpY2F0ZSgpXCI+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2PlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJwYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiBbKG5nTW9kZWwpXT1cInBhc3N3b3JkXCIgbmFtZT1cInBhc3N3b3JkXCIgcmVxdWlyZWQgKGtleXVwLmVudGVyKT1cImF1dGhlbnRpY2F0ZSgpXCI+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cIiFhdXRoZW50aWNhdGlvblNlcnZpY2UuYXV0aGVudGljYXRpbmcgJiYgbG9naW5FcnJvclwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCI+XHJcbiAgICBCYWQgdXNlcm5hbWUgb3IgcGFzc3dvcmRcclxuICA8L2Rpdj5cclxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XHJcblxyXG48bWF0LWRpYWxvZy1hY3Rpb25zICpuZ0lmPVwiIWF1dGhlbnRpY2F0aW9uU2VydmljZS5hdXRoZW50aWNhdGluZ1wiPlxyXG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJhdXRoZW50aWNhdGUoKVwiPk9LPC9idXR0b24+XHJcbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiAoY2xpY2spPVwiZGlhbG9nUmVmLmNsb3NlKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+Il19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24tdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXV0aGVudGljYXRpb24vbW9kZWwvYXV0aGVudGljYXRpb24tdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQXV0aGVudGljYXRpb25Ub2tlbiB7XHJcbiAgICBhdWQ6IHN0cmluZztcclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgICBkaXN0aW5ndWlzaGVkTmFtZTogc3RyaW5nO1xyXG4gICAgZW1haWw6IHN0cmluZztcclxuICAgIGVtcGxveWVlTnVtYmVyOiBzdHJpbmc7XHJcbiAgICBleHA6IG51bWJlcjtcclxuICAgIGZpcnN0TmFtZTogc3RyaW5nO1xyXG4gICAgaXNzOiBzdHJpbmc7XHJcbiAgICBsYXN0TmFtZTogc3RyaW5nO1xyXG4gICAgbWVtYmVyT2Y6IHN0cmluZztcclxuICAgIG5iZjogbnVtYmVyO1xyXG4gICAgcGhvbmU6IHN0cmluZztcclxuICAgIHJvbGU6IHN0cmluZztcclxuICAgIHNpZDogc3RyaW5nO1xyXG4gICAgd2luYWNjb3VudG5hbWU6IHN0cmluZztcclxufVxyXG4iXX0=
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export class AuthenticationServiceConfig {
|
|
2
|
-
}
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uc2VydmljZS5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXV0aGVudGljYXRpb24vbW9kZWwvYXV0aGVudGljYXRpb24uc2VydmljZS5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLDJCQUEyQjtDQUV2QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvblNlcnZpY2VDb25maWcge1xyXG4gICAgYXV0aGVudGljYXRpb25BcGlVcmw6IHN0cmluZztcclxufVxyXG4iXX0=
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
//#region Imports
|
|
2
|
-
import { Injectable, Output, EventEmitter, Optional } from '@angular/core';
|
|
3
|
-
// import { JwtHelper } from 'angular2-jwt';
|
|
4
|
-
import { JwtHelperService } from '@auth0/angular-jwt';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "./../model/authentication.service.config";
|
|
7
|
-
import * as i2 from "@angular/common/http";
|
|
8
|
-
import * as i3 from "./../../sharepoint/services/sharepoint.service";
|
|
9
|
-
//#endregion
|
|
10
|
-
/**
|
|
11
|
-
* Authenticate Active Directory user
|
|
12
|
-
*/
|
|
13
|
-
export class AuthenticationService {
|
|
14
|
-
//#endregion
|
|
15
|
-
//#region Lifecycle
|
|
16
|
-
/**
|
|
17
|
-
* @ignore
|
|
18
|
-
*/
|
|
19
|
-
constructor(config, http, sharePointService) {
|
|
20
|
-
this.http = http;
|
|
21
|
-
this.sharePointService = sharePointService;
|
|
22
|
-
this.authenticatedChanged = new EventEmitter();
|
|
23
|
-
this.authenticatingChanged = new EventEmitter();
|
|
24
|
-
/**
|
|
25
|
-
* Flag set to true while the service is attempting to authenticate the user
|
|
26
|
-
*/
|
|
27
|
-
this.authenticating = false;
|
|
28
|
-
/**
|
|
29
|
-
* Flag set to true when the user is successfully authenticated
|
|
30
|
-
*/
|
|
31
|
-
this.authenticated = false;
|
|
32
|
-
this.authenticationApiUrl = config.authenticationApiUrl;
|
|
33
|
-
this.checkForExistingToken();
|
|
34
|
-
}
|
|
35
|
-
//#endregion
|
|
36
|
-
//#region Utilities
|
|
37
|
-
/**
|
|
38
|
-
* Authenticate the user and store the token in Local Storage
|
|
39
|
-
*
|
|
40
|
-
* @param username AD sAMAccountName
|
|
41
|
-
* @param password
|
|
42
|
-
* @param adminGroup AD group that determines if authenticated user is considered an administrator of the app
|
|
43
|
-
*/
|
|
44
|
-
login(username, password, adminGroup) {
|
|
45
|
-
const today = new Date();
|
|
46
|
-
const expiration = new Date().setFullYear(today.getFullYear() + 10);
|
|
47
|
-
const request = {
|
|
48
|
-
username: username,
|
|
49
|
-
password: password,
|
|
50
|
-
adminGroup: adminGroup,
|
|
51
|
-
//expirationDate: expiration // moment().add(10, 'years').toDate()
|
|
52
|
-
includeThumbnail: false
|
|
53
|
-
};
|
|
54
|
-
this.authenticating = true;
|
|
55
|
-
this.authenticatingChanged.emit(this.authenticating);
|
|
56
|
-
this.http.post(this.authenticationApiUrl, request)
|
|
57
|
-
.subscribe(token => this.validateUser(token), err => {
|
|
58
|
-
console.log(err);
|
|
59
|
-
this.authenticating = false;
|
|
60
|
-
this.authenticatingChanged.emit(this.authenticating);
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Logout the user and delete the token from Local Storage
|
|
65
|
-
*/
|
|
66
|
-
logout() {
|
|
67
|
-
if (localStorage.getItem('token')) {
|
|
68
|
-
localStorage.removeItem('token');
|
|
69
|
-
}
|
|
70
|
-
this.authenticatedUser = null;
|
|
71
|
-
this.authenticated = false;
|
|
72
|
-
this.authenticatedChanged.emit(false);
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* @ignore
|
|
76
|
-
*/
|
|
77
|
-
validateUser(token) {
|
|
78
|
-
if (!token) {
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
const jwtHelper = new JwtHelperService();
|
|
82
|
-
const decoded = jwtHelper.decodeToken(token);
|
|
83
|
-
if (jwtHelper.isTokenExpired(token)) {
|
|
84
|
-
this.logout();
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
this.authenticatedUser = {
|
|
88
|
-
admin: decoded.role === 'Admin',
|
|
89
|
-
displayName: decoded.displayName,
|
|
90
|
-
accountName: decoded.winaccountname,
|
|
91
|
-
distinguishedName: decoded.distinguishedName,
|
|
92
|
-
employeeNumber: decoded.employeeNumber,
|
|
93
|
-
memberOf: decoded.memberOf
|
|
94
|
-
};
|
|
95
|
-
localStorage.setItem('token', token);
|
|
96
|
-
this.getPhoto();
|
|
97
|
-
this.authenticated = true;
|
|
98
|
-
this.authenticatedChanged.emit(this.authenticated);
|
|
99
|
-
this.authenticating = false;
|
|
100
|
-
this.authenticatingChanged.emit(this.authenticating);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* @ignore
|
|
104
|
-
*/
|
|
105
|
-
getPhoto() {
|
|
106
|
-
this.sharePointService.getPhotos()
|
|
107
|
-
.subscribe(photos => {
|
|
108
|
-
// The user may have been logged out by the time the photos came back
|
|
109
|
-
if (!this.authenticatedUser || !this.authenticatedUser.employeeNumber) {
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
const photo = photos.find(pic => +pic.ows_EmployeeNumber === +this.authenticatedUser.employeeNumber);
|
|
113
|
-
if (photo) {
|
|
114
|
-
this.authenticatedUser.photoUrl = photo.ows_EncodedAbsUrl;
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* @ignore
|
|
120
|
-
*/
|
|
121
|
-
checkForExistingToken() {
|
|
122
|
-
if (localStorage.getItem('token')) {
|
|
123
|
-
this.validateUser(localStorage.getItem('token'));
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
AuthenticationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AuthenticationService, deps: [{ token: i1.AuthenticationServiceConfig, optional: true }, { token: i2.HttpClient }, { token: i3.SharePointService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
128
|
-
AuthenticationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AuthenticationService });
|
|
129
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AuthenticationService, decorators: [{
|
|
130
|
-
type: Injectable
|
|
131
|
-
}], ctorParameters: function () { return [{ type: i1.AuthenticationServiceConfig, decorators: [{
|
|
132
|
-
type: Optional
|
|
133
|
-
}] }, { type: i2.HttpClient }, { type: i3.SharePointService }]; }, propDecorators: { authenticatedChanged: [{
|
|
134
|
-
type: Output
|
|
135
|
-
}], authenticatingChanged: [{
|
|
136
|
-
type: Output
|
|
137
|
-
}] } });
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hdXRoZW50aWNhdGlvbi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNFLDRDQUE0QztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFHdEQsWUFBWTtBQUVaOztHQUVHO0FBRUgsTUFBTSxPQUFPLHFCQUFxQjtJQWdDaEMsWUFBWTtJQUVaLG1CQUFtQjtJQUNuQjs7T0FFRztJQUNILFlBQXlCLE1BQW1DLEVBQ2xELElBQWdCLEVBQ2hCLGlCQUFvQztRQURwQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFqQ3BDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDbkQsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUU5RDs7V0FFRztRQUNILG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXZCOztXQUVHO1FBQ0gsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUF3QnBCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUM7UUFDeEQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNELFlBQVk7SUFFWixtQkFBbUI7SUFDbkI7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxVQUFtQjtRQUMzRCxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUVwRSxNQUFNLE9BQU8sR0FBRztZQUNkLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLGtFQUFrRTtZQUNsRSxnQkFBZ0IsRUFBRSxLQUFLO1NBQ3hCLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBUyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDO2FBQ3ZELFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQzVDLEdBQUcsQ0FBQyxFQUFFO1lBQ0osT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUM1QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsQztRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZLENBQUMsS0FBYTtRQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQUUsT0FBTztTQUFFO1FBRXZCLE1BQU0sU0FBUyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBd0IsQ0FBQztRQUVwRSxJQUFJLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHO1lBQ3ZCLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU87WUFDL0IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLFdBQVcsRUFBRSxPQUFPLENBQUMsY0FBYztZQUNuQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsaUJBQWlCO1lBQzVDLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztZQUN0QyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7U0FDM0IsQ0FBQztRQUVGLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXJDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVoQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxRQUFRO1FBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRTthQUMvQixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEIscUVBQXFFO1lBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFO2dCQUNyRSxPQUFPO2FBQ1I7WUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFckcsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUM7YUFDM0Q7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNLLHFCQUFxQjtRQUMzQixJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDbEQ7SUFDSCxDQUFDOztrSEF4SlUscUJBQXFCO3NIQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVTs7MEJBdUNLLFFBQVE7cUdBL0JaLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gSW1wb3J0c1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25Ub2tlbiB9IGZyb20gJy4vLi4vbW9kZWwvYXV0aGVudGljYXRpb24tdG9rZW4nO1xyXG4vLyBpbXBvcnQgeyBKd3RIZWxwZXIgfSBmcm9tICdhbmd1bGFyMi1qd3QnO1xyXG5pbXBvcnQgeyBKd3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQGF1dGgwL2FuZ3VsYXItand0JztcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlQ29uZmlnIH0gZnJvbSAnLi8uLi9tb2RlbC9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlLmNvbmZpZyc7XHJcbmltcG9ydCB7IFNoYXJlUG9pbnRTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zaGFyZXBvaW50L3NlcnZpY2VzL3NoYXJlcG9pbnQuc2VydmljZSc7XHJcbi8vI2VuZHJlZ2lvblxyXG5cclxuLyoqXHJcbiAqIEF1dGhlbnRpY2F0ZSBBY3RpdmUgRGlyZWN0b3J5IHVzZXJcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uU2VydmljZSB7XHJcbiAgLy8jcmVnaW9uIEZpZWxkc1xyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIGF1dGhlbnRpY2F0aW9uQXBpVXJsOiBzdHJpbmc7XHJcblxyXG4gIEBPdXRwdXQoKSBhdXRoZW50aWNhdGVkQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgYXV0aGVudGljYXRpbmdDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICAvKipcclxuICAgKiBGbGFnIHNldCB0byB0cnVlIHdoaWxlIHRoZSBzZXJ2aWNlIGlzIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlIHRoZSB1c2VyXHJcbiAgICovXHJcbiAgYXV0aGVudGljYXRpbmcgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmxhZyBzZXQgdG8gdHJ1ZSB3aGVuIHRoZSB1c2VyIGlzIHN1Y2Nlc3NmdWxseSBhdXRoZW50aWNhdGVkXHJcbiAgICovXHJcbiAgYXV0aGVudGljYXRlZCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBhdXRoZW50aWNhdGVkIHVzZXJcclxuICAgKi9cclxuICBhdXRoZW50aWNhdGVkVXNlcjoge1xyXG4gICAgYWRtaW46IGJvb2xlYW4sXHJcbiAgICBhY2NvdW50TmFtZTogc3RyaW5nLFxyXG4gICAgZGlzcGxheU5hbWU6IHN0cmluZyxcclxuICAgIGRpc3Rpbmd1aXNoZWROYW1lOiBzdHJpbmc7XHJcbiAgICBlbXBsb3llZU51bWJlcjogc3RyaW5nO1xyXG4gICAgcGhvdG9Vcmw/OiBzdHJpbmc7XHJcbiAgICBtZW1iZXJPZj86IHN0cmluZztcclxuICB9O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gTGlmZWN5Y2xlXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKCBAT3B0aW9uYWwoKSBjb25maWc6IEF1dGhlbnRpY2F0aW9uU2VydmljZUNvbmZpZyxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgc2hhcmVQb2ludFNlcnZpY2U6IFNoYXJlUG9pbnRTZXJ2aWNlKSB7XHJcblxyXG4gICAgdGhpcy5hdXRoZW50aWNhdGlvbkFwaVVybCA9IGNvbmZpZy5hdXRoZW50aWNhdGlvbkFwaVVybDtcclxuICAgIHRoaXMuY2hlY2tGb3JFeGlzdGluZ1Rva2VuKCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gVXRpbGl0aWVzXHJcbiAgLyoqXHJcbiAgICogQXV0aGVudGljYXRlIHRoZSB1c2VyIGFuZCBzdG9yZSB0aGUgdG9rZW4gaW4gTG9jYWwgU3RvcmFnZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHVzZXJuYW1lIEFEIHNBTUFjY291bnROYW1lXHJcbiAgICogQHBhcmFtIHBhc3N3b3JkXHJcbiAgICogQHBhcmFtIGFkbWluR3JvdXAgQUQgZ3JvdXAgdGhhdCBkZXRlcm1pbmVzIGlmIGF1dGhlbnRpY2F0ZWQgdXNlciBpcyBjb25zaWRlcmVkIGFuIGFkbWluaXN0cmF0b3Igb2YgdGhlIGFwcFxyXG4gICAqL1xyXG4gIGxvZ2luKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGFkbWluR3JvdXA/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IGV4cGlyYXRpb24gPSBuZXcgRGF0ZSgpLnNldEZ1bGxZZWFyKHRvZGF5LmdldEZ1bGxZZWFyKCkgKyAxMCk7XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxyXG4gICAgICBwYXNzd29yZDogcGFzc3dvcmQsXHJcbiAgICAgIGFkbWluR3JvdXA6IGFkbWluR3JvdXAsXHJcbiAgICAgIC8vZXhwaXJhdGlvbkRhdGU6IGV4cGlyYXRpb24gLy8gbW9tZW50KCkuYWRkKDEwLCAneWVhcnMnKS50b0RhdGUoKVxyXG4gICAgICBpbmNsdWRlVGh1bWJuYWlsOiBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuYXV0aGVudGljYXRpbmdDaGFuZ2VkLmVtaXQodGhpcy5hdXRoZW50aWNhdGluZyk7XHJcblxyXG4gICAgdGhpcy5odHRwLnBvc3Q8c3RyaW5nPih0aGlzLmF1dGhlbnRpY2F0aW9uQXBpVXJsLCByZXF1ZXN0KVxyXG4gICAgICAuc3Vic2NyaWJlKHRva2VuID0+IHRoaXMudmFsaWRhdGVVc2VyKHRva2VuKSxcclxuICAgICAgZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRoaXMuYXV0aGVudGljYXRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW5nQ2hhbmdlZC5lbWl0KHRoaXMuYXV0aGVudGljYXRpbmcpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvZ291dCB0aGUgdXNlciBhbmQgZGVsZXRlIHRoZSB0b2tlbiBmcm9tIExvY2FsIFN0b3JhZ2VcclxuICAgKi9cclxuICBsb2dvdXQoKTogdm9pZCB7XHJcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJykpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3Rva2VuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkVXNlciA9IG51bGw7XHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuYXV0aGVudGljYXRlZENoYW5nZWQuZW1pdChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVVzZXIodG9rZW46IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCF0b2tlbikgeyByZXR1cm47IH1cclxuXHJcbiAgICBjb25zdCBqd3RIZWxwZXIgPSBuZXcgSnd0SGVscGVyU2VydmljZSgpO1xyXG4gICAgY29uc3QgZGVjb2RlZCA9IGp3dEhlbHBlci5kZWNvZGVUb2tlbih0b2tlbikgYXMgQXV0aGVudGljYXRpb25Ub2tlbjtcclxuXHJcbiAgICBpZiAoand0SGVscGVyLmlzVG9rZW5FeHBpcmVkKHRva2VuKSkge1xyXG4gICAgICB0aGlzLmxvZ291dCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkVXNlciA9IHtcclxuICAgICAgYWRtaW46IGRlY29kZWQucm9sZSA9PT0gJ0FkbWluJyxcclxuICAgICAgZGlzcGxheU5hbWU6IGRlY29kZWQuZGlzcGxheU5hbWUsXHJcbiAgICAgIGFjY291bnROYW1lOiBkZWNvZGVkLndpbmFjY291bnRuYW1lLFxyXG4gICAgICBkaXN0aW5ndWlzaGVkTmFtZTogZGVjb2RlZC5kaXN0aW5ndWlzaGVkTmFtZSxcclxuICAgICAgZW1wbG95ZWVOdW1iZXI6IGRlY29kZWQuZW1wbG95ZWVOdW1iZXIsXHJcbiAgICAgIG1lbWJlck9mOiBkZWNvZGVkLm1lbWJlck9mXHJcbiAgICB9O1xyXG5cclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b2tlbicsIHRva2VuKTtcclxuXHJcbiAgICB0aGlzLmdldFBob3RvKCk7XHJcblxyXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuYXV0aGVudGljYXRlZENoYW5nZWQuZW1pdCh0aGlzLmF1dGhlbnRpY2F0ZWQpO1xyXG5cclxuICAgIHRoaXMuYXV0aGVudGljYXRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuYXV0aGVudGljYXRpbmdDaGFuZ2VkLmVtaXQodGhpcy5hdXRoZW50aWNhdGluZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRQaG90bygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hhcmVQb2ludFNlcnZpY2UuZ2V0UGhvdG9zKClcclxuICAgICAgLnN1YnNjcmliZShwaG90b3MgPT4ge1xyXG4gICAgICAgIC8vIFRoZSB1c2VyIG1heSBoYXZlIGJlZW4gbG9nZ2VkIG91dCBieSB0aGUgdGltZSB0aGUgcGhvdG9zIGNhbWUgYmFja1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRoZW50aWNhdGVkVXNlciB8fCAhdGhpcy5hdXRoZW50aWNhdGVkVXNlci5lbXBsb3llZU51bWJlcikge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGhvdG8gPSBwaG90b3MuZmluZChwaWMgPT4gK3BpYy5vd3NfRW1wbG95ZWVOdW1iZXIgPT09ICt0aGlzLmF1dGhlbnRpY2F0ZWRVc2VyLmVtcGxveWVlTnVtYmVyKTtcclxuXHJcbiAgICAgICAgaWYgKHBob3RvKSB7XHJcbiAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWRVc2VyLnBob3RvVXJsID0gcGhvdG8ub3dzX0VuY29kZWRBYnNVcmw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcml2YXRlIGNoZWNrRm9yRXhpc3RpbmdUb2tlbigpOiB2b2lkIHtcclxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRlVXNlcihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiJdfQ==
|