@verisoft/security-core 18.8.0 → 19.0.0-rc001

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 (31) hide show
  1. package/fesm2022/verisoft-security-core.mjs +33 -35
  2. package/fesm2022/verisoft-security-core.mjs.map +1 -1
  3. package/lib/provider.d.ts +3 -3
  4. package/package.json +8 -7
  5. package/esm2022/index.mjs +0 -2
  6. package/esm2022/lib/directives/has-permission.directive.mjs +0 -55
  7. package/esm2022/lib/directives/has-role.directive.mjs +0 -55
  8. package/esm2022/lib/directives/index.mjs +0 -3
  9. package/esm2022/lib/guards/auth.guard.mjs +0 -40
  10. package/esm2022/lib/guards/index.mjs +0 -2
  11. package/esm2022/lib/index.mjs +0 -7
  12. package/esm2022/lib/models/authenticated-user.model.mjs +0 -2
  13. package/esm2022/lib/models/config.model.mjs +0 -2
  14. package/esm2022/lib/models/functions.mjs +0 -70
  15. package/esm2022/lib/models/index.mjs +0 -4
  16. package/esm2022/lib/provider.mjs +0 -47
  17. package/esm2022/lib/services/auth-context.service.mjs +0 -36
  18. package/esm2022/lib/services/index.mjs +0 -8
  19. package/esm2022/lib/services/local-storage-token-provider.mjs +0 -23
  20. package/esm2022/lib/services/login.service.mjs +0 -27
  21. package/esm2022/lib/services/logout.service.mjs +0 -18
  22. package/esm2022/lib/services/security-initializer.mjs +0 -14
  23. package/esm2022/lib/services/session-token-provider.mjs +0 -17
  24. package/esm2022/lib/services/token-provider.mjs +0 -2
  25. package/esm2022/lib/state/actions.mjs +0 -3
  26. package/esm2022/lib/state/feature.mjs +0 -8
  27. package/esm2022/lib/state/index.mjs +0 -5
  28. package/esm2022/lib/state/reducers.mjs +0 -8
  29. package/esm2022/lib/state/selectors.mjs +0 -5
  30. package/esm2022/lib/state/state.mjs +0 -4
  31. package/esm2022/verisoft-security-core.mjs +0 -5
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, inject, NgModule, InjectionToken, APP_INITIALIZER, Directive, Input } from '@angular/core';
2
+ import { Injectable, inject, InjectionToken, provideAppInitializer, NgModule, Input, Directive } from '@angular/core';
3
3
  import { map, switchMap, of, from, firstValueFrom, distinctUntilChanged } from 'rxjs';
4
4
  import * as i1 from '@ngrx/store';
5
5
  import { createAction, props, createReducer, on, createFeature, createSelector, StoreModule } from '@ngrx/store';
@@ -113,10 +113,10 @@ class AuthContextService {
113
113
  hasRequiredRole(requiredPermissions) {
114
114
  return this.user$.pipe(map((user) => hasRequiredRole(user, requiredPermissions)));
115
115
  }
116
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AuthContextService, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable });
117
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AuthContextService, providedIn: 'root' });
116
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: AuthContextService, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable });
117
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: AuthContextService, providedIn: 'root' });
118
118
  }
119
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AuthContextService, decorators: [{
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: AuthContextService, decorators: [{
120
120
  type: Injectable,
121
121
  args: [{
122
122
  providedIn: 'root',
@@ -146,10 +146,10 @@ class AuthGuard {
146
146
  return of(!!hasPermission);
147
147
  }));
148
148
  }
149
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AuthGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
150
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AuthGuard, providedIn: 'root' });
149
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: AuthGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
150
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: AuthGuard, providedIn: 'root' });
151
151
  }
152
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AuthGuard, decorators: [{
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: AuthGuard, decorators: [{
153
153
  type: Injectable,
154
154
  args: [{
155
155
  providedIn: 'root',
@@ -176,11 +176,11 @@ class SecurityModule {
176
176
  providers: [...provideSecurity(config)],
177
177
  };
178
178
  }
179
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SecurityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
180
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.8", ngImport: i0, type: SecurityModule, imports: [i1.StoreFeatureModule] });
181
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SecurityModule, imports: [StoreModule.forFeature(SecurityFeature)] });
179
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: SecurityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
180
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.9", ngImport: i0, type: SecurityModule, imports: [i1.StoreFeatureModule] });
181
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: SecurityModule, imports: [StoreModule.forFeature(SecurityFeature)] });
182
182
  }
183
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SecurityModule, decorators: [{
183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: SecurityModule, decorators: [{
184
184
  type: NgModule,
185
185
  args: [{
186
186
  imports: [StoreModule.forFeature(SecurityFeature)],
@@ -188,12 +188,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
188
188
  }] });
189
189
  const SECURITY_CONTEXT_TOKEN_PROVIDER = new InjectionToken('SECURITY_CONTEXT_TOKEN_PROVIDER');
190
190
  const SECURITY_CONFIG = new InjectionToken('SECURITY_CONFIG');
191
- const SECURITY_INITIALIZER_PROVIDER = {
192
- provide: APP_INITIALIZER,
193
- useFactory: securityInitializerFactory,
194
- deps: [SECURITY_CONTEXT_TOKEN_PROVIDER, AuthContextService, SECURITY_CONFIG, Router],
195
- multi: true,
196
- };
191
+ const SECURITY_INITIALIZER_PROVIDER = provideAppInitializer(() => {
192
+ const initializerFn = (securityInitializerFactory)(inject(SECURITY_CONTEXT_TOKEN_PROVIDER), inject(AuthContextService), inject(SECURITY_CONFIG), inject(Router));
193
+ return initializerFn();
194
+ });
197
195
 
198
196
  class LocalStorageTokenProvider {
199
197
  config = inject(SECURITY_CONFIG);
@@ -207,10 +205,10 @@ class LocalStorageTokenProvider {
207
205
  removeToken() {
208
206
  localStorage.clear();
209
207
  }
210
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LocalStorageTokenProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
211
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LocalStorageTokenProvider });
208
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: LocalStorageTokenProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
209
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: LocalStorageTokenProvider });
212
210
  }
213
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LocalStorageTokenProvider, decorators: [{
211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: LocalStorageTokenProvider, decorators: [{
214
212
  type: Injectable
215
213
  }] });
216
214
 
@@ -232,10 +230,10 @@ class SessionStorageTokenProvider {
232
230
  const token = sessionStorage.getItem(this.config.tokenStorageKey);
233
231
  return of(token ?? undefined);
234
232
  }
235
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SessionStorageTokenProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
236
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SessionStorageTokenProvider });
233
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: SessionStorageTokenProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
234
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: SessionStorageTokenProvider });
237
235
  }
238
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SessionStorageTokenProvider, decorators: [{
236
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: SessionStorageTokenProvider, decorators: [{
239
237
  type: Injectable
240
238
  }] });
241
239
 
@@ -253,10 +251,10 @@ class LoginService {
253
251
  this.router.navigate([this.config.loginPage]);
254
252
  }
255
253
  }
256
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LoginService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
257
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LoginService });
254
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: LoginService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
255
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: LoginService });
258
256
  }
259
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LoginService, decorators: [{
257
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: LoginService, decorators: [{
260
258
  type: Injectable
261
259
  }] });
262
260
 
@@ -267,10 +265,10 @@ class LogoutService {
267
265
  this.tokenProvider.removeToken();
268
266
  this.authService.setUser(undefined);
269
267
  }
270
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LogoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
271
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LogoutService });
268
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: LogoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
269
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: LogoutService });
272
270
  }
273
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LogoutService, decorators: [{
271
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: LogoutService, decorators: [{
274
272
  type: Injectable
275
273
  }] });
276
274
 
@@ -311,10 +309,10 @@ class HasPermissionDirective {
311
309
  });
312
310
  }
313
311
  }
314
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: HasPermissionDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: AuthContextService }], target: i0.ɵɵFactoryTarget.Directive });
315
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.8", type: HasPermissionDirective, isStandalone: true, selector: "[hasPermission]", inputs: { hasPermission: "hasPermission" }, ngImport: i0 });
312
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: HasPermissionDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: AuthContextService }], target: i0.ɵɵFactoryTarget.Directive });
313
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.9", type: HasPermissionDirective, isStandalone: true, selector: "[hasPermission]", inputs: { hasPermission: "hasPermission" }, ngImport: i0 });
316
314
  }
317
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: HasPermissionDirective, decorators: [{
315
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: HasPermissionDirective, decorators: [{
318
316
  type: Directive,
319
317
  args: [{
320
318
  standalone: true,
@@ -361,10 +359,10 @@ class HasRoleDirective {
361
359
  });
362
360
  }
363
361
  }
364
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: HasRoleDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: AuthContextService }], target: i0.ɵɵFactoryTarget.Directive });
365
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.8", type: HasRoleDirective, isStandalone: true, selector: "[hasRole]", inputs: { hasRole: "hasRole" }, ngImport: i0 });
362
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: HasRoleDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: AuthContextService }], target: i0.ɵɵFactoryTarget.Directive });
363
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.9", type: HasRoleDirective, isStandalone: true, selector: "[hasRole]", inputs: { hasRole: "hasRole" }, ngImport: i0 });
366
364
  }
367
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: HasRoleDirective, decorators: [{
365
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: HasRoleDirective, decorators: [{
368
366
  type: Directive,
369
367
  args: [{
370
368
  standalone: true,
@@ -1 +1 @@
1
- {"version":3,"file":"verisoft-security-core.mjs","sources":["../../../../../src/libs/security/core/src/lib/models/functions.ts","../../../../../src/libs/security/core/src/lib/state/actions.ts","../../../../../src/libs/security/core/src/lib/state/state.ts","../../../../../src/libs/security/core/src/lib/state/reducers.ts","../../../../../src/libs/security/core/src/lib/state/feature.ts","../../../../../src/libs/security/core/src/lib/state/selectors.ts","../../../../../src/libs/security/core/src/lib/services/auth-context.service.ts","../../../../../src/libs/security/core/src/lib/guards/auth.guard.ts","../../../../../src/libs/security/core/src/lib/provider.ts","../../../../../src/libs/security/core/src/lib/services/local-storage-token-provider.ts","../../../../../src/libs/security/core/src/lib/services/security-initializer.ts","../../../../../src/libs/security/core/src/lib/services/session-token-provider.ts","../../../../../src/libs/security/core/src/lib/services/login.service.ts","../../../../../src/libs/security/core/src/lib/services/logout.service.ts","../../../../../src/libs/security/core/src/lib/directives/has-permission.directive.ts","../../../../../src/libs/security/core/src/lib/directives/has-role.directive.ts","../../../../../src/libs/security/core/src/verisoft-security-core.ts"],"sourcesContent":["import { AuthenticatedUser } from './authenticated-user.model';\r\n\r\nexport function hasRequiredPermission(\r\n user: AuthenticatedUser | undefined,\r\n permission: string | string[]\r\n): boolean {\r\n return hasItems(user?.permissions, permission);\r\n}\r\n\r\nexport function hasRequiredRole(\r\n user: AuthenticatedUser | undefined,\r\n role: string | string[]\r\n): boolean {\r\n return hasItems(user?.roles, role);\r\n}\r\n\r\nfunction hasItems(\r\n userItems: string[] | undefined,\r\n neededItems: string | string[]\r\n): boolean {\r\n if (!neededItems || !neededItems.length) {\r\n return true;\r\n }\r\n\r\n if (!userItems || !userItems.length) {\r\n return false;\r\n }\r\n\r\n const userItemsSet = new Set(userItems);\r\n if (Array.isArray(neededItems)) {\r\n return neededItems.some((item) => hasItems(userItems, item));\r\n }\r\n\r\n if (neededItems.includes(',')) {\r\n const splitItems = neededItems.split(',').map((i) => i.trim());\r\n return splitItems.every((i) => userItemsSet.has(i));\r\n }\r\n\r\n return userItemsSet.has(neededItems);\r\n}\r\n\r\nexport function convertJWTToUser(\r\n base64Token?: string\r\n): AuthenticatedUser | undefined {\r\n if (!base64Token) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n const parts = base64Token.split('.');\r\n if (parts.length < 2) {\r\n return undefined;\r\n }\r\n const payload = decodeJwtPayload(parts[1]);\r\n\r\n const userName = payload['unique_name'] ?? payload['nameid'];\r\n if (!userName) {\r\n return undefined;\r\n }\r\n\r\n const user: AuthenticatedUser = {\r\n userName,\r\n userId: payload['nameid'],\r\n email: payload['email'],\r\n displayName: payload['name'],\r\n roles: convertToArray(payload, 'role'),\r\n permissions: convertToArray(payload, 'permission'),\r\n };\r\n\r\n return user;\r\n } catch (error) {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport function decodeJwtPayload(jwt: string): any {\r\n const base64 = jwt.replace(/-/g, '+').replace(/_/g, '/');\r\n\r\n const jsonPayload = decodeURIComponent(\r\n atob(base64)\r\n .split('')\r\n .map(c => '%' + c.charCodeAt(0).toString(16).padStart(2, '0'))\r\n .join('')\r\n );\r\n\r\n return JSON.parse(jsonPayload);\r\n}\r\n\r\nfunction convertToArray(\r\n item: { [key: string]: string | string[] },\r\n propertyName: string\r\n): string[] | undefined {\r\n const rawValue = item[propertyName];\r\n if (!rawValue) {\r\n return undefined;\r\n }\r\n\r\n if (Array.isArray(rawValue)) {\r\n return rawValue;\r\n }\r\n\r\n return [rawValue];\r\n}\r\n","import { createAction, props } from '@ngrx/store';\r\nimport { AuthenticatedUser } from '../models';\r\n\r\nexport const setUser = createAction(\r\n '[Auth] Set User',\r\n props<{ user: AuthenticatedUser | undefined }>()\r\n);\r\n","import { AuthenticatedUser } from '../models';\r\n\r\nexport interface AuthState {\r\n user: AuthenticatedUser | undefined;\r\n}\r\n\r\nexport const initialState: AuthState = {\r\n user: undefined,\r\n};\r\n","import { createReducer, on } from '@ngrx/store';\r\nimport { setUser } from './actions';\r\nimport { initialState } from './state';\r\n\r\nexport const authReducer = createReducer(\r\n initialState,\r\n on(setUser, (state, action) => ({\r\n ...state,\r\n user: action.user\r\n }))\r\n);","import { createFeature } from \"@ngrx/store\"\r\nimport { authReducer } from \"./reducers\"\r\n\r\nexport const SECURITY_FEATURE_NAME = 'SECURITY';\r\n\r\nexport const SecurityFeature = createFeature({\r\n name: SECURITY_FEATURE_NAME,\r\n reducer: authReducer\r\n});\r\n\r\n","import { createSelector } from '@ngrx/store';\r\nimport { SecurityFeature } from './feature';\r\n\r\nexport const selectIsAuthenticated = createSelector(\r\n SecurityFeature.selectUser,\r\n (user) => !!user\r\n);\r\n\r\nexport const selectUser = SecurityFeature.selectUser;","import { Injectable } from '@angular/core';\r\nimport { Store } from '@ngrx/store';\r\nimport { map, Observable } from 'rxjs';\r\nimport { AuthenticatedUser } from '../models';\r\nimport { hasRequiredPermission, hasRequiredRole } from '../models/functions';\r\nimport { setUser } from '../state/actions';\r\nimport { selectIsAuthenticated, selectUser } from '../state/selectors';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthContextService {\r\n user$: Observable<AuthenticatedUser | undefined>;\r\n isAuthenticated$: Observable<boolean>;\r\n\r\n constructor(private store: Store) {\r\n this.user$ = this.store.select(selectUser);\r\n this.isAuthenticated$ = this.store.select(selectIsAuthenticated);\r\n }\r\n\r\n setUser(user: AuthenticatedUser | undefined): void {\r\n this.store.dispatch(setUser({ user }));\r\n }\r\n\r\n hasRequiredPermission(\r\n requiredPermissions: string | string[]\r\n ): Observable<boolean> {\r\n return this.user$.pipe(\r\n map((user) => hasRequiredPermission(user, requiredPermissions))\r\n );\r\n }\r\n\r\n hasRequiredRole(requiredPermissions: string | string[]): Observable<boolean> {\r\n return this.user$.pipe(\r\n map((user) => hasRequiredRole(user, requiredPermissions))\r\n );\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n CanActivate,\r\n CanActivateChild,\r\n Router,\r\n UrlTree,\r\n} from '@angular/router';\r\nimport { map, Observable, of, switchMap } from 'rxjs';\r\nimport { SecurityConfig } from '../models';\r\nimport { hasRequiredPermission } from '../models/functions';\r\nimport { SECURITY_CONFIG } from '../provider';\r\nimport { AuthContextService } from '../services';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthGuard implements CanActivate, CanActivateChild {\r\n private config = inject<SecurityConfig>(SECURITY_CONFIG);\r\n private router = inject(Router);\r\n private authContext = inject(AuthContextService);\r\n\r\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> {\r\n return this.checkPermissionsAndRolesAndNavigate(route, this.config.notAuthorizedPage);\r\n }\r\n\r\n canActivateChild(\r\n childRoute: ActivatedRouteSnapshot\r\n ): Observable<boolean | UrlTree> {\r\n return this.checkPermissionsAndRolesAndNavigate(childRoute, this.config.notAuthorizedPage);\r\n }\r\n\r\n private checkPermissionsAndRolesAndNavigate(\r\n route: ActivatedRouteSnapshot,\r\n notAuthorizedUrl: string | undefined\r\n ): Observable<boolean | UrlTree> {\r\n const requiredPermissions = route.data['permissions'] as | string | string[] | undefined;\r\n const requiredRoles = route.data['roles'] as string | string[] | undefined;\r\n\r\n return this.authContext.user$.pipe(\r\n map(\r\n (user) => user &&\r\n (!requiredPermissions ||\r\n hasRequiredPermission(user, requiredPermissions)) &&\r\n (!requiredRoles || hasRequiredPermission(user, requiredRoles))\r\n ),\r\n switchMap((hasPermission) => {\r\n if (!hasPermission && notAuthorizedUrl) {\r\n return of(this.router.parseUrl(notAuthorizedUrl));\r\n }\r\n return of(!!hasPermission);\r\n })\r\n );\r\n }\r\n}\r\n","import {\r\n APP_INITIALIZER,\r\n InjectionToken,\r\n ModuleWithProviders,\r\n NgModule,\r\n Provider,\r\n} from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { AuthGuard } from './guards';\r\nimport { SecurityConfig } from './models';\r\nimport {\r\n AuthContextService,\r\n LocalStorageTokenProvider,\r\n securityInitializerFactory,\r\n} from './services';\r\nimport { SecurityFeature } from './state/feature';\r\n\r\nexport function provideSecurity(\r\n config: Partial<SecurityConfig> | undefined = undefined\r\n): Provider[] {\r\n const securityConfig: SecurityConfig = {\r\n tokenStorageKey: 'APP_TOKEN',\r\n notAuthorizedPage: '/not-authorized',\r\n ...(config ?? {}),\r\n };\r\n return [\r\n AuthGuard,\r\n SECURITY_INITIALIZER_PROVIDER,\r\n { provide: SECURITY_CONTEXT_TOKEN_PROVIDER, useClass: LocalStorageTokenProvider },\r\n { provide: SECURITY_CONFIG, useValue: securityConfig },\r\n ];\r\n}\r\n\r\n@NgModule({\r\n imports: [StoreModule.forFeature(SecurityFeature)],\r\n})\r\nexport class SecurityModule {\r\n static forRoot(\r\n config?: Partial<SecurityConfig>\r\n ): ModuleWithProviders<SecurityModule> {\r\n return {\r\n ngModule: SecurityModule,\r\n providers: [...provideSecurity(config)],\r\n };\r\n }\r\n}\r\n\r\nexport const SECURITY_CONTEXT_TOKEN_PROVIDER = new InjectionToken('SECURITY_CONTEXT_TOKEN_PROVIDER');\r\n\r\nexport const SECURITY_CONFIG = new InjectionToken('SECURITY_CONFIG');\r\n\r\nexport const SECURITY_INITIALIZER_PROVIDER: Provider = {\r\n provide: APP_INITIALIZER,\r\n useFactory: securityInitializerFactory,\r\n deps: [SECURITY_CONTEXT_TOKEN_PROVIDER, AuthContextService, SECURITY_CONFIG, Router],\r\n multi: true,\r\n};\r\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { SecurityConfig } from '../models';\nimport { SECURITY_CONFIG } from '../provider';\nimport { TokenProvider } from './token-provider';\n\n@Injectable()\nexport class LocalStorageTokenProvider implements TokenProvider {\n private config = inject<SecurityConfig>(SECURITY_CONFIG);\n\n getToken(): Observable<string | undefined> {\n const token = localStorage.getItem(this.config.tokenStorageKey);\n return of(token ?? undefined);\n }\n\n setToken(token: string): void {\n localStorage.setItem(this.config.tokenStorageKey, token);\n }\n\n removeToken(): void {\n localStorage.clear();\n }\n}\n","import { Router } from '@angular/router';\r\nimport { firstValueFrom, from, of, switchMap } from 'rxjs';\r\nimport { convertJWTToUser, SecurityConfig } from '../models';\r\nimport { AuthContextService } from './auth-context.service';\r\nimport { TokenProvider } from './token-provider';\r\n\r\nexport function securityInitializerFactory(\r\n tokenProvider: TokenProvider,\r\n authService: AuthContextService,\r\n config: SecurityConfig,\r\n router: Router\r\n): () => Promise<unknown> {\r\n const initializationFn = tokenProvider.getToken().pipe(\r\n switchMap((token) => {\r\n const user = convertJWTToUser(token);\r\n if (config.loginPage && !user) {\r\n return from(router.navigate([config.loginPage]));\r\n }\r\n\r\n authService.setUser(user);\r\n return of({});\r\n })\r\n );\r\n\r\n return () => firstValueFrom(initializationFn)\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { SecurityConfig } from '../models';\r\nimport { SECURITY_CONFIG } from '../provider';\r\nimport { TokenProvider } from './token-provider';\r\n\r\n@Injectable()\r\nexport class SessionStorageTokenProvider implements TokenProvider {\r\n private config = inject<SecurityConfig>(SECURITY_CONFIG);\r\n\r\n getToken(): Observable<string | undefined> {\r\n const token = sessionStorage.getItem(this.config.tokenStorageKey);\r\n return of(token ?? undefined);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { convertJWTToUser, SecurityConfig } from '../models';\nimport { SECURITY_CONFIG, SECURITY_CONTEXT_TOKEN_PROVIDER } from '../provider';\nimport { AuthContextService } from './auth-context.service';\nimport { LocalStorageTokenProvider } from './local-storage-token-provider';\n\n@Injectable()\nexport class LoginService {\n private config = inject<SecurityConfig>(SECURITY_CONFIG);\n private tokenProvider = inject<LocalStorageTokenProvider>(SECURITY_CONTEXT_TOKEN_PROVIDER);\n private authService = inject(AuthContextService);\n private router = inject(Router);\n\n login(token?: string): void {\n if (token) {\n this.tokenProvider.setToken(token);\n this.authService.setUser(convertJWTToUser(token));\n } else {\n this.router.navigate([this.config.loginPage]);\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { SECURITY_CONTEXT_TOKEN_PROVIDER } from '../provider';\nimport { AuthContextService } from './auth-context.service';\nimport { LocalStorageTokenProvider } from './local-storage-token-provider';\n\n@Injectable()\nexport class LogoutService {\n private readonly tokenProvider = inject<LocalStorageTokenProvider>(SECURITY_CONTEXT_TOKEN_PROVIDER);\n private readonly authService = inject(AuthContextService);\n\n logout(): void {\n this.tokenProvider.removeToken();\n this.authService.setUser(undefined);\n }\n}\n","import {\r\n Directive,\r\n Input,\r\n TemplateRef,\r\n ViewContainerRef,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { distinctUntilChanged, Subscription } from 'rxjs';\r\nimport { AuthContextService } from '../services';\r\n\r\n@Directive({\r\n standalone: true,\r\n selector: '[hasPermission]',\r\n})\r\nexport class HasPermissionDirective<T> implements OnDestroy {\r\n private requiredPermissions: string | string[] = '';\r\n private sub?: Subscription;\r\n\r\n constructor(\r\n private templateRef: TemplateRef<T>,\r\n private viewContainer: ViewContainerRef,\r\n private authContext: AuthContextService\r\n ) {}\r\n\r\n @Input()\r\n set hasPermission(value: string | string[]) {\r\n this.requiredPermissions = value;\r\n this.updateView();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unregister();\r\n }\r\n\r\n private unregister() {\r\n this.sub?.unsubscribe();\r\n }\r\n\r\n private updateView(): void {\r\n this.unregister();\r\n if (this.requiredPermissions || this.requiredPermissions.length) {\r\n this.sub = this.authContext\r\n .hasRequiredPermission(this.requiredPermissions)\r\n .pipe(distinctUntilChanged())\r\n .subscribe((hasPerm) => {\r\n if (hasPerm) {\r\n this.viewContainer.createEmbeddedView(this.templateRef);\r\n } else {\r\n this.viewContainer.clear();\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import {\r\n Directive,\r\n Input,\r\n TemplateRef,\r\n ViewContainerRef,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { distinctUntilChanged, Subscription } from 'rxjs';\r\nimport { AuthContextService } from '../services';\r\n\r\n@Directive({\r\n standalone: true,\r\n selector: '[hasRole]',\r\n})\r\nexport class HasRoleDirective<T> implements OnDestroy {\r\n private requiredRoles: string | string[] | undefined;\r\n private sub?: Subscription;\r\n\r\n constructor(\r\n private templateRef: TemplateRef<T>,\r\n private viewContainer: ViewContainerRef,\r\n private authContext: AuthContextService\r\n ) {}\r\n\r\n @Input()\r\n set hasRole(value: string | string[]) {\r\n this.requiredRoles = value;\r\n this.updateView();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unregister();\r\n }\r\n\r\n private unregister() {\r\n this.sub?.unsubscribe();\r\n }\r\n\r\n private updateView(): void {\r\n this.unregister();\r\n if (this.requiredRoles || this.requiredRoles?.length) {\r\n this.sub = this.authContext\r\n .hasRequiredRole(this.requiredRoles)\r\n .pipe(distinctUntilChanged())\r\n .subscribe((hasRole) => {\r\n if (hasRole) {\r\n this.viewContainer.createEmbeddedView(this.templateRef);\r\n } else {\r\n this.viewContainer.clear();\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.AuthContextService"],"mappings":"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"}
1
+ {"version":3,"file":"verisoft-security-core.mjs","sources":["../../../../../../src/libs/security/core/src/lib/models/functions.ts","../../../../../../src/libs/security/core/src/lib/state/actions.ts","../../../../../../src/libs/security/core/src/lib/state/state.ts","../../../../../../src/libs/security/core/src/lib/state/reducers.ts","../../../../../../src/libs/security/core/src/lib/state/feature.ts","../../../../../../src/libs/security/core/src/lib/state/selectors.ts","../../../../../../src/libs/security/core/src/lib/services/auth-context.service.ts","../../../../../../src/libs/security/core/src/lib/guards/auth.guard.ts","../../../../../../src/libs/security/core/src/lib/provider.ts","../../../../../../src/libs/security/core/src/lib/services/local-storage-token-provider.ts","../../../../../../src/libs/security/core/src/lib/services/security-initializer.ts","../../../../../../src/libs/security/core/src/lib/services/session-token-provider.ts","../../../../../../src/libs/security/core/src/lib/services/login.service.ts","../../../../../../src/libs/security/core/src/lib/services/logout.service.ts","../../../../../../src/libs/security/core/src/lib/directives/has-permission.directive.ts","../../../../../../src/libs/security/core/src/lib/directives/has-role.directive.ts","../../../../../../src/libs/security/core/src/verisoft-security-core.ts"],"sourcesContent":["import { AuthenticatedUser } from './authenticated-user.model';\r\n\r\nexport function hasRequiredPermission(\r\n user: AuthenticatedUser | undefined,\r\n permission: string | string[]\r\n): boolean {\r\n return hasItems(user?.permissions, permission);\r\n}\r\n\r\nexport function hasRequiredRole(\r\n user: AuthenticatedUser | undefined,\r\n role: string | string[]\r\n): boolean {\r\n return hasItems(user?.roles, role);\r\n}\r\n\r\nfunction hasItems(\r\n userItems: string[] | undefined,\r\n neededItems: string | string[]\r\n): boolean {\r\n if (!neededItems || !neededItems.length) {\r\n return true;\r\n }\r\n\r\n if (!userItems || !userItems.length) {\r\n return false;\r\n }\r\n\r\n const userItemsSet = new Set(userItems);\r\n if (Array.isArray(neededItems)) {\r\n return neededItems.some((item) => hasItems(userItems, item));\r\n }\r\n\r\n if (neededItems.includes(',')) {\r\n const splitItems = neededItems.split(',').map((i) => i.trim());\r\n return splitItems.every((i) => userItemsSet.has(i));\r\n }\r\n\r\n return userItemsSet.has(neededItems);\r\n}\r\n\r\nexport function convertJWTToUser(\r\n base64Token?: string\r\n): AuthenticatedUser | undefined {\r\n if (!base64Token) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n const parts = base64Token.split('.');\r\n if (parts.length < 2) {\r\n return undefined;\r\n }\r\n const payload = decodeJwtPayload(parts[1]);\r\n\r\n const userName = payload['unique_name'] ?? payload['nameid'];\r\n if (!userName) {\r\n return undefined;\r\n }\r\n\r\n const user: AuthenticatedUser = {\r\n userName,\r\n userId: payload['nameid'],\r\n email: payload['email'],\r\n displayName: payload['name'],\r\n roles: convertToArray(payload, 'role'),\r\n permissions: convertToArray(payload, 'permission'),\r\n };\r\n\r\n return user;\r\n } catch (error) {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport function decodeJwtPayload(jwt: string): any {\r\n const base64 = jwt.replace(/-/g, '+').replace(/_/g, '/');\r\n\r\n const jsonPayload = decodeURIComponent(\r\n atob(base64)\r\n .split('')\r\n .map(c => '%' + c.charCodeAt(0).toString(16).padStart(2, '0'))\r\n .join('')\r\n );\r\n\r\n return JSON.parse(jsonPayload);\r\n}\r\n\r\nfunction convertToArray(\r\n item: { [key: string]: string | string[] },\r\n propertyName: string\r\n): string[] | undefined {\r\n const rawValue = item[propertyName];\r\n if (!rawValue) {\r\n return undefined;\r\n }\r\n\r\n if (Array.isArray(rawValue)) {\r\n return rawValue;\r\n }\r\n\r\n return [rawValue];\r\n}\r\n","import { createAction, props } from '@ngrx/store';\r\nimport { AuthenticatedUser } from '../models';\r\n\r\nexport const setUser = createAction(\r\n '[Auth] Set User',\r\n props<{ user: AuthenticatedUser | undefined }>()\r\n);\r\n","import { AuthenticatedUser } from '../models';\r\n\r\nexport interface AuthState {\r\n user: AuthenticatedUser | undefined;\r\n}\r\n\r\nexport const initialState: AuthState = {\r\n user: undefined,\r\n};\r\n","import { createReducer, on } from '@ngrx/store';\r\nimport { setUser } from './actions';\r\nimport { initialState } from './state';\r\n\r\nexport const authReducer = createReducer(\r\n initialState,\r\n on(setUser, (state, action) => ({\r\n ...state,\r\n user: action.user\r\n }))\r\n);","import { createFeature } from \"@ngrx/store\"\r\nimport { authReducer } from \"./reducers\"\r\n\r\nexport const SECURITY_FEATURE_NAME = 'SECURITY';\r\n\r\nexport const SecurityFeature = createFeature({\r\n name: SECURITY_FEATURE_NAME,\r\n reducer: authReducer\r\n});\r\n\r\n","import { createSelector } from '@ngrx/store';\r\nimport { SecurityFeature } from './feature';\r\n\r\nexport const selectIsAuthenticated = createSelector(\r\n SecurityFeature.selectUser,\r\n (user) => !!user\r\n);\r\n\r\nexport const selectUser = SecurityFeature.selectUser;","import { Injectable } from '@angular/core';\r\nimport { Store } from '@ngrx/store';\r\nimport { map, Observable } from 'rxjs';\r\nimport { AuthenticatedUser } from '../models';\r\nimport { hasRequiredPermission, hasRequiredRole } from '../models/functions';\r\nimport { setUser } from '../state/actions';\r\nimport { selectIsAuthenticated, selectUser } from '../state/selectors';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthContextService {\r\n user$: Observable<AuthenticatedUser | undefined>;\r\n isAuthenticated$: Observable<boolean>;\r\n\r\n constructor(private store: Store) {\r\n this.user$ = this.store.select(selectUser);\r\n this.isAuthenticated$ = this.store.select(selectIsAuthenticated);\r\n }\r\n\r\n setUser(user: AuthenticatedUser | undefined): void {\r\n this.store.dispatch(setUser({ user }));\r\n }\r\n\r\n hasRequiredPermission(\r\n requiredPermissions: string | string[]\r\n ): Observable<boolean> {\r\n return this.user$.pipe(\r\n map((user) => hasRequiredPermission(user, requiredPermissions))\r\n );\r\n }\r\n\r\n hasRequiredRole(requiredPermissions: string | string[]): Observable<boolean> {\r\n return this.user$.pipe(\r\n map((user) => hasRequiredRole(user, requiredPermissions))\r\n );\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n CanActivate,\r\n CanActivateChild,\r\n Router,\r\n UrlTree,\r\n} from '@angular/router';\r\nimport { map, Observable, of, switchMap } from 'rxjs';\r\nimport { SecurityConfig } from '../models';\r\nimport { hasRequiredPermission } from '../models/functions';\r\nimport { SECURITY_CONFIG } from '../provider';\r\nimport { AuthContextService } from '../services';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthGuard implements CanActivate, CanActivateChild {\r\n private config = inject<SecurityConfig>(SECURITY_CONFIG);\r\n private router = inject(Router);\r\n private authContext = inject(AuthContextService);\r\n\r\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> {\r\n return this.checkPermissionsAndRolesAndNavigate(route, this.config.notAuthorizedPage);\r\n }\r\n\r\n canActivateChild(\r\n childRoute: ActivatedRouteSnapshot\r\n ): Observable<boolean | UrlTree> {\r\n return this.checkPermissionsAndRolesAndNavigate(childRoute, this.config.notAuthorizedPage);\r\n }\r\n\r\n private checkPermissionsAndRolesAndNavigate(\r\n route: ActivatedRouteSnapshot,\r\n notAuthorizedUrl: string | undefined\r\n ): Observable<boolean | UrlTree> {\r\n const requiredPermissions = route.data['permissions'] as | string | string[] | undefined;\r\n const requiredRoles = route.data['roles'] as string | string[] | undefined;\r\n\r\n return this.authContext.user$.pipe(\r\n map(\r\n (user) => user &&\r\n (!requiredPermissions ||\r\n hasRequiredPermission(user, requiredPermissions)) &&\r\n (!requiredRoles || hasRequiredPermission(user, requiredRoles))\r\n ),\r\n switchMap((hasPermission) => {\r\n if (!hasPermission && notAuthorizedUrl) {\r\n return of(this.router.parseUrl(notAuthorizedUrl));\r\n }\r\n return of(!!hasPermission);\r\n })\r\n );\r\n }\r\n}\r\n","import { EnvironmentProviders, InjectionToken, ModuleWithProviders, NgModule, Provider, inject, provideAppInitializer } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { AuthGuard } from './guards';\r\nimport { SecurityConfig } from './models';\r\nimport {\r\n AuthContextService,\r\n LocalStorageTokenProvider,\r\n securityInitializerFactory,\r\n TokenProvider,\r\n} from './services';\r\nimport { SecurityFeature } from './state/feature';\r\n\r\nexport function provideSecurity(\r\n config: Partial<SecurityConfig> | undefined = undefined\r\n): (Provider | EnvironmentProviders)[] {\r\n const securityConfig: SecurityConfig = {\r\n tokenStorageKey: 'APP_TOKEN',\r\n notAuthorizedPage: '/not-authorized',\r\n ...(config ?? {}),\r\n };\r\n return [\r\n AuthGuard,\r\n SECURITY_INITIALIZER_PROVIDER,\r\n { provide: SECURITY_CONTEXT_TOKEN_PROVIDER, useClass: LocalStorageTokenProvider },\r\n { provide: SECURITY_CONFIG, useValue: securityConfig },\r\n ];\r\n}\r\n\r\n@NgModule({\r\n imports: [StoreModule.forFeature(SecurityFeature)],\r\n})\r\nexport class SecurityModule {\r\n static forRoot(\r\n config?: Partial<SecurityConfig>\r\n ): ModuleWithProviders<SecurityModule> {\r\n return {\r\n ngModule: SecurityModule,\r\n providers: [...provideSecurity(config)],\r\n };\r\n }\r\n}\r\n\r\nexport const SECURITY_CONTEXT_TOKEN_PROVIDER = new InjectionToken('SECURITY_CONTEXT_TOKEN_PROVIDER');\r\n\r\nexport const SECURITY_CONFIG = new InjectionToken('SECURITY_CONFIG');\r\n\r\n\r\nexport const SECURITY_INITIALIZER_PROVIDER: EnvironmentProviders = provideAppInitializer(() => {\r\n const initializerFn = (securityInitializerFactory)(inject<TokenProvider>(SECURITY_CONTEXT_TOKEN_PROVIDER), inject(AuthContextService), inject<SecurityConfig>(SECURITY_CONFIG), inject(Router));\r\n return initializerFn();\r\n});","import { inject, Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { SecurityConfig } from '../models';\nimport { SECURITY_CONFIG } from '../provider';\nimport { TokenProvider } from './token-provider';\n\n@Injectable()\nexport class LocalStorageTokenProvider implements TokenProvider {\n private config = inject<SecurityConfig>(SECURITY_CONFIG);\n\n getToken(): Observable<string | undefined> {\n const token = localStorage.getItem(this.config.tokenStorageKey);\n return of(token ?? undefined);\n }\n\n setToken(token: string): void {\n localStorage.setItem(this.config.tokenStorageKey, token);\n }\n\n removeToken(): void {\n localStorage.clear();\n }\n}\n","import { Router } from '@angular/router';\r\nimport { firstValueFrom, from, of, switchMap } from 'rxjs';\r\nimport { convertJWTToUser, SecurityConfig } from '../models';\r\nimport { AuthContextService } from './auth-context.service';\r\nimport { TokenProvider } from './token-provider';\r\n\r\nexport function securityInitializerFactory(\r\n tokenProvider: TokenProvider,\r\n authService: AuthContextService,\r\n config: SecurityConfig,\r\n router: Router\r\n): () => Promise<unknown> {\r\n const initializationFn = tokenProvider.getToken().pipe(\r\n switchMap((token) => {\r\n const user = convertJWTToUser(token);\r\n if (config.loginPage && !user) {\r\n return from(router.navigate([config.loginPage]));\r\n }\r\n\r\n authService.setUser(user);\r\n return of({});\r\n })\r\n );\r\n\r\n return () => firstValueFrom(initializationFn)\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { SecurityConfig } from '../models';\r\nimport { SECURITY_CONFIG } from '../provider';\r\nimport { TokenProvider } from './token-provider';\r\n\r\n@Injectable()\r\nexport class SessionStorageTokenProvider implements TokenProvider {\r\n private config = inject<SecurityConfig>(SECURITY_CONFIG);\r\n\r\n getToken(): Observable<string | undefined> {\r\n const token = sessionStorage.getItem(this.config.tokenStorageKey);\r\n return of(token ?? undefined);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { convertJWTToUser, SecurityConfig } from '../models';\nimport { SECURITY_CONFIG, SECURITY_CONTEXT_TOKEN_PROVIDER } from '../provider';\nimport { AuthContextService } from './auth-context.service';\nimport { LocalStorageTokenProvider } from './local-storage-token-provider';\n\n@Injectable()\nexport class LoginService {\n private config = inject<SecurityConfig>(SECURITY_CONFIG);\n private tokenProvider = inject<LocalStorageTokenProvider>(SECURITY_CONTEXT_TOKEN_PROVIDER);\n private authService = inject(AuthContextService);\n private router = inject(Router);\n\n login(token?: string): void {\n if (token) {\n this.tokenProvider.setToken(token);\n this.authService.setUser(convertJWTToUser(token));\n } else {\n this.router.navigate([this.config.loginPage]);\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { SECURITY_CONTEXT_TOKEN_PROVIDER } from '../provider';\nimport { AuthContextService } from './auth-context.service';\nimport { LocalStorageTokenProvider } from './local-storage-token-provider';\n\n@Injectable()\nexport class LogoutService {\n private readonly tokenProvider = inject<LocalStorageTokenProvider>(SECURITY_CONTEXT_TOKEN_PROVIDER);\n private readonly authService = inject(AuthContextService);\n\n logout(): void {\n this.tokenProvider.removeToken();\n this.authService.setUser(undefined);\n }\n}\n","import {\r\n Directive,\r\n Input,\r\n TemplateRef,\r\n ViewContainerRef,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { distinctUntilChanged, Subscription } from 'rxjs';\r\nimport { AuthContextService } from '../services';\r\n\r\n@Directive({\r\n standalone: true,\r\n selector: '[hasPermission]',\r\n})\r\nexport class HasPermissionDirective<T> implements OnDestroy {\r\n private requiredPermissions: string | string[] = '';\r\n private sub?: Subscription;\r\n\r\n constructor(\r\n private templateRef: TemplateRef<T>,\r\n private viewContainer: ViewContainerRef,\r\n private authContext: AuthContextService\r\n ) {}\r\n\r\n @Input()\r\n set hasPermission(value: string | string[]) {\r\n this.requiredPermissions = value;\r\n this.updateView();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unregister();\r\n }\r\n\r\n private unregister() {\r\n this.sub?.unsubscribe();\r\n }\r\n\r\n private updateView(): void {\r\n this.unregister();\r\n if (this.requiredPermissions || this.requiredPermissions.length) {\r\n this.sub = this.authContext\r\n .hasRequiredPermission(this.requiredPermissions)\r\n .pipe(distinctUntilChanged())\r\n .subscribe((hasPerm) => {\r\n if (hasPerm) {\r\n this.viewContainer.createEmbeddedView(this.templateRef);\r\n } else {\r\n this.viewContainer.clear();\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import {\r\n Directive,\r\n Input,\r\n TemplateRef,\r\n ViewContainerRef,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { distinctUntilChanged, Subscription } from 'rxjs';\r\nimport { AuthContextService } from '../services';\r\n\r\n@Directive({\r\n standalone: true,\r\n selector: '[hasRole]',\r\n})\r\nexport class HasRoleDirective<T> implements OnDestroy {\r\n private requiredRoles: string | string[] | undefined;\r\n private sub?: Subscription;\r\n\r\n constructor(\r\n private templateRef: TemplateRef<T>,\r\n private viewContainer: ViewContainerRef,\r\n private authContext: AuthContextService\r\n ) {}\r\n\r\n @Input()\r\n set hasRole(value: string | string[]) {\r\n this.requiredRoles = value;\r\n this.updateView();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unregister();\r\n }\r\n\r\n private unregister() {\r\n this.sub?.unsubscribe();\r\n }\r\n\r\n private updateView(): void {\r\n this.unregister();\r\n if (this.requiredRoles || this.requiredRoles?.length) {\r\n this.sub = this.authContext\r\n .hasRequiredRole(this.requiredRoles)\r\n .pipe(distinctUntilChanged())\r\n .subscribe((hasRole) => {\r\n if (hasRole) {\r\n this.viewContainer.createEmbeddedView(this.templateRef);\r\n } else {\r\n this.viewContainer.clear();\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.AuthContextService"],"mappings":"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"}
package/lib/provider.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { InjectionToken, ModuleWithProviders, Provider } from '@angular/core';
1
+ import { EnvironmentProviders, InjectionToken, ModuleWithProviders, Provider } from '@angular/core';
2
2
  import { SecurityConfig } from './models';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@ngrx/store";
5
- export declare function provideSecurity(config?: Partial<SecurityConfig> | undefined): Provider[];
5
+ export declare function provideSecurity(config?: Partial<SecurityConfig> | undefined): (Provider | EnvironmentProviders)[];
6
6
  export declare class SecurityModule {
7
7
  static forRoot(config?: Partial<SecurityConfig>): ModuleWithProviders<SecurityModule>;
8
8
  static ɵfac: i0.ɵɵFactoryDeclaration<SecurityModule, never>;
@@ -11,4 +11,4 @@ export declare class SecurityModule {
11
11
  }
12
12
  export declare const SECURITY_CONTEXT_TOKEN_PROVIDER: InjectionToken<unknown>;
13
13
  export declare const SECURITY_CONFIG: InjectionToken<unknown>;
14
- export declare const SECURITY_INITIALIZER_PROVIDER: Provider;
14
+ export declare const SECURITY_INITIALIZER_PROVIDER: EnvironmentProviders;
package/package.json CHANGED
@@ -1,13 +1,16 @@
1
1
  {
2
2
  "name": "@verisoft/security-core",
3
- "version": "18.8.0",
3
+ "version": "19.0.0-rc001",
4
4
  "peerDependencies": {
5
- "@angular/core": "^18.2.0",
6
- "rxjs": "~7.8.0",
7
- "@angular/router": "18.2.8",
8
- "@ngrx/store": "18.0.2"
5
+ "@angular/core": "19.2.9",
6
+ "@angular/router": "19.2.9",
7
+ "@ngrx/store": "19.2.1",
8
+ "rxjs": "~7.8.0"
9
9
  },
10
10
  "sideEffects": false,
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
11
14
  "module": "fesm2022/verisoft-security-core.mjs",
12
15
  "typings": "index.d.ts",
13
16
  "exports": {
@@ -16,8 +19,6 @@
16
19
  },
17
20
  ".": {
18
21
  "types": "./index.d.ts",
19
- "esm2022": "./esm2022/verisoft-security-core.mjs",
20
- "esm": "./esm2022/verisoft-security-core.mjs",
21
22
  "default": "./fesm2022/verisoft-security-core.mjs"
22
23
  }
23
24
  },
package/esm2022/index.mjs DELETED
@@ -1,2 +0,0 @@
1
- export * from './lib';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zZWN1cml0eS9jb3JlL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliJzsiXX0=
@@ -1,55 +0,0 @@
1
- import { Directive, Input, TemplateRef, ViewContainerRef, } from '@angular/core';
2
- import { distinctUntilChanged } from 'rxjs';
3
- import { AuthContextService } from '../services';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "../services";
6
- export class HasPermissionDirective {
7
- templateRef;
8
- viewContainer;
9
- authContext;
10
- requiredPermissions = '';
11
- sub;
12
- constructor(templateRef, viewContainer, authContext) {
13
- this.templateRef = templateRef;
14
- this.viewContainer = viewContainer;
15
- this.authContext = authContext;
16
- }
17
- set hasPermission(value) {
18
- this.requiredPermissions = value;
19
- this.updateView();
20
- }
21
- ngOnDestroy() {
22
- this.unregister();
23
- }
24
- unregister() {
25
- this.sub?.unsubscribe();
26
- }
27
- updateView() {
28
- this.unregister();
29
- if (this.requiredPermissions || this.requiredPermissions.length) {
30
- this.sub = this.authContext
31
- .hasRequiredPermission(this.requiredPermissions)
32
- .pipe(distinctUntilChanged())
33
- .subscribe((hasPerm) => {
34
- if (hasPerm) {
35
- this.viewContainer.createEmbeddedView(this.templateRef);
36
- }
37
- else {
38
- this.viewContainer.clear();
39
- }
40
- });
41
- }
42
- }
43
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: HasPermissionDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.AuthContextService }], target: i0.ɵɵFactoryTarget.Directive });
44
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.8", type: HasPermissionDirective, isStandalone: true, selector: "[hasPermission]", inputs: { hasPermission: "hasPermission" }, ngImport: i0 });
45
- }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: HasPermissionDirective, decorators: [{
47
- type: Directive,
48
- args: [{
49
- standalone: true,
50
- selector: '[hasPermission]',
51
- }]
52
- }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.AuthContextService }], propDecorators: { hasPermission: [{
53
- type: Input
54
- }] } });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLXBlcm1pc3Npb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYnMvc2VjdXJpdHkvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvaGFzLXBlcm1pc3Npb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsR0FFakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7OztBQU1qRCxNQUFNLE9BQU8sc0JBQXNCO0lBS3ZCO0lBQ0E7SUFDQTtJQU5GLG1CQUFtQixHQUFzQixFQUFFLENBQUM7SUFDNUMsR0FBRyxDQUFnQjtJQUUzQixZQUNVLFdBQTJCLEVBQzNCLGFBQStCLEVBQy9CLFdBQStCO1FBRi9CLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO0lBQ3RDLENBQUM7SUFFSixJQUNJLGFBQWEsQ0FBQyxLQUF3QjtRQUN4QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxVQUFVO1FBQ2hCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVztpQkFDeEIscUJBQXFCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO2lCQUMvQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztpQkFDNUIsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzFELENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQzt1R0F0Q1Usc0JBQXNCOzJGQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxpQkFBaUI7aUJBQzVCO2dKQVlLLGFBQWE7c0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIERpcmVjdGl2ZSxcclxuICBJbnB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG4gIE9uRGVzdHJveSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBdXRoQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHNlbGVjdG9yOiAnW2hhc1Blcm1pc3Npb25dJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhhc1Blcm1pc3Npb25EaXJlY3RpdmU8VD4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgcmVxdWlyZWRQZXJtaXNzaW9uczogc3RyaW5nIHwgc3RyaW5nW10gPSAnJztcclxuICBwcml2YXRlIHN1Yj86IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxUPixcclxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgYXV0aENvbnRleHQ6IEF1dGhDb250ZXh0U2VydmljZVxyXG4gICkge31cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaGFzUGVybWlzc2lvbih2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcclxuICAgIHRoaXMucmVxdWlyZWRQZXJtaXNzaW9ucyA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5yZWdpc3RlcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1bnJlZ2lzdGVyKCkge1xyXG4gICAgdGhpcy5zdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVZpZXcoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVucmVnaXN0ZXIoKTtcclxuICAgIGlmICh0aGlzLnJlcXVpcmVkUGVybWlzc2lvbnMgfHwgdGhpcy5yZXF1aXJlZFBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnN1YiA9IHRoaXMuYXV0aENvbnRleHRcclxuICAgICAgICAuaGFzUmVxdWlyZWRQZXJtaXNzaW9uKHRoaXMucmVxdWlyZWRQZXJtaXNzaW9ucylcclxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGhhc1Blcm0pID0+IHtcclxuICAgICAgICAgIGlmIChoYXNQZXJtKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -1,55 +0,0 @@
1
- import { Directive, Input, TemplateRef, ViewContainerRef, } from '@angular/core';
2
- import { distinctUntilChanged } from 'rxjs';
3
- import { AuthContextService } from '../services';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "../services";
6
- export class HasRoleDirective {
7
- templateRef;
8
- viewContainer;
9
- authContext;
10
- requiredRoles;
11
- sub;
12
- constructor(templateRef, viewContainer, authContext) {
13
- this.templateRef = templateRef;
14
- this.viewContainer = viewContainer;
15
- this.authContext = authContext;
16
- }
17
- set hasRole(value) {
18
- this.requiredRoles = value;
19
- this.updateView();
20
- }
21
- ngOnDestroy() {
22
- this.unregister();
23
- }
24
- unregister() {
25
- this.sub?.unsubscribe();
26
- }
27
- updateView() {
28
- this.unregister();
29
- if (this.requiredRoles || this.requiredRoles?.length) {
30
- this.sub = this.authContext
31
- .hasRequiredRole(this.requiredRoles)
32
- .pipe(distinctUntilChanged())
33
- .subscribe((hasRole) => {
34
- if (hasRole) {
35
- this.viewContainer.createEmbeddedView(this.templateRef);
36
- }
37
- else {
38
- this.viewContainer.clear();
39
- }
40
- });
41
- }
42
- }
43
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: HasRoleDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.AuthContextService }], target: i0.ɵɵFactoryTarget.Directive });
44
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.8", type: HasRoleDirective, isStandalone: true, selector: "[hasRole]", inputs: { hasRole: "hasRole" }, ngImport: i0 });
45
- }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: HasRoleDirective, decorators: [{
47
- type: Directive,
48
- args: [{
49
- standalone: true,
50
- selector: '[hasRole]',
51
- }]
52
- }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.AuthContextService }], propDecorators: { hasRole: [{
53
- type: Input
54
- }] } });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLXJvbGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYnMvc2VjdXJpdHkvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvaGFzLXJvbGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsR0FFakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7OztBQU1qRCxNQUFNLE9BQU8sZ0JBQWdCO0lBS2pCO0lBQ0E7SUFDQTtJQU5GLGFBQWEsQ0FBZ0M7SUFDN0MsR0FBRyxDQUFnQjtJQUUzQixZQUNVLFdBQTJCLEVBQzNCLGFBQStCLEVBQy9CLFdBQStCO1FBRi9CLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO0lBQ3RDLENBQUM7SUFFSixJQUNJLE9BQU8sQ0FBQyxLQUF3QjtRQUNsQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVztpQkFDeEIsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7aUJBQ25DLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2lCQUM1QixTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDckIsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzdCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDO3VHQXRDVSxnQkFBZ0I7MkZBQWhCLGdCQUFnQjs7MkZBQWhCLGdCQUFnQjtrQkFKNUIsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLFdBQVc7aUJBQ3RCO2dKQVlLLE9BQU87c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgRGlyZWN0aXZlLFxyXG4gIElucHV0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgT25EZXN0cm95LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEF1dGhDb250ZXh0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgc2VsZWN0b3I6ICdbaGFzUm9sZV0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSGFzUm9sZURpcmVjdGl2ZTxUPiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZXF1aXJlZFJvbGVzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIHN1Yj86IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxUPixcclxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgYXV0aENvbnRleHQ6IEF1dGhDb250ZXh0U2VydmljZVxyXG4gICkge31cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaGFzUm9sZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcclxuICAgIHRoaXMucmVxdWlyZWRSb2xlcyA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5yZWdpc3RlcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1bnJlZ2lzdGVyKCkge1xyXG4gICAgdGhpcy5zdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVZpZXcoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVucmVnaXN0ZXIoKTtcclxuICAgIGlmICh0aGlzLnJlcXVpcmVkUm9sZXMgfHwgdGhpcy5yZXF1aXJlZFJvbGVzPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zdWIgPSB0aGlzLmF1dGhDb250ZXh0XHJcbiAgICAgICAgLmhhc1JlcXVpcmVkUm9sZSh0aGlzLnJlcXVpcmVkUm9sZXMpXHJcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChoYXNSb2xlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaGFzUm9sZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,3 +0,0 @@
1
- export * from './has-permission.directive';
2
- export * from './has-role.directive';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zZWN1cml0eS9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2hhcy1wZXJtaXNzaW9uLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vaGFzLXJvbGUuZGlyZWN0aXZlJztcclxuIl19
@@ -1,40 +0,0 @@
1
- import { inject, Injectable } from '@angular/core';
2
- import { Router, } from '@angular/router';
3
- import { map, of, switchMap } from 'rxjs';
4
- import { hasRequiredPermission } from '../models/functions';
5
- import { SECURITY_CONFIG } from '../provider';
6
- import { AuthContextService } from '../services';
7
- import * as i0 from "@angular/core";
8
- export class AuthGuard {
9
- config = inject(SECURITY_CONFIG);
10
- router = inject(Router);
11
- authContext = inject(AuthContextService);
12
- canActivate(route) {
13
- return this.checkPermissionsAndRolesAndNavigate(route, this.config.notAuthorizedPage);
14
- }
15
- canActivateChild(childRoute) {
16
- return this.checkPermissionsAndRolesAndNavigate(childRoute, this.config.notAuthorizedPage);
17
- }
18
- checkPermissionsAndRolesAndNavigate(route, notAuthorizedUrl) {
19
- const requiredPermissions = route.data['permissions'];
20
- const requiredRoles = route.data['roles'];
21
- return this.authContext.user$.pipe(map((user) => user &&
22
- (!requiredPermissions ||
23
- hasRequiredPermission(user, requiredPermissions)) &&
24
- (!requiredRoles || hasRequiredPermission(user, requiredRoles))), switchMap((hasPermission) => {
25
- if (!hasPermission && notAuthorizedUrl) {
26
- return of(this.router.parseUrl(notAuthorizedUrl));
27
- }
28
- return of(!!hasPermission);
29
- }));
30
- }
31
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AuthGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
32
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AuthGuard, providedIn: 'root' });
33
- }
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AuthGuard, decorators: [{
35
- type: Injectable,
36
- args: [{
37
- providedIn: 'root',
38
- }]
39
- }] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWJzL3NlY3VyaXR5L2NvcmUvc3JjL2xpYi9ndWFyZHMvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBSUwsTUFBTSxHQUVQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUtqRCxNQUFNLE9BQU8sU0FBUztJQUNaLE1BQU0sR0FBRyxNQUFNLENBQWlCLGVBQWUsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsV0FBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRWpELFdBQVcsQ0FBQyxLQUE2QjtRQUN2QyxPQUFPLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRCxnQkFBZ0IsQ0FDZCxVQUFrQztRQUVsQyxPQUFPLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFTyxtQ0FBbUMsQ0FDekMsS0FBNkIsRUFDN0IsZ0JBQW9DO1FBRXBDLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQW9DLENBQUM7UUFDekYsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQWtDLENBQUM7UUFFM0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ2hDLEdBQUcsQ0FDRCxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSTtZQUNaLENBQUMsQ0FBQyxtQkFBbUI7Z0JBQ25CLHFCQUFxQixDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxhQUFhLElBQUkscUJBQXFCLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQ2pFLEVBQ0QsU0FBUyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGFBQWEsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN2QyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzt1R0FwQ1UsU0FBUzsyR0FBVCxTQUFTLGNBRlIsTUFBTTs7MkZBRVAsU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxyXG4gIENhbkFjdGl2YXRlLFxyXG4gIENhbkFjdGl2YXRlQ2hpbGQsXHJcbiAgUm91dGVyLFxyXG4gIFVybFRyZWUsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNlY3VyaXR5Q29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgaGFzUmVxdWlyZWRQZXJtaXNzaW9uIH0gZnJvbSAnLi4vbW9kZWxzL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFNFQ1VSSVRZX0NPTkZJRyB9IGZyb20gJy4uL3Byb3ZpZGVyJztcclxuaW1wb3J0IHsgQXV0aENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlLCBDYW5BY3RpdmF0ZUNoaWxkIHtcclxuICBwcml2YXRlIGNvbmZpZyA9IGluamVjdDxTZWN1cml0eUNvbmZpZz4oU0VDVVJJVFlfQ09ORklHKTtcclxuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgYXV0aENvbnRleHQgPSBpbmplY3QoQXV0aENvbnRleHRTZXJ2aWNlKTtcclxuXHJcbiAgY2FuQWN0aXZhdGUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja1Blcm1pc3Npb25zQW5kUm9sZXNBbmROYXZpZ2F0ZShyb3V0ZSwgdGhpcy5jb25maWcubm90QXV0aG9yaXplZFBhZ2UpO1xyXG4gIH1cclxuXHJcbiAgY2FuQWN0aXZhdGVDaGlsZChcclxuICAgIGNoaWxkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3RcclxuICApOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja1Blcm1pc3Npb25zQW5kUm9sZXNBbmROYXZpZ2F0ZShjaGlsZFJvdXRlLCB0aGlzLmNvbmZpZy5ub3RBdXRob3JpemVkUGFnZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrUGVybWlzc2lvbnNBbmRSb2xlc0FuZE5hdmlnYXRlKFxyXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgICBub3RBdXRob3JpemVkVXJsOiBzdHJpbmcgfCB1bmRlZmluZWRcclxuICApOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiB7XHJcbiAgICBjb25zdCByZXF1aXJlZFBlcm1pc3Npb25zID0gcm91dGUuZGF0YVsncGVybWlzc2lvbnMnXSBhcyB8IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgcmVxdWlyZWRSb2xlcyA9IHJvdXRlLmRhdGFbJ3JvbGVzJ10gYXMgc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuYXV0aENvbnRleHQudXNlciQucGlwZShcclxuICAgICAgbWFwKFxyXG4gICAgICAgICh1c2VyKSA9PiB1c2VyICYmXHJcbiAgICAgICAgICAoIXJlcXVpcmVkUGVybWlzc2lvbnMgfHxcclxuICAgICAgICAgICAgaGFzUmVxdWlyZWRQZXJtaXNzaW9uKHVzZXIsIHJlcXVpcmVkUGVybWlzc2lvbnMpKSAmJlxyXG4gICAgICAgICAgKCFyZXF1aXJlZFJvbGVzIHx8IGhhc1JlcXVpcmVkUGVybWlzc2lvbih1c2VyLCByZXF1aXJlZFJvbGVzKSlcclxuICAgICAgKSxcclxuICAgICAgc3dpdGNoTWFwKChoYXNQZXJtaXNzaW9uKSA9PiB7XHJcbiAgICAgICAgaWYgKCFoYXNQZXJtaXNzaW9uICYmIG5vdEF1dGhvcml6ZWRVcmwpIHtcclxuICAgICAgICAgIHJldHVybiBvZih0aGlzLnJvdXRlci5wYXJzZVVybChub3RBdXRob3JpemVkVXJsKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZighIWhhc1Blcm1pc3Npb24pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,2 +0,0 @@
1
- export * from './auth.guard';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zZWN1cml0eS9jb3JlL3NyYy9saWIvZ3VhcmRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hdXRoLmd1YXJkJztcclxuIl19
@@ -1,7 +0,0 @@
1
- export * from './directives';
2
- export * from './guards';
3
- export * from './models';
4
- export * from './services';
5
- export * from './state';
6
- export * from './provider';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zZWN1cml0eS9jb3JlL3NyYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2d1YXJkcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcclxuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3RhdGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVyJztcclxuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRlZC11c2VyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYnMvc2VjdXJpdHkvY29yZS9zcmMvbGliL21vZGVscy9hdXRoZW50aWNhdGVkLXVzZXIubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQXV0aGVudGljYXRlZFVzZXIge1xyXG4gICAgdXNlcklkPzogc3RyaW5nO1xyXG4gICAgdXNlck5hbWU6IHN0cmluZztcclxuICAgIGVtYWlsOiBzdHJpbmc7XHJcbiAgICBkaXNwbGF5TmFtZT86IHN0cmluZztcclxuICAgIHJvbGVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcclxuICAgIHBlcm1pc3Npb25zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcclxufVxyXG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYnMvc2VjdXJpdHkvY29yZS9zcmMvbGliL21vZGVscy9jb25maWcubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5Q29uZmlnIHtcclxuICAgIHRva2VuU3RvcmFnZUtleTogc3RyaW5nO1xyXG4gICAgY29udGV4dFRva2VuU3RvcmFnZUtleT86IHN0cmluZztcclxuICAgIGxvZ2luUGFnZT86IHN0cmluZztcclxuICAgIGxvZ291dFBhZ2U/OiBzdHJpbmc7XHJcbiAgICBub3RBdXRob3JpemVkUGFnZT86IHN0cmluZztcclxuICAgIHNlbmRUb2tlbkhlYWRlcj86IGJvb2xlYW47XHJcbn1cclxuIl19
@@ -1,70 +0,0 @@
1
- export function hasRequiredPermission(user, permission) {
2
- return hasItems(user?.permissions, permission);
3
- }
4
- export function hasRequiredRole(user, role) {
5
- return hasItems(user?.roles, role);
6
- }
7
- function hasItems(userItems, neededItems) {
8
- if (!neededItems || !neededItems.length) {
9
- return true;
10
- }
11
- if (!userItems || !userItems.length) {
12
- return false;
13
- }
14
- const userItemsSet = new Set(userItems);
15
- if (Array.isArray(neededItems)) {
16
- return neededItems.some((item) => hasItems(userItems, item));
17
- }
18
- if (neededItems.includes(',')) {
19
- const splitItems = neededItems.split(',').map((i) => i.trim());
20
- return splitItems.every((i) => userItemsSet.has(i));
21
- }
22
- return userItemsSet.has(neededItems);
23
- }
24
- export function convertJWTToUser(base64Token) {
25
- if (!base64Token) {
26
- return undefined;
27
- }
28
- try {
29
- const parts = base64Token.split('.');
30
- if (parts.length < 2) {
31
- return undefined;
32
- }
33
- const payload = decodeJwtPayload(parts[1]);
34
- const userName = payload['unique_name'] ?? payload['nameid'];
35
- if (!userName) {
36
- return undefined;
37
- }
38
- const user = {
39
- userName,
40
- userId: payload['nameid'],
41
- email: payload['email'],
42
- displayName: payload['name'],
43
- roles: convertToArray(payload, 'role'),
44
- permissions: convertToArray(payload, 'permission'),
45
- };
46
- return user;
47
- }
48
- catch (error) {
49
- return undefined;
50
- }
51
- }
52
- export function decodeJwtPayload(jwt) {
53
- const base64 = jwt.replace(/-/g, '+').replace(/_/g, '/');
54
- const jsonPayload = decodeURIComponent(atob(base64)
55
- .split('')
56
- .map(c => '%' + c.charCodeAt(0).toString(16).padStart(2, '0'))
57
- .join(''));
58
- return JSON.parse(jsonPayload);
59
- }
60
- function convertToArray(item, propertyName) {
61
- const rawValue = item[propertyName];
62
- if (!rawValue) {
63
- return undefined;
64
- }
65
- if (Array.isArray(rawValue)) {
66
- return rawValue;
67
- }
68
- return [rawValue];
69
- }
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYnMvc2VjdXJpdHkvY29yZS9zcmMvbGliL21vZGVscy9mdW5jdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxJQUFtQyxFQUNuQyxVQUE2QjtJQUU3QixPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUM3QixJQUFtQyxFQUNuQyxJQUF1QjtJQUV2QixPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FDZixTQUErQixFQUMvQixXQUE4QjtJQUU5QixJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDL0IsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFdBQW9CO0lBRXBCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFzQjtZQUM5QixRQUFRO1lBQ1IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDekIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDdkIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDNUIsS0FBSyxFQUFFLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO1lBQ3RDLFdBQVcsRUFBRSxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztTQUNuRCxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEdBQVc7SUFDMUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUV6RCxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNULEtBQUssQ0FBQyxFQUFFLENBQUM7U0FDVCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUM3RCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQ1osQ0FBQztJQUVGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQ3JCLElBQTBDLEVBQzFDLFlBQW9CO0lBRXBCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aGVudGljYXRlZFVzZXIgfSBmcm9tICcuL2F1dGhlbnRpY2F0ZWQtdXNlci5tb2RlbCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVxdWlyZWRQZXJtaXNzaW9uKFxyXG4gIHVzZXI6IEF1dGhlbnRpY2F0ZWRVc2VyIHwgdW5kZWZpbmVkLFxyXG4gIHBlcm1pc3Npb246IHN0cmluZyB8IHN0cmluZ1tdXHJcbik6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBoYXNJdGVtcyh1c2VyPy5wZXJtaXNzaW9ucywgcGVybWlzc2lvbik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXF1aXJlZFJvbGUoXHJcbiAgdXNlcjogQXV0aGVudGljYXRlZFVzZXIgfCB1bmRlZmluZWQsXHJcbiAgcm9sZTogc3RyaW5nIHwgc3RyaW5nW11cclxuKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIGhhc0l0ZW1zKHVzZXI/LnJvbGVzLCByb2xlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFzSXRlbXMoXHJcbiAgdXNlckl0ZW1zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcclxuICBuZWVkZWRJdGVtczogc3RyaW5nIHwgc3RyaW5nW11cclxuKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFuZWVkZWRJdGVtcyB8fCAhbmVlZGVkSXRlbXMubGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGlmICghdXNlckl0ZW1zIHx8ICF1c2VySXRlbXMubGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjb25zdCB1c2VySXRlbXNTZXQgPSBuZXcgU2V0KHVzZXJJdGVtcyk7XHJcbiAgaWYgKEFycmF5LmlzQXJyYXkobmVlZGVkSXRlbXMpKSB7XHJcbiAgICByZXR1cm4gbmVlZGVkSXRlbXMuc29tZSgoaXRlbSkgPT4gaGFzSXRlbXModXNlckl0ZW1zLCBpdGVtKSk7XHJcbiAgfVxyXG5cclxuICBpZiAobmVlZGVkSXRlbXMuaW5jbHVkZXMoJywnKSkge1xyXG4gICAgY29uc3Qgc3BsaXRJdGVtcyA9IG5lZWRlZEl0ZW1zLnNwbGl0KCcsJykubWFwKChpKSA9PiBpLnRyaW0oKSk7XHJcbiAgICByZXR1cm4gc3BsaXRJdGVtcy5ldmVyeSgoaSkgPT4gdXNlckl0ZW1zU2V0LmhhcyhpKSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdXNlckl0ZW1zU2V0LmhhcyhuZWVkZWRJdGVtcyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0SldUVG9Vc2VyKFxyXG4gIGJhc2U2NFRva2VuPzogc3RyaW5nXHJcbik6IEF1dGhlbnRpY2F0ZWRVc2VyIHwgdW5kZWZpbmVkIHtcclxuICBpZiAoIWJhc2U2NFRva2VuKSB7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHBhcnRzID0gYmFzZTY0VG9rZW4uc3BsaXQoJy4nKTtcclxuICAgIGlmIChwYXJ0cy5sZW5ndGggPCAyKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXlsb2FkID0gZGVjb2RlSnd0UGF5bG9hZChwYXJ0c1sxXSk7XHJcblxyXG4gICAgY29uc3QgdXNlck5hbWUgPSBwYXlsb2FkWyd1bmlxdWVfbmFtZSddID8/IHBheWxvYWRbJ25hbWVpZCddO1xyXG4gICAgaWYgKCF1c2VyTmFtZSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVzZXI6IEF1dGhlbnRpY2F0ZWRVc2VyID0ge1xyXG4gICAgICB1c2VyTmFtZSxcclxuICAgICAgdXNlcklkOiBwYXlsb2FkWyduYW1laWQnXSxcclxuICAgICAgZW1haWw6IHBheWxvYWRbJ2VtYWlsJ10sXHJcbiAgICAgIGRpc3BsYXlOYW1lOiBwYXlsb2FkWyduYW1lJ10sXHJcbiAgICAgIHJvbGVzOiBjb252ZXJ0VG9BcnJheShwYXlsb2FkLCAncm9sZScpLFxyXG4gICAgICBwZXJtaXNzaW9uczogY29udmVydFRvQXJyYXkocGF5bG9hZCwgJ3Blcm1pc3Npb24nKSxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHVzZXI7XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlSnd0UGF5bG9hZChqd3Q6IHN0cmluZyk6IGFueSB7XHJcbiAgY29uc3QgYmFzZTY0ID0gand0LnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJyk7XHJcblxyXG4gIGNvbnN0IGpzb25QYXlsb2FkID0gZGVjb2RlVVJJQ29tcG9uZW50KFxyXG4gICAgYXRvYihiYXNlNjQpXHJcbiAgICAgIC5zcGxpdCgnJylcclxuICAgICAgLm1hcChjID0+ICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSlcclxuICAgICAgLmpvaW4oJycpXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIEpTT04ucGFyc2UoanNvblBheWxvYWQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb252ZXJ0VG9BcnJheShcclxuICBpdGVtOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0sXHJcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmdcclxuKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IHJhd1ZhbHVlID0gaXRlbVtwcm9wZXJ0eU5hbWVdO1xyXG4gIGlmICghcmF3VmFsdWUpIHtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBpZiAoQXJyYXkuaXNBcnJheShyYXdWYWx1ZSkpIHtcclxuICAgIHJldHVybiByYXdWYWx1ZTtcclxuICB9XHJcblxyXG4gIHJldHVybiBbcmF3VmFsdWVdO1xyXG59XHJcbiJdfQ==
@@ -1,4 +0,0 @@
1
- export * from './authenticated-user.model';
2
- export * from './functions';
3
- export * from './config.model';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zZWN1cml0eS9jb3JlL3NyYy9saWIvbW9kZWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXV0aGVudGljYXRlZC11c2VyLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZy5tb2RlbCc7XHJcbiJdfQ==
@@ -1,47 +0,0 @@
1
- import { APP_INITIALIZER, InjectionToken, NgModule, } from '@angular/core';
2
- import { Router } from '@angular/router';
3
- import { StoreModule } from '@ngrx/store';
4
- import { AuthGuard } from './guards';
5
- import { AuthContextService, LocalStorageTokenProvider, securityInitializerFactory, } from './services';
6
- import { SecurityFeature } from './state/feature';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@ngrx/store";
9
- export function provideSecurity(config = undefined) {
10
- const securityConfig = {
11
- tokenStorageKey: 'APP_TOKEN',
12
- notAuthorizedPage: '/not-authorized',
13
- ...(config ?? {}),
14
- };
15
- return [
16
- AuthGuard,
17
- SECURITY_INITIALIZER_PROVIDER,
18
- { provide: SECURITY_CONTEXT_TOKEN_PROVIDER, useClass: LocalStorageTokenProvider },
19
- { provide: SECURITY_CONFIG, useValue: securityConfig },
20
- ];
21
- }
22
- export class SecurityModule {
23
- static forRoot(config) {
24
- return {
25
- ngModule: SecurityModule,
26
- providers: [...provideSecurity(config)],
27
- };
28
- }
29
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SecurityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
30
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.8", ngImport: i0, type: SecurityModule, imports: [i1.StoreFeatureModule] });
31
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SecurityModule, imports: [StoreModule.forFeature(SecurityFeature)] });
32
- }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SecurityModule, decorators: [{
34
- type: NgModule,
35
- args: [{
36
- imports: [StoreModule.forFeature(SecurityFeature)],
37
- }]
38
- }] });
39
- export const SECURITY_CONTEXT_TOKEN_PROVIDER = new InjectionToken('SECURITY_CONTEXT_TOKEN_PROVIDER');
40
- export const SECURITY_CONFIG = new InjectionToken('SECURITY_CONFIG');
41
- export const SECURITY_INITIALIZER_PROVIDER = {
42
- provide: APP_INITIALIZER,
43
- useFactory: securityInitializerFactory,
44
- deps: [SECURITY_CONTEXT_TOKEN_PROVIDER, AuthContextService, SECURITY_CONFIG, Router],
45
- multi: true,
46
- };
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zZWN1cml0eS9jb3JlL3NyYy9saWIvcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFDZixjQUFjLEVBRWQsUUFBUSxHQUVULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFckMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQix5QkFBeUIsRUFDekIsMEJBQTBCLEdBQzNCLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRWxELE1BQU0sVUFBVSxlQUFlLENBQzdCLFNBQThDLFNBQVM7SUFFdkQsTUFBTSxjQUFjLEdBQW1CO1FBQ3JDLGVBQWUsRUFBRSxXQUFXO1FBQzVCLGlCQUFpQixFQUFFLGlCQUFpQjtRQUNwQyxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztLQUNsQixDQUFDO0lBQ0YsT0FBTztRQUNMLFNBQVM7UUFDVCw2QkFBNkI7UUFDN0IsRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFO1FBQ2pGLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFO0tBQ3ZELENBQUM7QUFDSixDQUFDO0FBS0QsTUFBTSxPQUFPLGNBQWM7SUFDekIsTUFBTSxDQUFDLE9BQU8sQ0FDWixNQUFnQztRQUVoQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGNBQWM7WUFDeEIsU0FBUyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEMsQ0FBQztJQUNKLENBQUM7dUdBUlUsY0FBYzt3R0FBZCxjQUFjO3dHQUFkLGNBQWMsWUFGZixXQUFXLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQzs7MkZBRXRDLGNBQWM7a0JBSDFCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDbkQ7O0FBWUQsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxjQUFjLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUVyRyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUVyRSxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBYTtJQUNyRCxPQUFPLEVBQUUsZUFBZTtJQUN4QixVQUFVLEVBQUUsMEJBQTBCO0lBQ3RDLElBQUksRUFBRSxDQUFDLCtCQUErQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUM7SUFDcEYsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBUFBfSU5JVElBTElaRVIsXHJcbiAgSW5qZWN0aW9uVG9rZW4sXHJcbiAgTW9kdWxlV2l0aFByb3ZpZGVycyxcclxuICBOZ01vZHVsZSxcclxuICBQcm92aWRlcixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3RvcmVNb2R1bGUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XHJcbmltcG9ydCB7IEF1dGhHdWFyZCB9IGZyb20gJy4vZ3VhcmRzJztcclxuaW1wb3J0IHsgU2VjdXJpdHlDb25maWcgfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgQXV0aENvbnRleHRTZXJ2aWNlLFxyXG4gIExvY2FsU3RvcmFnZVRva2VuUHJvdmlkZXIsXHJcbiAgc2VjdXJpdHlJbml0aWFsaXplckZhY3RvcnksXHJcbn0gZnJvbSAnLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFNlY3VyaXR5RmVhdHVyZSB9IGZyb20gJy4vc3RhdGUvZmVhdHVyZSc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVNlY3VyaXR5KFxyXG4gIGNvbmZpZzogUGFydGlhbDxTZWN1cml0eUNvbmZpZz4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcclxuKTogUHJvdmlkZXJbXSB7XHJcbiAgY29uc3Qgc2VjdXJpdHlDb25maWc6IFNlY3VyaXR5Q29uZmlnID0ge1xyXG4gICAgdG9rZW5TdG9yYWdlS2V5OiAnQVBQX1RPS0VOJyxcclxuICAgIG5vdEF1dGhvcml6ZWRQYWdlOiAnL25vdC1hdXRob3JpemVkJyxcclxuICAgIC4uLihjb25maWcgPz8ge30pLFxyXG4gIH07XHJcbiAgcmV0dXJuIFtcclxuICAgIEF1dGhHdWFyZCxcclxuICAgIFNFQ1VSSVRZX0lOSVRJQUxJWkVSX1BST1ZJREVSLFxyXG4gICAgeyBwcm92aWRlOiBTRUNVUklUWV9DT05URVhUX1RPS0VOX1BST1ZJREVSLCB1c2VDbGFzczogTG9jYWxTdG9yYWdlVG9rZW5Qcm92aWRlciB9LFxyXG4gICAgeyBwcm92aWRlOiBTRUNVUklUWV9DT05GSUcsIHVzZVZhbHVlOiBzZWN1cml0eUNvbmZpZyB9LFxyXG4gIF07XHJcbn1cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1N0b3JlTW9kdWxlLmZvckZlYXR1cmUoU2VjdXJpdHlGZWF0dXJlKV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWN1cml0eU1vZHVsZSB7XHJcbiAgc3RhdGljIGZvclJvb3QoXHJcbiAgICBjb25maWc/OiBQYXJ0aWFsPFNlY3VyaXR5Q29uZmlnPlxyXG4gICk6IE1vZHVsZVdpdGhQcm92aWRlcnM8U2VjdXJpdHlNb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBTZWN1cml0eU1vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbLi4ucHJvdmlkZVNlY3VyaXR5KGNvbmZpZyldLFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBTRUNVUklUWV9DT05URVhUX1RPS0VOX1BST1ZJREVSID0gbmV3IEluamVjdGlvblRva2VuKCdTRUNVUklUWV9DT05URVhUX1RPS0VOX1BST1ZJREVSJyk7XHJcblxyXG5leHBvcnQgY29uc3QgU0VDVVJJVFlfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuKCdTRUNVUklUWV9DT05GSUcnKTtcclxuXHJcbmV4cG9ydCBjb25zdCBTRUNVUklUWV9JTklUSUFMSVpFUl9QUk9WSURFUjogUHJvdmlkZXIgPSB7XHJcbiAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxyXG4gIHVzZUZhY3Rvcnk6IHNlY3VyaXR5SW5pdGlhbGl6ZXJGYWN0b3J5LFxyXG4gIGRlcHM6IFtTRUNVUklUWV9DT05URVhUX1RPS0VOX1BST1ZJREVSLCBBdXRoQ29udGV4dFNlcnZpY2UsIFNFQ1VSSVRZX0NPTkZJRywgUm91dGVyXSxcclxuICBtdWx0aTogdHJ1ZSxcclxufTtcclxuIl19
@@ -1,36 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Store } from '@ngrx/store';
3
- import { map } from 'rxjs';
4
- import { hasRequiredPermission, hasRequiredRole } from '../models/functions';
5
- import { setUser } from '../state/actions';
6
- import { selectIsAuthenticated, selectUser } from '../state/selectors';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@ngrx/store";
9
- export class AuthContextService {
10
- store;
11
- user$;
12
- isAuthenticated$;
13
- constructor(store) {
14
- this.store = store;
15
- this.user$ = this.store.select(selectUser);
16
- this.isAuthenticated$ = this.store.select(selectIsAuthenticated);
17
- }
18
- setUser(user) {
19
- this.store.dispatch(setUser({ user }));
20
- }
21
- hasRequiredPermission(requiredPermissions) {
22
- return this.user$.pipe(map((user) => hasRequiredPermission(user, requiredPermissions)));
23
- }
24
- hasRequiredRole(requiredPermissions) {
25
- return this.user$.pipe(map((user) => hasRequiredRole(user, requiredPermissions)));
26
- }
27
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AuthContextService, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable });
28
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AuthContextService, providedIn: 'root' });
29
- }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AuthContextService, decorators: [{
31
- type: Injectable,
32
- args: [{
33
- providedIn: 'root',
34
- }]
35
- }], ctorParameters: () => [{ type: i1.Store }] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1jb250ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zZWN1cml0eS9jb3JlL3NyYy9saWIvc2VydmljZXMvYXV0aC1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUt2RSxNQUFNLE9BQU8sa0JBQWtCO0lBSVQ7SUFIcEIsS0FBSyxDQUE0QztJQUNqRCxnQkFBZ0IsQ0FBc0I7SUFFdEMsWUFBb0IsS0FBWTtRQUFaLFVBQUssR0FBTCxLQUFLLENBQU87UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQW1DO1FBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQscUJBQXFCLENBQ25CLG1CQUFzQztRQUV0QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNwQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQ2hFLENBQUM7SUFDSixDQUFDO0lBRUQsZUFBZSxDQUFDLG1CQUFzQztRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNwQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUMxRCxDQUFDO0lBQ0osQ0FBQzt1R0F6QlUsa0JBQWtCOzJHQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XHJcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkVXNlciB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IGhhc1JlcXVpcmVkUGVybWlzc2lvbiwgaGFzUmVxdWlyZWRSb2xlIH0gZnJvbSAnLi4vbW9kZWxzL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IHNldFVzZXIgfSBmcm9tICcuLi9zdGF0ZS9hY3Rpb25zJztcclxuaW1wb3J0IHsgc2VsZWN0SXNBdXRoZW50aWNhdGVkLCBzZWxlY3RVc2VyIH0gZnJvbSAnLi4vc3RhdGUvc2VsZWN0b3JzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoQ29udGV4dFNlcnZpY2Uge1xyXG4gIHVzZXIkOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZWRVc2VyIHwgdW5kZWZpbmVkPjtcclxuICBpc0F1dGhlbnRpY2F0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBTdG9yZSkge1xyXG4gICAgdGhpcy51c2VyJCA9IHRoaXMuc3RvcmUuc2VsZWN0KHNlbGVjdFVzZXIpO1xyXG4gICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQkID0gdGhpcy5zdG9yZS5zZWxlY3Qoc2VsZWN0SXNBdXRoZW50aWNhdGVkKTtcclxuICB9XHJcblxyXG4gIHNldFVzZXIodXNlcjogQXV0aGVudGljYXRlZFVzZXIgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2V0VXNlcih7IHVzZXIgfSkpO1xyXG4gIH1cclxuXHJcbiAgaGFzUmVxdWlyZWRQZXJtaXNzaW9uKFxyXG4gICAgcmVxdWlyZWRQZXJtaXNzaW9uczogc3RyaW5nIHwgc3RyaW5nW11cclxuICApOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXIkLnBpcGUoXHJcbiAgICAgIG1hcCgodXNlcikgPT4gaGFzUmVxdWlyZWRQZXJtaXNzaW9uKHVzZXIsIHJlcXVpcmVkUGVybWlzc2lvbnMpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGhhc1JlcXVpcmVkUm9sZShyZXF1aXJlZFBlcm1pc3Npb25zOiBzdHJpbmcgfCBzdHJpbmdbXSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlciQucGlwZShcclxuICAgICAgbWFwKCh1c2VyKSA9PiBoYXNSZXF1aXJlZFJvbGUodXNlciwgcmVxdWlyZWRQZXJtaXNzaW9ucykpXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,8 +0,0 @@
1
- export * from './auth-context.service';
2
- export * from './local-storage-token-provider';
3
- export * from './security-initializer';
4
- export * from './session-token-provider';
5
- export * from './token-provider';
6
- export * from './login.service';
7
- export * from './logout.service';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zZWN1cml0eS9jb3JlL3NyYy9saWIvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXV0aC1jb250ZXh0LnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xvY2FsLXN0b3JhZ2UtdG9rZW4tcHJvdmlkZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL3NlY3VyaXR5LWluaXRpYWxpemVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9zZXNzaW9uLXRva2VuLXByb3ZpZGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi90b2tlbi1wcm92aWRlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbG9naW4uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbG9nb3V0LnNlcnZpY2UnO1xyXG4iXX0=
@@ -1,23 +0,0 @@
1
- import { inject, Injectable } from '@angular/core';
2
- import { of } from 'rxjs';
3
- import { SECURITY_CONFIG } from '../provider';
4
- import * as i0 from "@angular/core";
5
- export class LocalStorageTokenProvider {
6
- config = inject(SECURITY_CONFIG);
7
- getToken() {
8
- const token = localStorage.getItem(this.config.tokenStorageKey);
9
- return of(token ?? undefined);
10
- }
11
- setToken(token) {
12
- localStorage.setItem(this.config.tokenStorageKey, token);
13
- }
14
- removeToken() {
15
- localStorage.clear();
16
- }
17
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LocalStorageTokenProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
18
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LocalStorageTokenProvider });
19
- }
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LocalStorageTokenProvider, decorators: [{
21
- type: Injectable
22
- }] });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS10b2tlbi1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWJzL3NlY3VyaXR5L2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLXRva2VuLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFJOUMsTUFBTSxPQUFPLHlCQUF5QjtJQUM1QixNQUFNLEdBQUcsTUFBTSxDQUFpQixlQUFlLENBQUMsQ0FBQztJQUV6RCxRQUFRO1FBQ04sTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sRUFBRSxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWE7UUFDcEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsV0FBVztRQUNULFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QixDQUFDO3VHQWRVLHlCQUF5QjsyR0FBekIseUJBQXlCOzsyRkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2VjdXJpdHlDb25maWcgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgU0VDVVJJVFlfQ09ORklHIH0gZnJvbSAnLi4vcHJvdmlkZXInO1xuaW1wb3J0IHsgVG9rZW5Qcm92aWRlciB9IGZyb20gJy4vdG9rZW4tcHJvdmlkZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlVG9rZW5Qcm92aWRlciBpbXBsZW1lbnRzIFRva2VuUHJvdmlkZXIge1xuICBwcml2YXRlIGNvbmZpZyA9IGluamVjdDxTZWN1cml0eUNvbmZpZz4oU0VDVVJJVFlfQ09ORklHKTtcblxuICBnZXRUb2tlbigpOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5jb25maWcudG9rZW5TdG9yYWdlS2V5KTtcbiAgICByZXR1cm4gb2YodG9rZW4gPz8gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHNldFRva2VuKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmNvbmZpZy50b2tlblN0b3JhZ2VLZXksIHRva2VuKTtcbiAgfVxuXG4gIHJlbW92ZVRva2VuKCk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5jbGVhcigpO1xuICB9XG59XG4iXX0=
@@ -1,27 +0,0 @@
1
- import { inject, Injectable } from '@angular/core';
2
- import { Router } from '@angular/router';
3
- import { convertJWTToUser } from '../models';
4
- import { SECURITY_CONFIG, SECURITY_CONTEXT_TOKEN_PROVIDER } from '../provider';
5
- import { AuthContextService } from './auth-context.service';
6
- import * as i0 from "@angular/core";
7
- export class LoginService {
8
- config = inject(SECURITY_CONFIG);
9
- tokenProvider = inject(SECURITY_CONTEXT_TOKEN_PROVIDER);
10
- authService = inject(AuthContextService);
11
- router = inject(Router);
12
- login(token) {
13
- if (token) {
14
- this.tokenProvider.setToken(token);
15
- this.authService.setUser(convertJWTToUser(token));
16
- }
17
- else {
18
- this.router.navigate([this.config.loginPage]);
19
- }
20
- }
21
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LoginService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
22
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LoginService });
23
- }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LoginService, decorators: [{
25
- type: Injectable
26
- }] });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWJzL3NlY3VyaXR5L2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy9sb2dpbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQWtCLE1BQU0sV0FBVyxDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBSTVELE1BQU0sT0FBTyxZQUFZO0lBQ2IsTUFBTSxHQUFHLE1BQU0sQ0FBaUIsZUFBZSxDQUFDLENBQUM7SUFDakQsYUFBYSxHQUFHLE1BQU0sQ0FBNEIsK0JBQStCLENBQUMsQ0FBQztJQUNuRixXQUFXLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDekMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVoQyxLQUFLLENBQUMsS0FBYztRQUNoQixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDTCxDQUFDO3VHQWJRLFlBQVk7MkdBQVosWUFBWTs7MkZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGNvbnZlcnRKV1RUb1VzZXIsIFNlY3VyaXR5Q29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IFNFQ1VSSVRZX0NPTkZJRywgU0VDVVJJVFlfQ09OVEVYVF9UT0tFTl9QUk9WSURFUiB9IGZyb20gJy4uL3Byb3ZpZGVyJztcbmltcG9ydCB7IEF1dGhDb250ZXh0U2VydmljZSB9IGZyb20gJy4vYXV0aC1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlVG9rZW5Qcm92aWRlciB9IGZyb20gJy4vbG9jYWwtc3RvcmFnZS10b2tlbi1wcm92aWRlcic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb2dpblNlcnZpY2Uge1xuICAgIHByaXZhdGUgY29uZmlnID0gaW5qZWN0PFNlY3VyaXR5Q29uZmlnPihTRUNVUklUWV9DT05GSUcpO1xuICAgIHByaXZhdGUgdG9rZW5Qcm92aWRlciA9IGluamVjdDxMb2NhbFN0b3JhZ2VUb2tlblByb3ZpZGVyPihTRUNVUklUWV9DT05URVhUX1RPS0VOX1BST1ZJREVSKTtcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhDb250ZXh0U2VydmljZSk7XG4gICAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICAgIGxvZ2luKHRva2VuPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgdGhpcy50b2tlblByb3ZpZGVyLnNldFRva2VuKHRva2VuKTtcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2V0VXNlcihjb252ZXJ0SldUVG9Vc2VyKHRva2VuKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5jb25maWcubG9naW5QYWdlXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -1,18 +0,0 @@
1
- import { inject, Injectable } from '@angular/core';
2
- import { SECURITY_CONTEXT_TOKEN_PROVIDER } from '../provider';
3
- import { AuthContextService } from './auth-context.service';
4
- import * as i0 from "@angular/core";
5
- export class LogoutService {
6
- tokenProvider = inject(SECURITY_CONTEXT_TOKEN_PROVIDER);
7
- authService = inject(AuthContextService);
8
- logout() {
9
- this.tokenProvider.removeToken();
10
- this.authService.setUser(undefined);
11
- }
12
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LogoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LogoutService });
14
- }
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LogoutService, decorators: [{
16
- type: Injectable
17
- }] });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nb3V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zZWN1cml0eS9jb3JlL3NyYy9saWIvc2VydmljZXMvbG9nb3V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQUk1RCxNQUFNLE9BQU8sYUFBYTtJQUNMLGFBQWEsR0FBRyxNQUFNLENBQTRCLCtCQUErQixDQUFDLENBQUM7SUFDbkYsV0FBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRTFELE1BQU07UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7dUdBUFEsYUFBYTsyR0FBYixhQUFhOzsyRkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTRUNVUklUWV9DT05URVhUX1RPS0VOX1BST1ZJREVSIH0gZnJvbSAnLi4vcHJvdmlkZXInO1xuaW1wb3J0IHsgQXV0aENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VUb2tlblByb3ZpZGVyIH0gZnJvbSAnLi9sb2NhbC1zdG9yYWdlLXRva2VuLXByb3ZpZGVyJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExvZ291dFNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdG9rZW5Qcm92aWRlciA9IGluamVjdDxMb2NhbFN0b3JhZ2VUb2tlblByb3ZpZGVyPihTRUNVUklUWV9DT05URVhUX1RPS0VOX1BST1ZJREVSKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhDb250ZXh0U2VydmljZSk7XG5cbiAgICBsb2dvdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9rZW5Qcm92aWRlci5yZW1vdmVUb2tlbigpO1xuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnNldFVzZXIodW5kZWZpbmVkKTtcbiAgICB9XG59XG4iXX0=
@@ -1,14 +0,0 @@
1
- import { firstValueFrom, from, of, switchMap } from 'rxjs';
2
- import { convertJWTToUser } from '../models';
3
- export function securityInitializerFactory(tokenProvider, authService, config, router) {
4
- const initializationFn = tokenProvider.getToken().pipe(switchMap((token) => {
5
- const user = convertJWTToUser(token);
6
- if (config.loginPage && !user) {
7
- return from(router.navigate([config.loginPage]));
8
- }
9
- authService.setUser(user);
10
- return of({});
11
- }));
12
- return () => firstValueFrom(initializationFn);
13
- }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktaW5pdGlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zZWN1cml0eS9jb3JlL3NyYy9saWIvc2VydmljZXMvc2VjdXJpdHktaW5pdGlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQWtCLE1BQU0sV0FBVyxDQUFDO0FBSTdELE1BQU0sVUFBVSwwQkFBMEIsQ0FDeEMsYUFBNEIsRUFDNUIsV0FBK0IsRUFDL0IsTUFBc0IsRUFDdEIsTUFBYztJQUVkLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FDcEQsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDbEIsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUVGLE9BQU8sR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUE7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBmcm9tLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNvbnZlcnRKV1RUb1VzZXIsIFNlY3VyaXR5Q29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQXV0aENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRva2VuUHJvdmlkZXIgfSBmcm9tICcuL3Rva2VuLXByb3ZpZGVyJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZWN1cml0eUluaXRpYWxpemVyRmFjdG9yeShcclxuICB0b2tlblByb3ZpZGVyOiBUb2tlblByb3ZpZGVyLFxyXG4gIGF1dGhTZXJ2aWNlOiBBdXRoQ29udGV4dFNlcnZpY2UsXHJcbiAgY29uZmlnOiBTZWN1cml0eUNvbmZpZyxcclxuICByb3V0ZXI6IFJvdXRlclxyXG4pOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcclxuICBjb25zdCBpbml0aWFsaXphdGlvbkZuID0gdG9rZW5Qcm92aWRlci5nZXRUb2tlbigpLnBpcGUoXHJcbiAgICBzd2l0Y2hNYXAoKHRva2VuKSA9PiB7XHJcbiAgICAgIGNvbnN0IHVzZXIgPSBjb252ZXJ0SldUVG9Vc2VyKHRva2VuKTtcclxuICAgICAgaWYgKGNvbmZpZy5sb2dpblBhZ2UgJiYgIXVzZXIpIHtcclxuICAgICAgICByZXR1cm4gZnJvbShyb3V0ZXIubmF2aWdhdGUoW2NvbmZpZy5sb2dpblBhZ2VdKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGF1dGhTZXJ2aWNlLnNldFVzZXIodXNlcik7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9KVxyXG4gICk7XHJcblxyXG4gIHJldHVybiAoKSA9PiBmaXJzdFZhbHVlRnJvbShpbml0aWFsaXphdGlvbkZuKVxyXG59XHJcbiJdfQ==
@@ -1,17 +0,0 @@
1
- import { inject, Injectable } from '@angular/core';
2
- import { of } from 'rxjs';
3
- import { SECURITY_CONFIG } from '../provider';
4
- import * as i0 from "@angular/core";
5
- export class SessionStorageTokenProvider {
6
- config = inject(SECURITY_CONFIG);
7
- getToken() {
8
- const token = sessionStorage.getItem(this.config.tokenStorageKey);
9
- return of(token ?? undefined);
10
- }
11
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SessionStorageTokenProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SessionStorageTokenProvider });
13
- }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SessionStorageTokenProvider, decorators: [{
15
- type: Injectable
16
- }] });
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi10b2tlbi1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWJzL3NlY3VyaXR5L2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy9zZXNzaW9uLXRva2VuLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFJOUMsTUFBTSxPQUFPLDJCQUEyQjtJQUM5QixNQUFNLEdBQUcsTUFBTSxDQUFpQixlQUFlLENBQUMsQ0FBQztJQUV6RCxRQUFRO1FBQ04sTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sRUFBRSxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsQ0FBQztJQUNoQyxDQUFDO3VHQU5VLDJCQUEyQjsyR0FBM0IsMkJBQTJCOzsyRkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNlY3VyaXR5Q29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgU0VDVVJJVFlfQ09ORklHIH0gZnJvbSAnLi4vcHJvdmlkZXInO1xyXG5pbXBvcnQgeyBUb2tlblByb3ZpZGVyIH0gZnJvbSAnLi90b2tlbi1wcm92aWRlcic7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTZXNzaW9uU3RvcmFnZVRva2VuUHJvdmlkZXIgaW1wbGVtZW50cyBUb2tlblByb3ZpZGVyIHtcclxuICBwcml2YXRlIGNvbmZpZyA9IGluamVjdDxTZWN1cml0eUNvbmZpZz4oU0VDVVJJVFlfQ09ORklHKTtcclxuXHJcbiAgZ2V0VG9rZW4oKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcclxuICAgIGNvbnN0IHRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmNvbmZpZy50b2tlblN0b3JhZ2VLZXkpO1xyXG4gICAgcmV0dXJuIG9mKHRva2VuID8/IHVuZGVmaW5lZCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zZWN1cml0eS9jb3JlL3NyYy9saWIvc2VydmljZXMvdG9rZW4tcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUb2tlblByb3ZpZGVyIHtcclxuICBnZXRUb2tlbigpOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD47XHJcbn1cclxuIl19
@@ -1,3 +0,0 @@
1
- import { createAction, props } from '@ngrx/store';
2
- export const setUser = createAction('[Auth] Set User', props());
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWJzL3NlY3VyaXR5L2NvcmUvc3JjL2xpYi9zdGF0ZS9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR2xELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQ2pDLGlCQUFpQixFQUNqQixLQUFLLEVBQTJDLENBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVBY3Rpb24sIHByb3BzIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGVkVXNlciB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0VXNlciA9IGNyZWF0ZUFjdGlvbihcclxuICAnW0F1dGhdIFNldCBVc2VyJyxcclxuICBwcm9wczx7IHVzZXI6IEF1dGhlbnRpY2F0ZWRVc2VyIHwgdW5kZWZpbmVkIH0+KClcclxuKTtcclxuIl19
@@ -1,8 +0,0 @@
1
- import { createFeature } from "@ngrx/store";
2
- import { authReducer } from "./reducers";
3
- export const SECURITY_FEATURE_NAME = 'SECURITY';
4
- export const SecurityFeature = createFeature({
5
- name: SECURITY_FEATURE_NAME,
6
- reducer: authReducer
7
- });
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWJzL3NlY3VyaXR5L2NvcmUvc3JjL2xpYi9zdGF0ZS9mZWF0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUV4QyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxVQUFVLENBQUM7QUFFaEQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQztJQUN6QyxJQUFJLEVBQUUscUJBQXFCO0lBQzNCLE9BQU8sRUFBRSxXQUFXO0NBQ3ZCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUZlYXR1cmUgfSBmcm9tIFwiQG5ncngvc3RvcmVcIlxyXG5pbXBvcnQgeyBhdXRoUmVkdWNlciB9IGZyb20gXCIuL3JlZHVjZXJzXCJcclxuXHJcbmV4cG9ydCBjb25zdCBTRUNVUklUWV9GRUFUVVJFX05BTUUgPSAnU0VDVVJJVFknO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNlY3VyaXR5RmVhdHVyZSA9IGNyZWF0ZUZlYXR1cmUoe1xyXG4gICAgbmFtZTogU0VDVVJJVFlfRkVBVFVSRV9OQU1FLFxyXG4gICAgcmVkdWNlcjogYXV0aFJlZHVjZXJcclxufSk7XHJcblxyXG4iXX0=
@@ -1,5 +0,0 @@
1
- export * from './actions';
2
- export * from './state';
3
- export * from './reducers';
4
- export * from './selectors';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zZWN1cml0eS9jb3JlL3NyYy9saWIvc3RhdGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FjdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3N0YXRlJztcclxuZXhwb3J0ICogZnJvbSAnLi9yZWR1Y2Vycyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2VsZWN0b3JzJztcclxuIl19
@@ -1,8 +0,0 @@
1
- import { createReducer, on } from '@ngrx/store';
2
- import { setUser } from './actions';
3
- import { initialState } from './state';
4
- export const authReducer = createReducer(initialState, on(setUser, (state, action) => ({
5
- ...state,
6
- user: action.user
7
- })));
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zZWN1cml0eS9jb3JlL3NyYy9saWIvc3RhdGUvcmVkdWNlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXZDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQ3RDLFlBQVksRUFDWixFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5QixHQUFHLEtBQUs7SUFDUixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Q0FDbEIsQ0FBQyxDQUFDLENBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlZHVjZXIsIG9uIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xyXG5pbXBvcnQgeyBzZXRVc2VyIH0gZnJvbSAnLi9hY3Rpb25zJztcclxuaW1wb3J0IHsgaW5pdGlhbFN0YXRlIH0gZnJvbSAnLi9zdGF0ZSc7XHJcblxyXG5leHBvcnQgY29uc3QgYXV0aFJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKFxyXG4gIGluaXRpYWxTdGF0ZSxcclxuICBvbihzZXRVc2VyLCAoc3RhdGUsIGFjdGlvbikgPT4gKHtcclxuICAgIC4uLnN0YXRlLFxyXG4gICAgdXNlcjogYWN0aW9uLnVzZXJcclxuICB9KSlcclxuKTsiXX0=
@@ -1,5 +0,0 @@
1
- import { createSelector } from '@ngrx/store';
2
- import { SecurityFeature } from './feature';
3
- export const selectIsAuthenticated = createSelector(SecurityFeature.selectUser, (user) => !!user);
4
- export const selectUser = SecurityFeature.selectUser;
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYnMvc2VjdXJpdHkvY29yZS9zcmMvbGliL3N0YXRlL3NlbGVjdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFNUMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsY0FBYyxDQUNqRCxlQUFlLENBQUMsVUFBVSxFQUMxQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDakIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3IgfSBmcm9tICdAbmdyeC9zdG9yZSc7XHJcbmltcG9ydCB7IFNlY3VyaXR5RmVhdHVyZSB9IGZyb20gJy4vZmVhdHVyZSc7XHJcblxyXG5leHBvcnQgY29uc3Qgc2VsZWN0SXNBdXRoZW50aWNhdGVkID0gY3JlYXRlU2VsZWN0b3IoXHJcbiAgU2VjdXJpdHlGZWF0dXJlLnNlbGVjdFVzZXIsXHJcbiAgKHVzZXIpID0+ICEhdXNlclxyXG4pO1xyXG5cclxuZXhwb3J0IGNvbnN0IHNlbGVjdFVzZXIgPSBTZWN1cml0eUZlYXR1cmUuc2VsZWN0VXNlcjsiXX0=
@@ -1,4 +0,0 @@
1
- export const initialState = {
2
- user: undefined,
3
- };
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGlicy9zZWN1cml0eS9jb3JlL3NyYy9saWIvc3RhdGUvc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFjO0lBQ3JDLElBQUksRUFBRSxTQUFTO0NBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoZW50aWNhdGVkVXNlciB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhTdGF0ZSB7XHJcbiAgdXNlcjogQXV0aGVudGljYXRlZFVzZXIgfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpbml0aWFsU3RhdGU6IEF1dGhTdGF0ZSA9IHtcclxuICB1c2VyOiB1bmRlZmluZWQsXHJcbn07XHJcbiJdfQ==
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaXNvZnQtc2VjdXJpdHktY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWJzL3NlY3VyaXR5L2NvcmUvc3JjL3Zlcmlzb2Z0LXNlY3VyaXR5LWNvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=