@cleavelandprice/ngx-lib 3.0.9 → 3.1.0

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.
Files changed (138) hide show
  1. package/active-directory/model/ad-object-with-children.d.ts +4 -0
  2. package/active-directory/model/cleaveland-price-user.d.ts +17 -0
  3. package/active-directory/model/group.d.ts +7 -0
  4. package/active-directory/model/user.d.ts +0 -9
  5. package/active-directory/public_api.d.ts +3 -0
  6. package/active-directory/services/active-directory.service.d.ts +13 -0
  7. package/authentication/authentication.module.d.ts +3 -16
  8. package/authentication/model/abstract-authentication-service.d.ts +14 -0
  9. package/authentication/model/service-config.d.ts +1 -0
  10. package/authentication/object/authentication-object.module.d.ts +11 -0
  11. package/authentication/object/index.d.ts +5 -0
  12. package/authentication/object/model/default-config.d.ts +2 -0
  13. package/authentication/object/model/service-config.d.ts +3 -0
  14. package/authentication/object/public_api.d.ts +4 -0
  15. package/authentication/object/services/authentication-object.service.d.ts +23 -0
  16. package/authentication/public_api.d.ts +1 -6
  17. package/authentication/token/authentication-token.module.d.ts +11 -0
  18. package/authentication/token/gui/authentication-token-gui.module.d.ts +20 -0
  19. package/authentication/{components → token/gui/components}/login/login.component.d.ts +3 -3
  20. package/authentication/{components → token/gui/components}/login-form/login-form.component.d.ts +3 -3
  21. package/authentication/token/gui/index.d.ts +5 -0
  22. package/authentication/token/gui/model/default-config.d.ts +2 -0
  23. package/authentication/{model → token/gui/model}/login-form-data.d.ts +0 -0
  24. package/authentication/token/gui/model/service-config.d.ts +3 -0
  25. package/authentication/token/gui/public_api.d.ts +7 -0
  26. package/authentication/token/gui/services/authentication-token-gui.service.d.ts +15 -0
  27. package/authentication/token/index.d.ts +5 -0
  28. package/authentication/{model → token/model}/authentication-token.d.ts +0 -0
  29. package/authentication/token/model/default-config.d.ts +2 -0
  30. package/authentication/token/model/service-config.d.ts +4 -0
  31. package/authentication/token/public_api.d.ts +5 -0
  32. package/authentication/token/services/authentication-token.service.d.ts +22 -0
  33. package/esm2020/active-directory/active-directory.module.mjs +5 -5
  34. package/esm2020/active-directory/model/ad-object-with-children.mjs +2 -0
  35. package/esm2020/active-directory/model/cleaveland-price-user.mjs +2 -0
  36. package/esm2020/active-directory/model/default-config.mjs +2 -2
  37. package/esm2020/active-directory/model/group.mjs +2 -0
  38. package/esm2020/active-directory/model/user.mjs +1 -1
  39. package/esm2020/active-directory/public_api.mjs +4 -1
  40. package/esm2020/active-directory/services/active-directory.service.mjs +38 -10
  41. package/esm2020/authentication/authentication.module.mjs +10 -68
  42. package/esm2020/authentication/model/abstract-authentication-service.mjs +2 -0
  43. package/esm2020/authentication/model/service-config.mjs +1 -1
  44. package/esm2020/authentication/object/authentication-object.module.mjs +39 -0
  45. package/esm2020/authentication/object/cleavelandprice-ngx-lib-authentication-object.mjs +5 -0
  46. package/esm2020/authentication/object/model/default-config.mjs +5 -0
  47. package/esm2020/authentication/object/model/service-config.mjs +4 -0
  48. package/esm2020/authentication/object/public_api.mjs +5 -0
  49. package/esm2020/authentication/object/services/authentication-object.service.mjs +101 -0
  50. package/esm2020/authentication/public_api.mjs +2 -7
  51. package/esm2020/authentication/token/authentication-token.module.mjs +39 -0
  52. package/esm2020/authentication/token/cleavelandprice-ngx-lib-authentication-token.mjs +5 -0
  53. package/esm2020/authentication/token/gui/authentication-token-gui.module.mjs +77 -0
  54. package/esm2020/authentication/token/gui/cleavelandprice-ngx-lib-authentication-token-gui.mjs +5 -0
  55. package/esm2020/authentication/token/gui/components/login/login.component.mjs +39 -0
  56. package/esm2020/authentication/token/gui/components/login-form/login-form.component.mjs +60 -0
  57. package/esm2020/authentication/token/gui/model/default-config.mjs +6 -0
  58. package/esm2020/authentication/token/gui/model/login-form-data.mjs +2 -0
  59. package/esm2020/authentication/token/gui/model/service-config.mjs +4 -0
  60. package/esm2020/authentication/token/gui/public_api.mjs +8 -0
  61. package/esm2020/authentication/token/gui/services/authentication-token-gui.service.mjs +74 -0
  62. package/esm2020/authentication/token/model/authentication-token.mjs +2 -0
  63. package/esm2020/authentication/token/model/default-config.mjs +6 -0
  64. package/esm2020/authentication/token/model/service-config.mjs +4 -0
  65. package/esm2020/authentication/token/public_api.mjs +6 -0
  66. package/esm2020/authentication/token/services/authentication-token.service.mjs +112 -0
  67. package/esm2020/dialog/components/base/base.component.mjs +4 -4
  68. package/esm2020/dialog/components/choice/choice.component.mjs +4 -4
  69. package/esm2020/dialog/components/confirmation/confirmation.component.mjs +4 -4
  70. package/esm2020/dialog/components/input/input.component.mjs +4 -4
  71. package/esm2020/dialog/components/message/message.component.mjs +4 -4
  72. package/esm2020/dialog/dialog.module.mjs +4 -4
  73. package/esm2020/lib/ngx-lib.module.mjs +6 -6
  74. package/esm2020/lib/services/app-path-config.service.mjs +4 -4
  75. package/esm2020/public_api.mjs +2 -1
  76. package/esm2020/sharepoint/services/sharepoint.service.mjs +6 -8
  77. package/esm2020/sharepoint/sharepoint.module.mjs +11 -11
  78. package/esm2020/upload/components/upload/upload.component.mjs +5 -5
  79. package/esm2020/upload/components/upload-dialog/upload-dialog.component.mjs +5 -5
  80. package/esm2020/upload/services/upload.service.mjs +4 -4
  81. package/esm2020/upload/upload.module.mjs +7 -7
  82. package/esm2020/url-utilities/pipes/safe-resource-url.pipe.mjs +3 -3
  83. package/esm2020/url-utilities/pipes/safe-url.pipe.mjs +3 -3
  84. package/esm2020/url-utilities/pipes/uri-scheme.pipe.mjs +3 -3
  85. package/esm2020/url-utilities/url-utilities.module.mjs +4 -4
  86. package/fesm2015/cleavelandprice-ngx-lib-active-directory.mjs +41 -13
  87. package/fesm2015/cleavelandprice-ngx-lib-active-directory.mjs.map +1 -1
  88. package/fesm2015/cleavelandprice-ngx-lib-authentication-object.mjs +151 -0
  89. package/fesm2015/cleavelandprice-ngx-lib-authentication-object.mjs.map +1 -0
  90. package/fesm2015/cleavelandprice-ngx-lib-authentication-token-gui.mjs +251 -0
  91. package/fesm2015/cleavelandprice-ngx-lib-authentication-token-gui.mjs.map +1 -0
  92. package/fesm2015/cleavelandprice-ngx-lib-authentication-token.mjs +163 -0
  93. package/fesm2015/cleavelandprice-ngx-lib-authentication-token.mjs.map +1 -0
  94. package/fesm2015/cleavelandprice-ngx-lib-authentication.mjs +10 -282
  95. package/fesm2015/cleavelandprice-ngx-lib-authentication.mjs.map +1 -1
  96. package/fesm2015/cleavelandprice-ngx-lib-dialog.mjs +19 -19
  97. package/fesm2015/cleavelandprice-ngx-lib-dialog.mjs.map +1 -1
  98. package/fesm2015/cleavelandprice-ngx-lib-sharepoint.mjs +14 -16
  99. package/fesm2015/cleavelandprice-ngx-lib-sharepoint.mjs.map +1 -1
  100. package/fesm2015/cleavelandprice-ngx-lib-upload.mjs +15 -15
  101. package/fesm2015/cleavelandprice-ngx-lib-upload.mjs.map +1 -1
  102. package/fesm2015/cleavelandprice-ngx-lib-url-utilities.mjs +13 -13
  103. package/fesm2015/cleavelandprice-ngx-lib.mjs +11 -11
  104. package/fesm2015/cleavelandprice-ngx-lib.mjs.map +1 -1
  105. package/fesm2020/cleavelandprice-ngx-lib-active-directory.mjs +41 -13
  106. package/fesm2020/cleavelandprice-ngx-lib-active-directory.mjs.map +1 -1
  107. package/fesm2020/cleavelandprice-ngx-lib-authentication-object.mjs +150 -0
  108. package/fesm2020/cleavelandprice-ngx-lib-authentication-object.mjs.map +1 -0
  109. package/fesm2020/cleavelandprice-ngx-lib-authentication-token-gui.mjs +246 -0
  110. package/fesm2020/cleavelandprice-ngx-lib-authentication-token-gui.mjs.map +1 -0
  111. package/fesm2020/cleavelandprice-ngx-lib-authentication-token.mjs +162 -0
  112. package/fesm2020/cleavelandprice-ngx-lib-authentication-token.mjs.map +1 -0
  113. package/fesm2020/cleavelandprice-ngx-lib-authentication.mjs +10 -277
  114. package/fesm2020/cleavelandprice-ngx-lib-authentication.mjs.map +1 -1
  115. package/fesm2020/cleavelandprice-ngx-lib-dialog.mjs +19 -19
  116. package/fesm2020/cleavelandprice-ngx-lib-dialog.mjs.map +1 -1
  117. package/fesm2020/cleavelandprice-ngx-lib-sharepoint.mjs +14 -16
  118. package/fesm2020/cleavelandprice-ngx-lib-sharepoint.mjs.map +1 -1
  119. package/fesm2020/cleavelandprice-ngx-lib-upload.mjs +15 -15
  120. package/fesm2020/cleavelandprice-ngx-lib-upload.mjs.map +1 -1
  121. package/fesm2020/cleavelandprice-ngx-lib-url-utilities.mjs +13 -13
  122. package/fesm2020/cleavelandprice-ngx-lib.mjs +11 -11
  123. package/fesm2020/cleavelandprice-ngx-lib.mjs.map +1 -1
  124. package/package.json +28 -3
  125. package/public_api.d.ts +1 -0
  126. package/sharepoint/services/sharepoint.service.d.ts +3 -3
  127. package/sharepoint/sharepoint.module.d.ts +6 -6
  128. package/upload/components/upload/upload.component.d.ts +1 -1
  129. package/upload/components/upload-dialog/upload-dialog.component.d.ts +1 -1
  130. package/upload/services/upload.service.d.ts +2 -2
  131. package/authentication/model/default-config.d.ts +0 -2
  132. package/authentication/services/authentication.service.d.ts +0 -25
  133. package/esm2020/authentication/components/login/login.component.mjs +0 -39
  134. package/esm2020/authentication/components/login-form/login-form.component.mjs +0 -60
  135. package/esm2020/authentication/model/authentication-token.mjs +0 -2
  136. package/esm2020/authentication/model/default-config.mjs +0 -4
  137. package/esm2020/authentication/model/login-form-data.mjs +0 -2
  138. package/esm2020/authentication/services/authentication.service.mjs +0 -126
@@ -2,13 +2,13 @@ import * as i0 from '@angular/core';
2
2
  import { Injectable, Optional, NgModule, SkipSelf } from '@angular/core';
3
3
  import * as i2 from '@angular/common/http';
4
4
 
5
- class ServiceConfig {
6
- }
7
-
8
5
  const defaultConfig = {
9
6
  apiUrl: 'http://utilityapi'
10
7
  };
11
8
 
9
+ class ServiceConfig {
10
+ }
11
+
12
12
  class AppPathConfigService {
13
13
  constructor(config, http) {
14
14
  this.config = config;
@@ -41,9 +41,9 @@ class AppPathConfigService {
41
41
  return this.http.get(`${this.url}/function/${name}`);
42
42
  }
43
43
  }
44
- AppPathConfigService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: AppPathConfigService, deps: [{ token: ServiceConfig, optional: true }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
45
- AppPathConfigService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: AppPathConfigService, providedIn: 'root' });
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: AppPathConfigService, decorators: [{
44
+ AppPathConfigService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AppPathConfigService, deps: [{ token: ServiceConfig, optional: true }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
45
+ AppPathConfigService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AppPathConfigService, providedIn: 'root' });
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: AppPathConfigService, decorators: [{
47
47
  type: Injectable,
48
48
  args: [{
49
49
  providedIn: 'root'
@@ -68,10 +68,10 @@ class NgxLibModule {
68
68
  };
69
69
  }
70
70
  }
71
- NgxLibModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: NgxLibModule, deps: [{ token: NgxLibModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule });
72
- NgxLibModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.0", ngImport: i0, type: NgxLibModule });
73
- NgxLibModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: NgxLibModule });
74
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: NgxLibModule, decorators: [{
71
+ NgxLibModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: NgxLibModule, deps: [{ token: NgxLibModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule });
72
+ NgxLibModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.1", ngImport: i0, type: NgxLibModule });
73
+ NgxLibModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: NgxLibModule });
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: NgxLibModule, decorators: [{
75
75
  type: NgModule,
76
76
  args: [{
77
77
  declarations: [],
@@ -92,5 +92,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
92
92
  * Generated bundle index. Do not edit.
93
93
  */
94
94
 
95
- export { AppPathConfigService, NgxLibModule, ServiceConfig };
95
+ export { AppPathConfigService, NgxLibModule, ServiceConfig, defaultConfig };
96
96
  //# sourceMappingURL=cleavelandprice-ngx-lib.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cleavelandprice-ngx-lib.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/src/lib/model/service-config.ts","../../../../projects/cleavelandprice/ngx-lib/src/lib/model/default-config.ts","../../../../projects/cleavelandprice/ngx-lib/src/lib/services/app-path-config.service.ts","../../../../projects/cleavelandprice/ngx-lib/src/lib/ngx-lib.module.ts","../../../../projects/cleavelandprice/ngx-lib/src/public_api.ts","../../../../projects/cleavelandprice/ngx-lib/src/cleavelandprice-ngx-lib.ts"],"sourcesContent":["export class ServiceConfig {\r\n apiUrl!: string;\r\n}","import { ServiceConfig } from \"./service-config\";\r\n\r\nexport const defaultConfig: ServiceConfig = {\r\n apiUrl: 'http://utilityapi'\r\n}","import { HttpClient } from '@angular/common/http';\nimport { Injectable, Optional } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { AppPathConfig } from '../model/app-path-config';\n\nimport { defaultConfig } from '../model/default-config';\nimport { ServiceConfig } from '../model/service-config';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppPathConfigService {\n url!: string;\n\n constructor(@Optional() private config: ServiceConfig,\n private http: HttpClient) {\n\n this.config = {\n ...defaultConfig,\n ...this.config\n };\n \n this.url = `${this.config.apiUrl}/apppathconfigs`\n }\n\n getAll(): Observable<AppPathConfig[]> {\n return this.http.get<AppPathConfig[]>(this.url);\n }\n\n getById(id: number): Observable<AppPathConfig> {\n return this.http.get<AppPathConfig>(`${this.url}/${id}`);\n }\n\n getByAppId(id: number): Observable<AppPathConfig[]> {\n return this.http.get<AppPathConfig[]>(`${this.url}/appid/${id}`);\n }\n\n getByApp(name: string): Observable<AppPathConfig[]> {\n return this.http.get<AppPathConfig[]>(`${this.url}/app/${name}`);\n }\n\n getByAppTypeId(id: number): Observable<AppPathConfig[]> {\n return this.http.get<AppPathConfig[]>(`${this.url}/apptypeid/${id}`);\n }\n\n getByAppType(name: string): Observable<AppPathConfig[]> {\n return this.http.get<AppPathConfig[]>(`${this.url}/apptype/${name}`);\n }\n\n getByAppFunction(name: string): Observable<AppPathConfig[]> {\n return this.http.get<AppPathConfig[]>(`${this.url}/function/${name}`);\n }\n}\n","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { AppPathConfigService } from '../public_api';\nimport { ServiceConfig } from './model/service-config';\n\n@NgModule({\n declarations: [\n ],\n imports: [\n ],\n exports: [\n ]\n})\nexport class NgxLibModule {\n static forRoot(config: ServiceConfig): ModuleWithProviders<NgxLibModule> {\n return {\n ngModule: NgxLibModule,\n providers: [\n AppPathConfigService,\n { provide: ServiceConfig, useValue: config }\n ]\n };\n }\n\n constructor( @Optional() @SkipSelf() parentModule: NgxLibModule) {\n if (parentModule) {\n throw new Error(\n 'NgxLibModule is already loaded. Import it in the AppModule only');\n }\n }\n}","/*\n * Public API Surface of ngx-lib\n */\n\nexport * from './lib/model/app';\nexport * from './lib/model/app-path-config';\nexport * from './lib/model/app-type';\nexport * from './lib/model/service-config';\n\nexport * from './lib/services/app-path-config.service';\n\nexport * from './lib/ngx-lib.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ServiceConfig"],"mappings":"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"}
1
+ {"version":3,"file":"cleavelandprice-ngx-lib.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/src/lib/model/default-config.ts","../../../../projects/cleavelandprice/ngx-lib/src/lib/model/service-config.ts","../../../../projects/cleavelandprice/ngx-lib/src/lib/services/app-path-config.service.ts","../../../../projects/cleavelandprice/ngx-lib/src/lib/ngx-lib.module.ts","../../../../projects/cleavelandprice/ngx-lib/src/public_api.ts","../../../../projects/cleavelandprice/ngx-lib/src/cleavelandprice-ngx-lib.ts"],"sourcesContent":["import { ServiceConfig } from \"./service-config\";\r\n\r\nexport const defaultConfig: ServiceConfig = {\r\n apiUrl: 'http://utilityapi'\r\n}","export class ServiceConfig {\r\n apiUrl!: string;\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, Optional } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { AppPathConfig } from '../model/app-path-config';\r\nimport { defaultConfig } from '../model/default-config';\r\nimport { ServiceConfig } from '../model/service-config';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppPathConfigService {\r\n url!: string;\r\n\r\n constructor(@Optional() private config: ServiceConfig,\r\n private http: HttpClient) {\r\n\r\n this.config = {\r\n ...defaultConfig,\r\n ...this.config\r\n };\r\n \r\n this.url = `${this.config.apiUrl}/apppathconfigs`\r\n }\r\n\r\n getAll(): Observable<AppPathConfig[]> {\r\n return this.http.get<AppPathConfig[]>(this.url);\r\n }\r\n\r\n getById(id: number): Observable<AppPathConfig> {\r\n return this.http.get<AppPathConfig>(`${this.url}/${id}`);\r\n }\r\n\r\n getByAppId(id: number): Observable<AppPathConfig[]> {\r\n return this.http.get<AppPathConfig[]>(`${this.url}/appid/${id}`);\r\n }\r\n\r\n getByApp(name: string): Observable<AppPathConfig[]> {\r\n return this.http.get<AppPathConfig[]>(`${this.url}/app/${name}`);\r\n }\r\n\r\n getByAppTypeId(id: number): Observable<AppPathConfig[]> {\r\n return this.http.get<AppPathConfig[]>(`${this.url}/apptypeid/${id}`);\r\n }\r\n\r\n getByAppType(name: string): Observable<AppPathConfig[]> {\r\n return this.http.get<AppPathConfig[]>(`${this.url}/apptype/${name}`);\r\n }\r\n\r\n getByAppFunction(name: string): Observable<AppPathConfig[]> {\r\n return this.http.get<AppPathConfig[]>(`${this.url}/function/${name}`);\r\n }\r\n}\r\n","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\r\n\r\nimport { AppPathConfigService } from './services/app-path-config.service';\r\n\r\nimport { ServiceConfig } from './model/service-config';\r\n\r\n@NgModule({\r\n declarations: [\r\n ],\r\n imports: [\r\n ],\r\n exports: [\r\n ]\r\n})\r\nexport class NgxLibModule {\r\n static forRoot(config: ServiceConfig): ModuleWithProviders<NgxLibModule> {\r\n return {\r\n ngModule: NgxLibModule,\r\n providers: [\r\n AppPathConfigService,\r\n { provide: ServiceConfig, useValue: config }\r\n ]\r\n };\r\n }\r\n\r\n constructor(@Optional() @SkipSelf() parentModule: NgxLibModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'NgxLibModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}","/*\r\n * Public API Surface of ngx-lib\r\n */\r\n\r\nexport * from './lib/model/app';\r\nexport * from './lib/model/app-path-config';\r\nexport * from './lib/model/app-type';\r\nexport * from './lib/model/default-config';\r\nexport * from './lib/model/service-config';\r\n\r\nexport * from './lib/services/app-path-config.service';\r\n\r\nexport * from './lib/ngx-lib.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ServiceConfig"],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
+ "comment": "NGX-LIB primary entry point package.json",
2
3
  "name": "@cleavelandprice/ngx-lib",
3
- "version": "3.0.9",
4
+ "version": "3.1.0",
4
5
  "description": "Angular 14+ library providing foundational functionality to Cleaveland-Price applications",
5
6
  "peerDependencies": {
6
- "@angular/common": "^14.1.0",
7
- "@angular/core": "^14.1.0"
7
+ "@angular/common": "^14.2.1",
8
+ "@angular/core": "^14.2.1"
8
9
  },
9
10
  "dependencies": {
10
11
  "tslib": "^2.3.0"
@@ -55,6 +56,30 @@
55
56
  "node": "./fesm2015/cleavelandprice-ngx-lib-authentication.mjs",
56
57
  "default": "./fesm2020/cleavelandprice-ngx-lib-authentication.mjs"
57
58
  },
59
+ "./authentication/object": {
60
+ "types": "./authentication/object/index.d.ts",
61
+ "esm2020": "./esm2020/authentication/object/cleavelandprice-ngx-lib-authentication-object.mjs",
62
+ "es2020": "./fesm2020/cleavelandprice-ngx-lib-authentication-object.mjs",
63
+ "es2015": "./fesm2015/cleavelandprice-ngx-lib-authentication-object.mjs",
64
+ "node": "./fesm2015/cleavelandprice-ngx-lib-authentication-object.mjs",
65
+ "default": "./fesm2020/cleavelandprice-ngx-lib-authentication-object.mjs"
66
+ },
67
+ "./authentication/token/gui": {
68
+ "types": "./authentication/token/gui/index.d.ts",
69
+ "esm2020": "./esm2020/authentication/token/gui/cleavelandprice-ngx-lib-authentication-token-gui.mjs",
70
+ "es2020": "./fesm2020/cleavelandprice-ngx-lib-authentication-token-gui.mjs",
71
+ "es2015": "./fesm2015/cleavelandprice-ngx-lib-authentication-token-gui.mjs",
72
+ "node": "./fesm2015/cleavelandprice-ngx-lib-authentication-token-gui.mjs",
73
+ "default": "./fesm2020/cleavelandprice-ngx-lib-authentication-token-gui.mjs"
74
+ },
75
+ "./authentication/token": {
76
+ "types": "./authentication/token/index.d.ts",
77
+ "esm2020": "./esm2020/authentication/token/cleavelandprice-ngx-lib-authentication-token.mjs",
78
+ "es2020": "./fesm2020/cleavelandprice-ngx-lib-authentication-token.mjs",
79
+ "es2015": "./fesm2015/cleavelandprice-ngx-lib-authentication-token.mjs",
80
+ "node": "./fesm2015/cleavelandprice-ngx-lib-authentication-token.mjs",
81
+ "default": "./fesm2020/cleavelandprice-ngx-lib-authentication-token.mjs"
82
+ },
58
83
  "./dialog": {
59
84
  "types": "./dialog/index.d.ts",
60
85
  "esm2020": "./esm2020/dialog/cleavelandprice-ngx-lib-dialog.mjs",
package/public_api.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './lib/model/app';
2
2
  export * from './lib/model/app-path-config';
3
3
  export * from './lib/model/app-type';
4
+ export * from './lib/model/default-config';
4
5
  export * from './lib/model/service-config';
5
6
  export * from './lib/services/app-path-config.service';
6
7
  export * from './lib/ngx-lib.module';
@@ -7,7 +7,7 @@ import { ServiceConfig } from '../model/service-config';
7
7
  import { UserRequest } from '../model/user-request';
8
8
  import { User } from '../model/user';
9
9
  import * as i0 from "@angular/core";
10
- export declare class SharepointService {
10
+ export declare class SharePointService {
11
11
  private config;
12
12
  private http;
13
13
  private cache;
@@ -20,6 +20,6 @@ export declare class SharepointService {
20
20
  getPhotos(): Observable<PhotoItem[]>;
21
21
  getUsers(request: UserRequest, id?: number): Observable<User | User[]>;
22
22
  clearCache(): void;
23
- static ɵfac: i0.ɵɵFactoryDeclaration<SharepointService, [{ optional: true; }, null]>;
24
- static ɵprov: i0.ɵɵInjectableDeclaration<SharepointService>;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<SharePointService, [{ optional: true; }, null]>;
24
+ static ɵprov: i0.ɵɵInjectableDeclaration<SharePointService>;
25
25
  }
@@ -2,10 +2,10 @@ import { ModuleWithProviders } from '@angular/core';
2
2
  import { ServiceConfig } from './model/service-config';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/common";
5
- export declare class SharepointModule {
6
- static forRoot(config: ServiceConfig): ModuleWithProviders<SharepointModule>;
7
- constructor(parentModule: SharepointModule);
8
- static ɵfac: i0.ɵɵFactoryDeclaration<SharepointModule, [{ optional: true; skipSelf: true; }]>;
9
- static ɵmod: i0.ɵɵNgModuleDeclaration<SharepointModule, never, [typeof i1.CommonModule], never>;
10
- static ɵinj: i0.ɵɵInjectorDeclaration<SharepointModule>;
5
+ export declare class SharePointModule {
6
+ static forRoot(config: ServiceConfig): ModuleWithProviders<SharePointModule>;
7
+ constructor(parentModule: SharePointModule);
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<SharePointModule, [{ optional: true; skipSelf: true; }]>;
9
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SharePointModule, never, [typeof i1.CommonModule], never>;
10
+ static ɵinj: i0.ɵɵInjectorDeclaration<SharePointModule>;
11
11
  }
@@ -11,5 +11,5 @@ export declare class UploadComponent implements OnInit {
11
11
  ngOnInit(): void;
12
12
  openUploadDialog(): void;
13
13
  static ɵfac: i0.ɵɵFactoryDeclaration<UploadComponent, never>;
14
- static ɵcmp: i0.ɵɵComponentDeclaration<UploadComponent, "cp-upload", never, {}, { "dialogClosed": "dialogClosed"; }, never, never, false>;
14
+ static ɵcmp: i0.ɵɵComponentDeclaration<UploadComponent, "upload", never, {}, { "dialogClosed": "dialogClosed"; }, never, never, false>;
15
15
  }
@@ -20,5 +20,5 @@ export declare class UploadDialogComponent implements OnInit {
20
20
  onFilesAdded(): void;
21
21
  closeDialog(): void;
22
22
  static ɵfac: i0.ɵɵFactoryDeclaration<UploadDialogComponent, never>;
23
- static ɵcmp: i0.ɵɵComponentDeclaration<UploadDialogComponent, "cp-upload-dialog", never, {}, {}, never, never, false>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<UploadDialogComponent, "upload-dialog", never, {}, {}, never, never, false>;
24
24
  }
@@ -1,9 +1,9 @@
1
1
  import { HttpClient } from '@angular/common/http';
2
2
  import { Observable } from 'rxjs';
3
- import { ServiceConfig } from '../model/service-config';
4
- import { FileUploadRequest } from '../model/file-upload-request';
5
3
  import { DatabaseFileInfo } from '../model/database-file-info';
6
4
  import { FilesystemFileInfo } from '../model/filesystem-file-info';
5
+ import { FileUploadRequest } from '../model/file-upload-request';
6
+ import { ServiceConfig } from '../model/service-config';
7
7
  import * as i0 from "@angular/core";
8
8
  export declare class UploadService {
9
9
  private http;
@@ -1,2 +0,0 @@
1
- import { ServiceConfig } from "./service-config";
2
- export declare const defaultConfig: ServiceConfig;
@@ -1,25 +0,0 @@
1
- import { EventEmitter } from '@angular/core';
2
- import { HttpClient } from '@angular/common/http';
3
- import { ServiceConfig } from '../model/service-config';
4
- import { SharepointService } from '@cleavelandprice/ngx-lib/sharepoint';
5
- import { AuthenticatedUser } from '../model/authenticated-user';
6
- import * as i0 from "@angular/core";
7
- export declare class AuthenticationService {
8
- private config;
9
- private http;
10
- private sharePointService;
11
- authenticatedChanged: EventEmitter<boolean>;
12
- authenticatingChanged: EventEmitter<boolean>;
13
- authenticationError: EventEmitter<any>;
14
- authenticating: boolean;
15
- authenticated: boolean;
16
- authenticatedUser: AuthenticatedUser | null;
17
- constructor(config: ServiceConfig, http: HttpClient, sharePointService: SharepointService);
18
- login(username: string, password: string, adminGroup?: string): void;
19
- logout(): void;
20
- private validateUser;
21
- private getPhoto;
22
- private checkForExistingToken;
23
- static ɵfac: i0.ɵɵFactoryDeclaration<AuthenticationService, [{ optional: true; }, null, null]>;
24
- static ɵprov: i0.ɵɵInjectableDeclaration<AuthenticationService>;
25
- }
@@ -1,39 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { ConfirmationComponent } from '@cleavelandprice/ngx-lib/dialog';
3
- import { LoginFormComponent } from '../login-form/login-form.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/icon";
9
- export class LoginComponent {
10
- constructor(dialog, authenticationService) {
11
- this.dialog = dialog;
12
- this.authenticationService = authenticationService;
13
- }
14
- login() {
15
- this.dialog.open(LoginFormComponent, {
16
- data: { adminGroup: this.adminGroup }
17
- });
18
- }
19
- confirmLogout() {
20
- this.dialog.open(ConfirmationComponent, {
21
- data: { message: `Are you sure you want to logout?` }
22
- })
23
- .afterClosed()
24
- .subscribe(result => {
25
- if (result) {
26
- this.authenticationService.logout();
27
- }
28
- });
29
- }
30
- }
31
- LoginComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: LoginComponent, deps: [{ token: i1.MatDialog }, { token: i2.AuthenticationService }], target: i0.ɵɵFactoryTarget.Component });
32
- LoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: LoginComponent, selector: "authentication-login", inputs: { adminGroup: "adminGroup" }, ngImport: i0, template: "<div id=\"user-id\">\n <!-- Logged out -->\n <mat-icon *ngIf=\"!authenticationService.authenticated\"\n fontIcon=\"account_circle\"\n matTooltip=\"Login\"\n (click)=\"login()\">\n </mat-icon>\n\n <!-- Logged in -->\n <ng-container *ngIf=\"authenticationService.authenticated\">\n <!-- With photo -->\n <img *ngIf=\"authenticationService.authenticatedUser?.photoUrl\"\n id=\"authenticated-user-image\"\n [src]=\"authenticationService.authenticatedUser?.photoUrl\"\n matTooltip=\"Logout\"\n (click)=\"confirmLogout()\" />\n \n <!-- Without photo -->\n <mat-icon *ngIf=\"!authenticationService.authenticatedUser?.photoUrl\"\n fontIcon=\"account_circle\"\n matTooltip=\"Logout\"\n (click)=\"confirmLogout()\">\n </mat-icon>\n \n <!-- Name -->\n <div id=\"user-name\">\n {{ authenticationService.authenticatedUser?.displayName }}\n </div>\n </ng-container>\n</div>", styles: ["#user-id{display:flex;height:2em;padding:.3em;font-family:Verdana,Geneva,Tahoma,sans-serif}mat-icon{font-size:2em!important;height:2em!important;width:2em!important}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", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: LoginComponent, decorators: [{
34
- type: Component,
35
- args: [{ selector: 'authentication-login', template: "<div id=\"user-id\">\n <!-- Logged out -->\n <mat-icon *ngIf=\"!authenticationService.authenticated\"\n fontIcon=\"account_circle\"\n matTooltip=\"Login\"\n (click)=\"login()\">\n </mat-icon>\n\n <!-- Logged in -->\n <ng-container *ngIf=\"authenticationService.authenticated\">\n <!-- With photo -->\n <img *ngIf=\"authenticationService.authenticatedUser?.photoUrl\"\n id=\"authenticated-user-image\"\n [src]=\"authenticationService.authenticatedUser?.photoUrl\"\n matTooltip=\"Logout\"\n (click)=\"confirmLogout()\" />\n \n <!-- Without photo -->\n <mat-icon *ngIf=\"!authenticationService.authenticatedUser?.photoUrl\"\n fontIcon=\"account_circle\"\n matTooltip=\"Logout\"\n (click)=\"confirmLogout()\">\n </mat-icon>\n \n <!-- Name -->\n <div id=\"user-name\">\n {{ authenticationService.authenticatedUser?.displayName }}\n </div>\n </ng-container>\n</div>", styles: ["#user-id{display:flex;height:2em;padding:.3em;font-family:Verdana,Geneva,Tahoma,sans-serif}mat-icon{font-size:2em!important;height:2em!important;width:2em!important}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", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"] }]
36
- }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.AuthenticationService }]; }, propDecorators: { adminGroup: [{
37
- type: Input
38
- }] } });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYXV0aGVudGljYXRpb24vc3JjL2NvbXBvbmVudHMvbG9naW4vbG9naW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYXV0aGVudGljYXRpb24vc3JjL2NvbXBvbmVudHMvbG9naW4vbG9naW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7OztBQVd4RSxNQUFNLE9BQU8sY0FBYztJQUd6QixZQUFvQixNQUFpQixFQUNsQixxQkFBNEM7UUFEM0MsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNsQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO0lBQy9ELENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDbkMsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7U0FDdEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUN0QyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsa0NBQWtDLEVBQUU7U0FDdEQsQ0FBQzthQUNELFdBQVcsRUFBRTthQUNiLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsQixJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDckM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OzJHQXZCVSxjQUFjOytGQUFkLGNBQWMsa0dDZDNCLDBoQ0E2Qk07MkZEZk8sY0FBYztrQkFSMUIsU0FBUzsrQkFDRSxzQkFBc0I7b0lBUXZCLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2RpYWxvZyc7XG5pbXBvcnQgeyBMb2dpbkZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9sb2dpbi1mb3JtL2xvZ2luLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdXRoZW50aWNhdGlvbi1sb2dpbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2dpbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW1xuICAgICcuL2xvZ2luLmNvbXBvbmVudC5jc3MnLFxuICAgICcuLi8uLi8uLi8uLi9zdHlsZXMvbWF0LWljb24uY3NzJ1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIExvZ2luQ29tcG9uZW50IHtcbiAgQElucHV0KCkgYWRtaW5Hcm91cCE6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICAgICAgICBwdWJsaWMgYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UpIHtcbiAgfVxuXG4gIGxvZ2luKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nLm9wZW4oTG9naW5Gb3JtQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7IGFkbWluR3JvdXA6IHRoaXMuYWRtaW5Hcm91cCB9XG4gICAgfSk7XG4gIH1cblxuICBjb25maXJtTG9nb3V0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7IG1lc3NhZ2U6IGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gbG9nb3V0P2AgfVxuICAgIH0pXG4gICAgLmFmdGVyQ2xvc2VkKClcbiAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmxvZ291dCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGlkPVwidXNlci1pZFwiPlxuICAgIDwhLS0gTG9nZ2VkIG91dCAtLT5cbiAgICA8bWF0LWljb24gKm5nSWY9XCIhYXV0aGVudGljYXRpb25TZXJ2aWNlLmF1dGhlbnRpY2F0ZWRcIlxuICAgICAgICBmb250SWNvbj1cImFjY291bnRfY2lyY2xlXCJcbiAgICAgICAgbWF0VG9vbHRpcD1cIkxvZ2luXCJcbiAgICAgICAgKGNsaWNrKT1cImxvZ2luKClcIj5cbiAgICA8L21hdC1pY29uPlxuXG4gICAgPCEtLSBMb2dnZWQgaW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImF1dGhlbnRpY2F0aW9uU2VydmljZS5hdXRoZW50aWNhdGVkXCI+XG4gICAgICAgIDwhLS0gV2l0aCBwaG90byAtLT5cbiAgICAgICAgPGltZyAqbmdJZj1cImF1dGhlbnRpY2F0aW9uU2VydmljZS5hdXRoZW50aWNhdGVkVXNlcj8ucGhvdG9VcmxcIlxuICAgICAgICAgICAgaWQ9XCJhdXRoZW50aWNhdGVkLXVzZXItaW1hZ2VcIlxuICAgICAgICAgICAgW3NyY109XCJhdXRoZW50aWNhdGlvblNlcnZpY2UuYXV0aGVudGljYXRlZFVzZXI/LnBob3RvVXJsXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJMb2dvdXRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNvbmZpcm1Mb2dvdXQoKVwiIC8+XG4gICAgXG4gICAgICAgIDwhLS0gV2l0aG91dCBwaG90byAtLT5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIWF1dGhlbnRpY2F0aW9uU2VydmljZS5hdXRoZW50aWNhdGVkVXNlcj8ucGhvdG9VcmxcIlxuICAgICAgICAgICAgZm9udEljb249XCJhY2NvdW50X2NpcmNsZVwiXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiTG9nb3V0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJjb25maXJtTG9nb3V0KClcIj5cbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICBcbiAgICAgICAgPCEtLSBOYW1lIC0tPlxuICAgICAgICA8ZGl2IGlkPVwidXNlci1uYW1lXCI+XG4gICAgICAgICAgICB7eyBhdXRoZW50aWNhdGlvblNlcnZpY2UuYXV0aGVudGljYXRlZFVzZXI/LmRpc3BsYXlOYW1lIH19XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+Il19
@@ -1,60 +0,0 @@
1
- import { Component, Inject } from '@angular/core';
2
- import { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms';
3
- import { MAT_DIALOG_DATA } from '@angular/material/dialog';
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/forms";
9
- import * as i5 from "@angular/material/button";
10
- import * as i6 from "@angular/material/form-field";
11
- import * as i7 from "@angular/material/icon";
12
- import * as i8 from "@angular/material/input";
13
- import * as i9 from "@angular/material/progress-spinner";
14
- export class LoginFormComponent {
15
- constructor(data, dialogRef, authenticationService) {
16
- this.dialogRef = dialogRef;
17
- this.authenticationService = authenticationService;
18
- this.errorMessage = null;
19
- this.form = new UntypedFormGroup({
20
- username: new UntypedFormControl(null, [Validators.required]),
21
- password: new UntypedFormControl(null, [Validators.required]),
22
- adminGroup: new UntypedFormControl()
23
- });
24
- this.form.get('adminGroup')?.setValue(data.adminGroup);
25
- }
26
- ngOnInit() {
27
- this.authenticatedChangedSubscription = this.authenticationService.authenticatedChanged
28
- .subscribe(this.authChangedHandler.bind(this));
29
- this.authenticationErrorSubscription = this.authenticationService.authenticationError
30
- .subscribe(this.errorHandler.bind(this));
31
- }
32
- ngOnDestroy() {
33
- this.authenticationErrorSubscription.unsubscribe();
34
- this.authenticatedChangedSubscription.unsubscribe();
35
- }
36
- authenticate() {
37
- this.errorMessage = null;
38
- const { username, password, adminGroup } = this.form.value;
39
- this.authenticationService.login(username, password, adminGroup);
40
- }
41
- authChangedHandler(authenticated) {
42
- if (authenticated) {
43
- this.dialogRef.close();
44
- }
45
- }
46
- errorHandler(err) {
47
- console.log('Authentication error', err);
48
- this.errorMessage = `${err.name}: ${err.statusText}`;
49
- }
50
- }
51
- LoginFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: LoginFormComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i2.AuthenticationService }], target: i0.ɵɵFactoryTarget.Component });
52
- LoginFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: LoginFormComponent, selector: "authentication-login-form", ngImport: i0, template: "<h2 mat-dialog-title>\n <span *ngIf=\"!authenticationService.authenticating\">Login</span>\n <span *ngIf=\"authenticationService.authenticating\">Authenticating...</span>\n</h2>\n\n<mat-dialog-content>\n <div id=\"spinner\" *ngIf=\"authenticationService.authenticating\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"></mat-progress-spinner>\n </div>\n\n <form *ngIf=\"!authenticationService.authenticating\" [formGroup]=\"form\">\n <mat-form-field>\n <input matInput formControlName=\"username\" placeholder=\"Username\" (keyup.enter)=\"authenticate()\">\n </mat-form-field>\n\n <mat-form-field>\n <input matInput formControlName=\"password\" type=\"password\" placeholder=\"Password\" (keyup.enter)=\"authenticate()\">\n </mat-form-field>\n </form>\n\n <div *ngIf=\"!authenticationService.authenticating && errorMessage\" id=\"error\">\n {{ errorMessage }}\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions *ngIf=\"!authenticationService.authenticating\">\n <button mat-raised-button color=\"primary\" (click)=\"authenticate()\"\n [disabled]=\"form.invalid\">\n <mat-icon fontIcon=\"done\"></mat-icon>\n <span>OK</span>\n </button>\n\n <button mat-raised-button (click)=\"dialogRef.close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n <span>Cancel</span>\n </button>\n</mat-dialog-actions>", styles: ["#spinner{width:100%;height:100%;display:flex;justify-content:center;align-items:center}form{display:grid;gap:1rem}mat-dialog-actions{display:grid;justify-content:center;grid-template-columns:auto auto;gap:1rem}#error{color:red}\n", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.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: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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"] }] });
53
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: LoginFormComponent, decorators: [{
54
- type: Component,
55
- args: [{ selector: 'authentication-login-form', template: "<h2 mat-dialog-title>\n <span *ngIf=\"!authenticationService.authenticating\">Login</span>\n <span *ngIf=\"authenticationService.authenticating\">Authenticating...</span>\n</h2>\n\n<mat-dialog-content>\n <div id=\"spinner\" *ngIf=\"authenticationService.authenticating\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"></mat-progress-spinner>\n </div>\n\n <form *ngIf=\"!authenticationService.authenticating\" [formGroup]=\"form\">\n <mat-form-field>\n <input matInput formControlName=\"username\" placeholder=\"Username\" (keyup.enter)=\"authenticate()\">\n </mat-form-field>\n\n <mat-form-field>\n <input matInput formControlName=\"password\" type=\"password\" placeholder=\"Password\" (keyup.enter)=\"authenticate()\">\n </mat-form-field>\n </form>\n\n <div *ngIf=\"!authenticationService.authenticating && errorMessage\" id=\"error\">\n {{ errorMessage }}\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions *ngIf=\"!authenticationService.authenticating\">\n <button mat-raised-button color=\"primary\" (click)=\"authenticate()\"\n [disabled]=\"form.invalid\">\n <mat-icon fontIcon=\"done\"></mat-icon>\n <span>OK</span>\n </button>\n\n <button mat-raised-button (click)=\"dialogRef.close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n <span>Cancel</span>\n </button>\n</mat-dialog-actions>", styles: ["#spinner{width:100%;height:100%;display:flex;justify-content:center;align-items:center}form{display:grid;gap:1rem}mat-dialog-actions{display:grid;justify-content:center;grid-template-columns:auto auto;gap:1rem}#error{color:red}\n", ".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}\n"] }]
56
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
57
- type: Inject,
58
- args: [MAT_DIALOG_DATA]
59
- }] }, { type: i1.MatDialogRef }, { type: i2.AuthenticationService }]; } });
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4tZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hdXRoZW50aWNhdGlvbi9zcmMvY29tcG9uZW50cy9sb2dpbi1mb3JtL2xvZ2luLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYXV0aGVudGljYXRpb24vc3JjL2NvbXBvbmVudHMvbG9naW4tZm9ybS9sb2dpbi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7QUFjekUsTUFBTSxPQUFPLGtCQUFrQjtJQVc3QixZQUFxQyxJQUFtQixFQUNyQyxTQUEyQyxFQUMzQyxxQkFBNEM7UUFENUMsY0FBUyxHQUFULFNBQVMsQ0FBa0M7UUFDM0MsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQVovRCxpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFJbkMsU0FBSSxHQUFHLElBQUksZ0JBQWdCLENBQUM7WUFDMUIsUUFBUSxFQUFFLElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBRSxDQUFDO1lBQy9ELFFBQVEsRUFBRSxJQUFJLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUUsQ0FBQztZQUMvRCxVQUFVLEVBQUUsSUFBSSxrQkFBa0IsRUFBRTtTQUNyQyxDQUFDLENBQUM7UUFNVyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0I7YUFDcEYsU0FBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVqRCxJQUFJLENBQUMsK0JBQStCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQjthQUNsRixTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQywrQkFBK0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsZ0NBQWdDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMzRCxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVPLGtCQUFrQixDQUFDLGFBQXNCO1FBQy9DLElBQUksYUFBYSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLEdBQVE7UUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdkQsQ0FBQzs7K0dBOUNVLGtCQUFrQixrQkFXVCxlQUFlO21HQVh4QixrQkFBa0IsaUVDaEIvQiwrNkNBb0NxQjsyRkRwQlIsa0JBQWtCO2tCQVI5QixTQUFTOytCQUNFLDJCQUEyQjs7MEJBa0J4QixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAsIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2luRm9ybURhdGEgfSBmcm9tICcuLi8uLi9tb2RlbC9sb2dpbi1mb3JtLWRhdGEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdXRoZW50aWNhdGlvbi1sb2dpbi1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi9sb2dpbi1mb3JtLmNvbXBvbmVudC5jc3MnLFxuICAgICcuLi8uLi8uLi8uLi9zdHlsZXMvbWF0LWljb24uY3NzJ1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIExvZ2luRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgYXV0aGVudGljYXRlZENoYW5nZWRTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIGF1dGhlbnRpY2F0aW9uRXJyb3JTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgZm9ybSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHtcbiAgICB1c2VybmFtZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsLCBbIFZhbGlkYXRvcnMucmVxdWlyZWQgXSksXG4gICAgcGFzc3dvcmQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobnVsbCwgWyBWYWxpZGF0b3JzLnJlcXVpcmVkIF0pLFxuICAgIGFkbWluR3JvdXA6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKVxuICB9KTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgZGF0YTogTG9naW5Gb3JtRGF0YSxcbiAgICAgICAgICAgICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPExvZ2luRm9ybUNvbXBvbmVudD4sXG4gICAgICAgICAgICAgIHB1YmxpYyBhdXRoZW50aWNhdGlvblNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSkge1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnYWRtaW5Hcm91cCcpPy5zZXRWYWx1ZShkYXRhLmFkbWluR3JvdXApO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hdXRoZW50aWNhdGVkQ2hhbmdlZFN1YnNjcmlwdGlvbiA9IHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmF1dGhlbnRpY2F0ZWRDaGFuZ2VkXG4gICAgICAuc3Vic2NyaWJlKHRoaXMuYXV0aENoYW5nZWRIYW5kbGVyLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yU3Vic2NyaXB0aW9uID0gdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UuYXV0aGVudGljYXRpb25FcnJvclxuICAgICAgLnN1YnNjcmliZSh0aGlzLmVycm9ySGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuYXV0aGVudGljYXRpb25FcnJvclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuYXV0aGVudGljYXRlZENoYW5nZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGF1dGhlbnRpY2F0ZSgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IG51bGw7XG4gICAgY29uc3QgeyB1c2VybmFtZSwgcGFzc3dvcmQsIGFkbWluR3JvdXAgfSA9IHRoaXMuZm9ybS52YWx1ZTtcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5sb2dpbih1c2VybmFtZSwgcGFzc3dvcmQsIGFkbWluR3JvdXApO1xuICB9XG5cbiAgcHJpdmF0ZSBhdXRoQ2hhbmdlZEhhbmRsZXIoYXV0aGVudGljYXRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChhdXRoZW50aWNhdGVkKSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXJyb3JIYW5kbGVyKGVycjogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0F1dGhlbnRpY2F0aW9uIGVycm9yJywgZXJyKTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGAke2Vyci5uYW1lfTogJHtlcnIuc3RhdHVzVGV4dH1gO1xuICB9XG59XG4iLCI8aDIgbWF0LWRpYWxvZy10aXRsZT5cbiAgICA8c3BhbiAqbmdJZj1cIiFhdXRoZW50aWNhdGlvblNlcnZpY2UuYXV0aGVudGljYXRpbmdcIj5Mb2dpbjwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImF1dGhlbnRpY2F0aW9uU2VydmljZS5hdXRoZW50aWNhdGluZ1wiPkF1dGhlbnRpY2F0aW5nLi4uPC9zcGFuPlxuPC9oMj5cblxuPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IGlkPVwic3Bpbm5lclwiICpuZ0lmPVwiYXV0aGVudGljYXRpb25TZXJ2aWNlLmF1dGhlbnRpY2F0aW5nXCI+XG4gICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjb2xvcj1cInByaW1hcnlcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8Zm9ybSAqbmdJZj1cIiFhdXRoZW50aWNhdGlvblNlcnZpY2UuYXV0aGVudGljYXRpbmdcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInVzZXJuYW1lXCIgcGxhY2Vob2xkZXI9XCJVc2VybmFtZVwiIChrZXl1cC5lbnRlcik9XCJhdXRoZW50aWNhdGUoKVwiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZFwiIHR5cGU9XCJwYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiAoa2V5dXAuZW50ZXIpPVwiYXV0aGVudGljYXRlKClcIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Zvcm0+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiIWF1dGhlbnRpY2F0aW9uU2VydmljZS5hdXRoZW50aWNhdGluZyAmJiBlcnJvck1lc3NhZ2VcIiBpZD1cImVycm9yXCI+XG4gICAgICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICAgIDwvZGl2PlxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG5cbjxtYXQtZGlhbG9nLWFjdGlvbnMgKm5nSWY9XCIhYXV0aGVudGljYXRpb25TZXJ2aWNlLmF1dGhlbnRpY2F0aW5nXCI+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiYXV0aGVudGljYXRlKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCI+XG4gICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImRvbmVcIj48L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj5PSzwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cImRpYWxvZ1JlZi5jbG9zZSgpXCI+XG4gICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+Q2FuY2VsPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+Il19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24tdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hdXRoZW50aWNhdGlvbi9zcmMvbW9kZWwvYXV0aGVudGljYXRpb24tdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQXV0aGVudGljYXRpb25Ub2tlbiB7XHJcbiAgICBhdWQ6IHN0cmluZztcclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgICBkaXN0aW5ndWlzaGVkTmFtZTogc3RyaW5nO1xyXG4gICAgZW1haWw6IHN0cmluZztcclxuICAgIGVtcGxveWVlTnVtYmVyOiBzdHJpbmc7XHJcbiAgICBleHA6IG51bWJlcjtcclxuICAgIGZpcnN0TmFtZTogc3RyaW5nO1xyXG4gICAgaXNzOiBzdHJpbmc7XHJcbiAgICBsYXN0TmFtZTogc3RyaW5nO1xyXG4gICAgbWVtYmVyT2Y6IHN0cmluZztcclxuICAgIG5iZjogbnVtYmVyO1xyXG4gICAgcGhvbmU6IHN0cmluZztcclxuICAgIHJvbGU6IHN0cmluZztcclxuICAgIHNpZDogc3RyaW5nO1xyXG4gICAgd2luYWNjb3VudG5hbWU6IHN0cmluZztcclxufVxyXG4iXX0=
@@ -1,4 +0,0 @@
1
- export const defaultConfig = {
2
- apiUrl: 'http://utilityapi/authenticate/token'
3
- };
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hdXRoZW50aWNhdGlvbi9zcmMvbW9kZWwvZGVmYXVsdC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFrQjtJQUN4QyxNQUFNLEVBQUUsc0NBQXNDO0NBQ2pELENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZXJ2aWNlQ29uZmlnIH0gZnJvbSBcIi4vc2VydmljZS1jb25maWdcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0Q29uZmlnOiBTZXJ2aWNlQ29uZmlnID0ge1xyXG4gICAgYXBpVXJsOiAnaHR0cDovL3V0aWxpdHlhcGkvYXV0aGVudGljYXRlL3Rva2VuJ1xyXG59Il19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4tZm9ybS1kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYXV0aGVudGljYXRpb24vc3JjL21vZGVsL2xvZ2luLWZvcm0tZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBMb2dpbkZvcm1EYXRhIHtcclxuICAgIGFkbWluR3JvdXA6IHN0cmluZztcclxufVxyXG4iXX0=
@@ -1,126 +0,0 @@
1
- //#region Imports
2
- import { Injectable, Output, EventEmitter, Optional } from '@angular/core';
3
- import { JwtHelperService } from '@auth0/angular-jwt';
4
- import { defaultConfig } from '../model/default-config';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../model/service-config";
7
- import * as i2 from "@angular/common/http";
8
- import * as i3 from "@cleavelandprice/ngx-lib/sharepoint";
9
- //#endregion
10
- export class AuthenticationService {
11
- //#endregion
12
- //#region Lifecycle
13
- // If a ServiceConfig object is not provided when the module is imported, then default values are pulled in from default-config.ts.
14
- constructor(config, http, sharePointService) {
15
- this.config = config;
16
- this.http = http;
17
- this.sharePointService = sharePointService;
18
- //#region Fields
19
- this.authenticatedChanged = new EventEmitter();
20
- this.authenticatingChanged = new EventEmitter();
21
- this.authenticationError = new EventEmitter();
22
- // Flag set to true while the service is attempting to authenticate the user
23
- this.authenticating = false;
24
- //Flag set to true when the user is successfully authenticated
25
- this.authenticated = false;
26
- this.config = {
27
- ...defaultConfig,
28
- ...this.config
29
- };
30
- this.checkForExistingToken();
31
- }
32
- //#endregion
33
- //#region Utilities
34
- //Authenticate the user and store the token in Local Storage
35
- login(username, password, adminGroup) {
36
- const today = new Date();
37
- //const expiration = new Date().setFullYear(today.getFullYear() + 10);
38
- const request = {
39
- username: username,
40
- password: password,
41
- adminGroup: adminGroup
42
- //expirationDate: expiration // moment().add(10, 'years').toDate()
43
- };
44
- this.authenticating = true;
45
- this.authenticatingChanged.emit(this.authenticating);
46
- // Sending a 'raw' POST request so that we can tell HttpClient that we are expecting text instead of Json
47
- // Otherwise, it would throw an error trying to decode Json from the response
48
- this.http.request('POST', this.config.apiUrl, { body: request, responseType: 'text' })
49
- .subscribe({
50
- next: (token) => this.validateUser(token),
51
- error: (err) => {
52
- //console.log('Authentication error', err);
53
- this.authenticating = false;
54
- this.authenticatingChanged.emit(this.authenticating);
55
- this.authenticationError.emit(err);
56
- }
57
- });
58
- }
59
- //Logout the user and delete the token from Local Storage
60
- logout() {
61
- if (localStorage.getItem('token')) {
62
- localStorage.removeItem('token');
63
- }
64
- this.authenticatedUser = null;
65
- this.authenticated = false;
66
- this.authenticatedChanged.emit(false);
67
- }
68
- validateUser(token) {
69
- if (!token) {
70
- return;
71
- }
72
- const jwtHelper = new JwtHelperService();
73
- const decoded = jwtHelper.decodeToken(token);
74
- if (jwtHelper.isTokenExpired(token)) {
75
- this.logout();
76
- return;
77
- }
78
- this.authenticatedUser = {
79
- admin: decoded.role === 'Admin',
80
- displayName: decoded.displayName,
81
- accountName: decoded.winaccountname,
82
- distinguishedName: decoded.distinguishedName,
83
- employeeNumber: decoded.employeeNumber,
84
- memberOf: decoded.memberOf
85
- };
86
- localStorage.setItem('token', token);
87
- this.getPhoto();
88
- this.authenticated = true;
89
- this.authenticatedChanged.emit(this.authenticated);
90
- this.authenticating = false;
91
- this.authenticatingChanged.emit(this.authenticating);
92
- }
93
- getPhoto() {
94
- this.sharePointService.getPhotos()
95
- .subscribe(photos => {
96
- // The user may have been logged out by the time the photos came back
97
- if (!this.authenticatedUser?.employeeNumber) {
98
- return;
99
- }
100
- const photo = photos.find(pic => pic.employeeNumber === +this.authenticatedUser.employeeNumber);
101
- if (photo) {
102
- this.authenticatedUser.photoUrl = photo.encodedAbsUrl;
103
- }
104
- });
105
- }
106
- checkForExistingToken() {
107
- this.validateUser(localStorage.getItem('token'));
108
- }
109
- }
110
- AuthenticationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: AuthenticationService, deps: [{ token: i1.ServiceConfig, optional: true }, { token: i2.HttpClient }, { token: i3.SharepointService }], target: i0.ɵɵFactoryTarget.Injectable });
111
- AuthenticationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: AuthenticationService, providedIn: 'root' });
112
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: AuthenticationService, decorators: [{
113
- type: Injectable,
114
- args: [{
115
- providedIn: 'root'
116
- }]
117
- }], ctorParameters: function () { return [{ type: i1.ServiceConfig, decorators: [{
118
- type: Optional
119
- }] }, { type: i2.HttpClient }, { type: i3.SharepointService }]; }, propDecorators: { authenticatedChanged: [{
120
- type: Output
121
- }], authenticatingChanged: [{
122
- type: Output
123
- }], authenticationError: [{
124
- type: Output
125
- }] } });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2F1dGhlbnRpY2F0aW9uL3NyYy9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXRELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7QUFPeEQsWUFBWTtBQUtaLE1BQU0sT0FBTyxxQkFBcUI7SUFjaEMsWUFBWTtJQUVaLG1CQUFtQjtJQUNuQixtSUFBbUk7SUFDbkksWUFBZ0MsTUFBcUIsRUFDakMsSUFBZ0IsRUFDaEIsaUJBQW9DO1FBRnhCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDakMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBbkJ4RCxnQkFBZ0I7UUFDTix5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ25ELDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDcEQsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVuRCw0RUFBNEU7UUFDNUUsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkIsOERBQThEO1FBQzlELGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBWVIsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLEdBQUcsYUFBYTtZQUNoQixHQUFHLElBQUksQ0FBQyxNQUFNO1NBQ2YsQ0FBQztRQUVGLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQzNDLENB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QXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sUUFBUTtRQUNkLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUU7YUFDL0IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2xCLHFFQUFxRTtZQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGNBQWMsRUFBRTtnQkFDM0MsT0FBTzthQUNSO1lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFakcsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO2FBQ3ZEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7O2tIQTFIVSxxQkFBcUI7c0hBQXJCLHFCQUFxQixjQUZwQixNQUFNOzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQW1CYyxRQUFRO3FHQWhCWCxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiBJbXBvcnRzXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBKd3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQGF1dGgwL2FuZ3VsYXItand0JztcblxuaW1wb3J0IHsgZGVmYXVsdENvbmZpZyB9IGZyb20gJy4uL21vZGVsL2RlZmF1bHQtY29uZmlnJztcblxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25Ub2tlbiB9IGZyb20gJy4uL21vZGVsL2F1dGhlbnRpY2F0aW9uLXRva2VuJztcbmltcG9ydCB7IFNlcnZpY2VDb25maWcgfSBmcm9tICcuLi9tb2RlbC9zZXJ2aWNlLWNvbmZpZyc7XG5pbXBvcnQgeyBTaGFyZXBvaW50U2VydmljZSB9IGZyb20gJ0BjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9zaGFyZXBvaW50JztcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRVc2VyIH0gZnJvbSAnLi4vbW9kZWwvYXV0aGVudGljYXRlZC11c2VyJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL2F1dGhlbnRpY2F0aW9uLXJlcXVlc3QnO1xuLy8jZW5kcmVnaW9uXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uU2VydmljZSB7XG4gIC8vI3JlZ2lvbiBGaWVsZHNcbiAgQE91dHB1dCgpIGF1dGhlbnRpY2F0ZWRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgYXV0aGVudGljYXRpbmdDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgYXV0aGVudGljYXRpb25FcnJvciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiBcbiAgLy8gRmxhZyBzZXQgdG8gdHJ1ZSB3aGlsZSB0aGUgc2VydmljZSBpcyBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZSB0aGUgdXNlclxuICBhdXRoZW50aWNhdGluZyA9IGZhbHNlO1xuIFxuICAvL0ZsYWcgc2V0IHRvIHRydWUgd2hlbiB0aGUgdXNlciBpcyBzdWNjZXNzZnVsbHkgYXV0aGVudGljYXRlZFxuICBhdXRoZW50aWNhdGVkID0gZmFsc2U7XG4gXG4gIC8vIE9iamVjdCByZXByZXNlbnRpbmcgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlclxuICBhdXRoZW50aWNhdGVkVXNlciE6IEF1dGhlbnRpY2F0ZWRVc2VyIHwgbnVsbDtcbiAgLy8jZW5kcmVnaW9uXG4gXG4gIC8vI3JlZ2lvbiBMaWZlY3ljbGVcbiAgLy8gSWYgYSBTZXJ2aWNlQ29uZmlnIG9iamVjdCBpcyBub3QgcHJvdmlkZWQgd2hlbiB0aGUgbW9kdWxlIGlzIGltcG9ydGVkLCB0aGVuIGRlZmF1bHQgdmFsdWVzIGFyZSBwdWxsZWQgaW4gZnJvbSBkZWZhdWx0LWNvbmZpZy50cy5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb25maWc6IFNlcnZpY2VDb25maWcsXG4gICAgICAgICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBzaGFyZVBvaW50U2VydmljZTogU2hhcmVwb2ludFNlcnZpY2UpIHtcblxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgLi4uZGVmYXVsdENvbmZpZyxcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29uZmlnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRm9yRXhpc3RpbmdUb2tlbigpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBVdGlsaXRpZXNcbiAgLy9BdXRoZW50aWNhdGUgdGhlIHVzZXIgYW5kIHN0b3JlIHRoZSB0b2tlbiBpbiBMb2NhbCBTdG9yYWdlXG4gIGxvZ2luKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGFkbWluR3JvdXA/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgLy9jb25zdCBleHBpcmF0aW9uID0gbmV3IERhdGUoKS5zZXRGdWxsWWVhcih0b2RheS5nZXRGdWxsWWVhcigpICsgMTApO1xuXG4gICAgY29uc3QgcmVxdWVzdDogQXV0aGVudGljYXRpb25SZXF1ZXN0ID0ge1xuICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxuICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxuICAgICAgYWRtaW5Hcm91cDogYWRtaW5Hcm91cFxuICAgICAgLy9leHBpcmF0aW9uRGF0ZTogZXhwaXJhdGlvbiAvLyBtb21lbnQoKS5hZGQoMTAsICd5ZWFycycpLnRvRGF0ZSgpXG4gICAgfTtcblxuICAgIHRoaXMuYXV0aGVudGljYXRpbmcgPSB0cnVlO1xuICAgIHRoaXMuYXV0aGVudGljYXRpbmdDaGFuZ2VkLmVtaXQodGhpcy5hdXRoZW50aWNhdGluZyk7XG5cbiAgICAvLyBTZW5kaW5nIGEgJ3JhdycgUE9TVCByZXF1ZXN0IHNvIHRoYXQgd2UgY2FuIHRlbGwgSHR0cENsaWVudCB0aGF0IHdlIGFyZSBleHBlY3RpbmcgdGV4dCBpbnN0ZWFkIG9mIEpzb25cbiAgICAvLyBPdGhlcndpc2UsIGl0IHdvdWxkIHRocm93IGFuIGVycm9yIHRyeWluZyB0byBkZWNvZGUgSnNvbiBmcm9tIHRoZSByZXNwb25zZVxuICAgIHRoaXMuaHR0cC5yZXF1ZXN0KCdQT1NUJywgdGhpcy5jb25maWcuYXBpVXJsLCB7IGJvZHk6IHJlcXVlc3QsIHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHRva2VuKSA9PlxuICAgICAgICAgIHRoaXMudmFsaWRhdGVVc2VyKHRva2VuKVxuICAgICAgICAsIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnQXV0aGVudGljYXRpb24gZXJyb3InLCBlcnIpO1xuICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW5nQ2hhbmdlZC5lbWl0KHRoaXMuYXV0aGVudGljYXRpbmcpO1xuICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25FcnJvci5lbWl0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG4gXG4gIC8vTG9nb3V0IHRoZSB1c2VyIGFuZCBkZWxldGUgdGhlIHRva2VuIGZyb20gTG9jYWwgU3RvcmFnZVxuICBsb2dvdXQoKTogdm9pZCB7XG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpKSB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndG9rZW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmF1dGhlbnRpY2F0ZWRVc2VyID0gbnVsbDtcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZWRDaGFuZ2VkLmVtaXQoZmFsc2UpO1xuICB9XG4gXG4gIHByaXZhdGUgdmFsaWRhdGVVc2VyKHRva2VuOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCF0b2tlbikgeyByZXR1cm47IH1cblxuICAgIGNvbnN0IGp3dEhlbHBlciA9IG5ldyBKd3RIZWxwZXJTZXJ2aWNlKCk7XG4gICAgY29uc3QgZGVjb2RlZCA9IGp3dEhlbHBlci5kZWNvZGVUb2tlbih0b2tlbikgYXMgQXV0aGVudGljYXRpb25Ub2tlbjtcblxuICAgIGlmIChqd3RIZWxwZXIuaXNUb2tlbkV4cGlyZWQodG9rZW4pKSB7XG4gICAgICB0aGlzLmxvZ291dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYXV0aGVudGljYXRlZFVzZXIgPSB7XG4gICAgICBhZG1pbjogZGVjb2RlZC5yb2xlID09PSAnQWRtaW4nLFxuICAgICAgZGlzcGxheU5hbWU6IGRlY29kZWQuZGlzcGxheU5hbWUsXG4gICAgICBhY2NvdW50TmFtZTogZGVjb2RlZC53aW5hY2NvdW50bmFtZSxcbiAgICAgIGRpc3Rpbmd1aXNoZWROYW1lOiBkZWNvZGVkLmRpc3Rpbmd1aXNoZWROYW1lLFxuICAgICAgZW1wbG95ZWVOdW1iZXI6IGRlY29kZWQuZW1wbG95ZWVOdW1iZXIsXG4gICAgICBtZW1iZXJPZjogZGVjb2RlZC5tZW1iZXJPZlxuICAgIH07XG5cbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndG9rZW4nLCB0b2tlbik7XG5cbiAgICB0aGlzLmdldFBob3RvKCk7XG4gICAgXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZWRDaGFuZ2VkLmVtaXQodGhpcy5hdXRoZW50aWNhdGVkKTtcblxuICAgIHRoaXMuYXV0aGVudGljYXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW5nQ2hhbmdlZC5lbWl0KHRoaXMuYXV0aGVudGljYXRpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQaG90bygpOiB2b2lkIHtcbiAgICB0aGlzLnNoYXJlUG9pbnRTZXJ2aWNlLmdldFBob3RvcygpXG4gICAgICAuc3Vic2NyaWJlKHBob3RvcyA9PiB7XG4gICAgICAgIC8vIFRoZSB1c2VyIG1heSBoYXZlIGJlZW4gbG9nZ2VkIG91dCBieSB0aGUgdGltZSB0aGUgcGhvdG9zIGNhbWUgYmFja1xuICAgICAgICBpZiAoIXRoaXMuYXV0aGVudGljYXRlZFVzZXI/LmVtcGxveWVlTnVtYmVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGhvdG8gPSBwaG90b3MuZmluZChwaWMgPT4gcGljLmVtcGxveWVlTnVtYmVyID09PSArdGhpcy5hdXRoZW50aWNhdGVkVXNlciEuZW1wbG95ZWVOdW1iZXIpO1xuXG4gICAgICAgIGlmIChwaG90bykge1xuICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRlZFVzZXIucGhvdG9VcmwgPSBwaG90by5lbmNvZGVkQWJzVXJsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tGb3JFeGlzdGluZ1Rva2VuKCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVVc2VyKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cbn1cbiAiXX0=