@tilde-nlp/ngx-user-access 8.0.6 → 8.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -173,8 +173,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImpor
|
|
|
173
173
|
class UserConfigurationService {
|
|
174
174
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
175
175
|
updateUserConfiguration(_currentConfiguration, _newConfiguration) {
|
|
176
|
-
|
|
177
|
-
|
|
176
|
+
return _currentConfiguration;
|
|
177
|
+
}
|
|
178
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
179
|
+
addAddons(_addons, _newConfiguration) {
|
|
178
180
|
}
|
|
179
181
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: UserConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
180
182
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: UserConfigurationService, providedIn: 'root' }); }
|
|
@@ -321,6 +323,9 @@ class PermissionsService {
|
|
|
321
323
|
}
|
|
322
324
|
if (permissionConfig?.userConfiguration) {
|
|
323
325
|
this.updateUserConfiguration(permissionConfig.userConfiguration);
|
|
326
|
+
if (plan.Addons?.length) {
|
|
327
|
+
this.updateAddons(plan.Addons);
|
|
328
|
+
}
|
|
324
329
|
}
|
|
325
330
|
}
|
|
326
331
|
}
|
|
@@ -343,6 +348,9 @@ class PermissionsService {
|
|
|
343
348
|
}
|
|
344
349
|
return permissions;
|
|
345
350
|
}
|
|
351
|
+
updateAddons(addons) {
|
|
352
|
+
this.userConfigurationService.addAddons(addons, this.userConfiguration);
|
|
353
|
+
}
|
|
346
354
|
checkRolePermissions() {
|
|
347
355
|
const subscriptionConfig = this.subscriptionConfig;
|
|
348
356
|
const token = this.token;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tilde-nlp-ngx-user-access.mjs","sources":["../../../projects/ngx-user-access/src/lib/user-access-config/tokens/user-access-config,.token.ts","../../../projects/ngx-user-access/src/lib/user-access-config/user-access-config.service.ts","../../../projects/ngx-user-access/src/lib/permissions/models/permission-status.model.ts","../../../projects/ngx-user-access/src/lib/permissions/models/default-permissions.enum.ts","../../../projects/ngx-user-access/src/lib/auth/auth.service.ts","../../../projects/ngx-user-access/src/lib/auth/models/auth-guard-param-keys.enum.ts","../../../projects/ngx-user-access/src/lib/auth/auth.guard.ts","../../../projects/ngx-user-access/src/lib/permissions/user-configuration.service.ts","../../../projects/ngx-user-access/src/lib/permissions/permissions.service.ts","../../../projects/ngx-user-access/src/lib/permissions/directives/has-permissions.directive.ts","../../../projects/ngx-user-access/src/lib/keycloak/keycloak.initializer.ts","../../../projects/ngx-user-access/src/lib/keycloak/keycloak.provider.ts","../../../projects/ngx-user-access/src/lib/subscription/subscription-custom.service.ts","../../../projects/ngx-user-access/src/lib/subscription/subscription.service.ts","../../../projects/ngx-user-access/src/lib/subscription/models/speech-plans.model.ts","../../../projects/ngx-user-access/src/tilde-nlp-ngx-user-access.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport { UserAccessConfig } from '../models/user-access-config.model';\r\n\r\nexport const USER_ACCESS_CONFIG_TOKEN = new InjectionToken<UserAccessConfig>('USER_ACCESS_CONFIG_TOKEN');\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { USER_ACCESS_CONFIG_TOKEN } from './tokens/user-access-config,.token';\r\nimport { UserAccessConfig } from './models/user-access-config.model';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class UserAccessConfigService {\r\n\t#config = inject(USER_ACCESS_CONFIG_TOKEN);\r\n\r\n\tgetConfiguration(): UserAccessConfig {\r\n\t\treturn this.#config;\r\n\t}\r\n}\r\n","export enum PermissionStatus {\r\n\tOK = 'OK',\r\n\tEXPIRED_SUBSCRIPTION = 'EXPIRED_SUBSCRIPTION',\r\n\tNO_SUBSCRIPTION = 'NO_SUBSCRIPTION',\r\n}\r\n","export enum DefaultPermissions {\r\n ALL = 'ALL'\r\n}","import { Injectable } from '@angular/core';\r\nimport { KeycloakService } from 'keycloak-angular';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { UserAccessConfigService } from '../user-access-config';\r\nimport { AuthTokenParsed } from './models/auth-token-parsed.model';\r\nimport { AuthSubscription } from '@tilde-nlp/ngx-common';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class AuthService {\r\n\tauthEnabled!: boolean;\r\n\tusername: BehaviorSubject<string>;\r\n\r\n\tprivate _isAuthenticated = false;\r\n\tprivate _parsedKeycloakToken!: AuthTokenParsed;\r\n\tprivate _token!: string | undefined;\r\n\tget token() {\r\n\t\treturn this._token;\r\n\t}\r\n\r\n\tget parsedKeyCloakToken() {\r\n\t\treturn this._parsedKeycloakToken;\r\n\t}\r\n\r\n\tget isAuthRequired() {\r\n return this.config.getConfiguration().alwaysAuth;\r\n }\r\n\r\n\tconstructor(private readonly config: UserAccessConfigService, private readonly keyCloak: KeycloakService) {\r\n\t\tthis.username = new BehaviorSubject<string>('');\r\n\r\n\t\t// make jwt available in window object, so that it can be accessed everywhere (e.g. from webtranslate iframe)\r\n\t\t/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\t\t(window as any).keycloakToken = () => {\r\n\t\t\treturn this._token;\r\n\t\t};\r\n\t}\r\n\r\n\tuserSubscriptionPlan() {\r\n\t\treturn this.parsedKeyCloakToken?.subscription?.find((plan: { PlanId: string }) =>\r\n\t\t\tObject.values(this.config.getConfiguration().plans).includes(plan.PlanId)\r\n\t\t);\r\n\t}\r\n\r\n\tisAuthenticated(): boolean {\r\n\t\treturn this._isAuthenticated;\r\n\t}\r\n\r\n\tgetUserName(): string {\r\n\t\treturn this.isAuthenticated() ? this.keyCloak?.getUsername() : '';\r\n\t}\r\n\r\n\tgetUserDisplayName(): string {\r\n\t\tif (!this.authEnabled || !this._isAuthenticated) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\t\tlet username = this.getUserName();\r\n\r\n\t\tif (this._parsedKeycloakToken?.name) {\r\n\t\t\tusername = this.parsedKeyCloakToken.name;\r\n\t\t}\r\n\t\treturn username;\r\n\t}\r\n\r\n\tgetToken() {\r\n\t\treturn this.keyCloak.getToken();\r\n\t}\r\n\r\n\tlogout() {\r\n\t\tif (!this.authEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.keyCloak.logout(window.location.origin);\r\n\t}\r\n\r\n\tasync checkLogin() {\r\n\t\tif (!this.authEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._isAuthenticated = await this.keyCloak.isLoggedIn();\r\n\t\tthis.refreshKeycloakToken();\r\n\t\tconst username = this.getUserName();\r\n\t\tthis.username.next(username);\r\n\t}\r\n\r\n\tlogin() {\r\n\t\tif (!this.authEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.keyCloak.login();\r\n\t}\r\n\r\n\tenableAuth() {\r\n\t\tthis.authEnabled = true;\r\n\t}\r\n\r\n\trefreshKeycloakToken() {\r\n\t\tif (!this.authEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst keyCloakInstance = this.keyCloak.getKeycloakInstance();\r\n\t\t/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\t\tconst tokenParsed: AuthTokenParsed = keyCloakInstance.tokenParsed as any;\r\n\t\tthis._token = keyCloakInstance.token;\r\n\t\ttokenParsed?.subscription?.forEach((subscription: AuthSubscription) => {\r\n\t\t\t// Removes \"-Yearly\", \"-Monthly\" from end of string or -Eur- and everything that follows.\r\n\t\t\tsubscription.Label = subscription.PlanId.replace(/-Monthly$|-Yearly$|-EUR-(.*)/, '');\r\n\t\t});\r\n\t\tthis._parsedKeycloakToken = tokenParsed;\r\n\t}\r\n\r\n\tuserIsGroupMember(): boolean {\r\n\t\treturn this.parsedKeyCloakToken?.membership?.length > 0;\r\n\t}\r\n}\r\n","export enum AuthGuardParamKeys {\r\n\tREDIRECT_ROUTE = 'redirectRoute',\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, Router, RouterStateSnapshot, CanActivate } from '@angular/router';\r\nimport { KeycloakService } from 'keycloak-angular';\r\n\r\nimport { AuthService } from './auth.service';\r\nimport { AuthGuardParamKeys } from './models/auth-guard-param-keys.enum';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class AuthGuard implements CanActivate {\r\n\tconstructor(private readonly router: Router, private readonly keycloak: KeycloakService, private readonly auth: AuthService) {}\r\n\r\n\tasync canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {\r\n\t\tif (this.auth.isAuthRequired && !this.auth.isAuthenticated()) {\r\n\t\t\t// redirectToLogin query param is more important than redirectRoute\r\n\t\t\tif (!route.queryParams?.redirectToLogin && route.data?.[AuthGuardParamKeys.REDIRECT_ROUTE]) {\r\n\t\t\t\tthis.router.navigate([route.data[AuthGuardParamKeys.REDIRECT_ROUTE]]);\r\n\t\t\t} else {\r\n\t\t\t\tawait this.keycloak.login({\r\n\t\t\t\t\tredirectUri: window.location.origin + state.url,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Clear unnecessary query param\r\n\t\tif (route.queryParams?.redirectToLogin) {\r\n\t\t\tconst queryParams = { ...route.queryParams };\r\n\t\t\tdelete queryParams.redirectToLogin;\r\n\t\t\tthis.router.navigate([state.url.split('?')[0]], { queryParams });\r\n\t\t}\r\n\r\n\t\treturn !this.auth.isAuthRequired || this.auth.isAuthenticated();\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { UserCustomConfiguration } from './models';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class UserConfigurationService<T> implements UserCustomConfiguration<T> {\r\n\t/* eslint-disable @typescript-eslint/no-unused-vars */\r\n\tupdateUserConfiguration(_currentConfiguration: T, _newConfiguration: T): T {\r\n\t\tconst configuration: T = {} as T;\r\n\r\n\t\treturn configuration;\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PermissionStatus } from './models/permission-status.model';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { UserAccessConfigService } from '../user-access-config';\r\nimport { AuthService } from '../auth';\r\nimport { DefaultPermissions } from './models/default-permissions.enum';\r\nimport { PermissionsConfig } from './models/permissions-config.model';\r\nimport { DefaultSubscriptionConfig } from './models/default-subscription-config.model';\r\nimport { AuthSubscription } from '@tilde-nlp/ngx-common';\r\nimport { UserConfigurationService } from './user-configuration.service';\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class PermissionsService<Permission, UserConfiguration> {\r\n\tuserConfiguration!: UserConfiguration;\r\n\tshowSubscriptionMessage!: boolean;\r\n\r\n\tprivate _hasOnlyUnauthorizedPermissions!: boolean;\r\n\r\n\tprivate _status!: PermissionStatus;\r\n\r\n\tprivate _permissions!: Permission[];\r\n\r\n\tprivate _expiredSubscriptions: AuthSubscription[] = [];\r\n\r\n\tprivate _expiredNotConfirmedSubscriptions: AuthSubscription[] = [];\r\n\r\n\tprivate _onPermissionRefresh = new Subject<Permission[]>();\r\n\r\n\tprivate isDebug!: boolean;\r\n\r\n\tprivate get statusLocalStorageKey() {\r\n\t\treturn this.userSpecificLocalstorageKey(this.status);\r\n\t}\r\n\r\n\tprivate get subscriptionConfig() {\r\n\t\treturn this.config.getConfiguration().subscriptions;\r\n\t}\r\n\r\n\tprivate get token() {\r\n\t\treturn this.auth.parsedKeyCloakToken;\r\n\t}\r\n\r\n\tget status() {\r\n\t\treturn this._status;\r\n\t}\r\n\tget permissions() {\r\n\t\treturn this._permissions;\r\n\t}\r\n\tget expiredSubscriptions() {\r\n\t\treturn this._expiredSubscriptions;\r\n\t}\r\n\tget expiredNotConfirmedSubscriptions() {\r\n\t\treturn this._expiredNotConfirmedSubscriptions;\r\n\t}\r\n\tget hasOnlyUnauthorizedPermissions() {\r\n\t\treturn this._hasOnlyUnauthorizedPermissions;\r\n\t}\r\n\r\n\tget onPermissionRefresh(): Observable<Permission[]> {\r\n\t\treturn this._onPermissionRefresh.asObservable();\r\n\t}\r\n\r\n\tprivate readonly SUPPORT_ROLE_KEY = 'support';\r\n\r\n\tconstructor(\r\n\t\tprivate readonly config: UserAccessConfigService,\r\n\t\tprivate readonly auth: AuthService,\r\n\t\tprivate readonly userConfigurationService: UserConfigurationService<UserConfiguration>\r\n\t) {}\r\n\r\n\t/**\r\n\t * Checks wether user has necessary permission/permissions. By default, if user has at least one of given permissions, method returns true. To check all permissions, set needsAll to true.\r\n\t * @param permissions Permissions to be checked.\r\n\t * @param needsAll If user should have all of given permissions\r\n\t * @returns\r\n\t */\r\n\thasPermission(permissions: Permission[], needsAll = false): boolean {\r\n\t\t// if user is not any group member, access should not be provided\r\n\t\tif (!this.auth.userIsGroupMember() && this.auth.userSubscriptionPlan()) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (!permissions || permissions.length === 0 || this.permissions.includes(DefaultPermissions.ALL as Permission)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfor (const permission of permissions) {\r\n\t\t\tconst hasPermission = this.permissions.includes(permission);\r\n\t\t\tif (needsAll && !hasPermission) {\r\n\t\t\t\treturn false;\r\n\t\t\t} else if (!needsAll && hasPermission) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn needsAll ? true : false;\r\n\t}\r\n\r\n\tconfigurePermissions(): void {\r\n\t\tthis.isDebug = this.config.getConfiguration()?.isDebug ?? false;\r\n\r\n\t\tthis.userConfiguration = {} as UserConfiguration;\r\n\t\tthis._status = PermissionStatus.OK;\r\n\r\n\t\tlet allPermissions: Permission[] | undefined = [];\r\n\t\tconst expiredSubscriptions: AuthSubscription[] = [];\r\n\r\n\t\tallPermissions = this.refreshAllPermissionsForUser();\r\n\r\n\t\tif (new Date() > new Date(this.auth.userSubscriptionPlan()?.EndDate as string)) {\r\n\t\t\texpiredSubscriptions.push(this.auth.userSubscriptionPlan() as AuthSubscription);\r\n\t\t}\r\n\r\n\t\tthis.setPermissions(allPermissions as Permission[]);\r\n\t\tthis._expiredSubscriptions = expiredSubscriptions;\r\n\t\tif (this.isDebug) {\r\n\t\t\t// eslint-disable-next-line no-console\r\n\t\t\tconsole.log('permissions', this.permissions);\r\n\t\t\t// eslint-disable-next-line no-console\r\n\t\t\tconsole.log('userConfig', this.userConfiguration);\r\n\t\t}\r\n\t\tthis.shouldShowMessage();\r\n\t}\r\n\r\n\tconfirmMessage() {\r\n\t\tconst localStorageKey = this.statusLocalStorageKey;\r\n\t\tif (this.status === PermissionStatus.NO_SUBSCRIPTION) {\r\n\t\t\tlocalStorage.setItem(localStorageKey, `true`);\r\n\t\t} else if (this.status === PermissionStatus.EXPIRED_SUBSCRIPTION) {\r\n\t\t\tconst confirmed = JSON.parse(localStorage.getItem(localStorageKey) as string) ?? {};\r\n\t\t\tthis.expiredNotConfirmedSubscriptions.forEach((subscription) => {\r\n\t\t\t\tconfirmed[subscription.PlanId] = new Date().toString();\r\n\t\t\t});\r\n\t\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(confirmed));\r\n\t\t}\r\n\t\tthis.showSubscriptionMessage = false;\r\n\t}\r\n\r\n\tuserSpecificLocalstorageKey(key: string) {\r\n\t\treturn this.hashString(`${key}_${this.auth.getUserName().toUpperCase()}`);\r\n\t}\r\n\r\n\tprivate refreshAllPermissionsForUser() {\r\n\t\t// We should ignore subscription permissions for Supports.\r\n\t\treturn this.isSupport()\r\n\t\t\t? this.checkRolePermissions()\r\n\t\t\t: this.checkSubscriptionPermissions().concat(this.checkRolePermissions() as Permission[]);\r\n\t}\r\n\r\n\tprivate checkSubscriptionPermissions(): Permission[] {\r\n\t\tconst subscriptionConfig = this.subscriptionConfig;\r\n\t\tconst allPermissions = subscriptionConfig.plans;\r\n\t\tconst token = this.token;\r\n\t\tconst isAuthenticated = this.auth.isAuthenticated();\r\n\r\n\t\tlet permissions: Permission[] = [];\r\n\r\n\t\tif (isAuthenticated && !subscriptionConfig.ignoreSubscriptions) {\r\n\t\t\tlet hasAnySubscription = false;\r\n\t\t\tif (token?.subscription) {\r\n\t\t\t\tfor (const plan of token.subscription) {\r\n\t\t\t\t\tconst permissionConfig = this.findPermissionConfig(allPermissions, plan.Label as string);\r\n\t\t\t\t\tif (!this.isPlanActive(plan) && this.isSupportedPlan(plan)) {\r\n\t\t\t\t\t\tif (permissionConfig) {\r\n\t\t\t\t\t\t\thasAnySubscription = true;\r\n\t\t\t\t\t\t\tthis._status = PermissionStatus.EXPIRED_SUBSCRIPTION;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (this.isPlanActive(plan) && this.isSupportedPlan(plan) && permissionConfig) {\r\n\t\t\t\t\t\thasAnySubscription = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (permissionConfig?.permissions) {\r\n\t\t\t\t\t\tpermissionConfig.permissions.forEach((permission) => {\r\n\t\t\t\t\t\t\tif (!permissions.includes(permission)) {\r\n\t\t\t\t\t\t\t\tpermissions.push(permission);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (permissionConfig?.userConfiguration) {\r\n\t\t\t\t\t\tthis.updateUserConfiguration(permissionConfig.userConfiguration);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!hasAnySubscription) {\r\n\t\t\t\tthis._status = PermissionStatus.NO_SUBSCRIPTION;\r\n\t\t\t}\r\n\t\t} else if (subscriptionConfig.ignoreSubscriptions && this.isDebug) {\r\n\t\t\tconsole.warn(\r\n\t\t\t\t'You are ignoring subscriptions, which means that your permissions might not work as expected. This option might be set in config.local.debug.json for easier testing.'\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// if has no permissions, use default permissions\r\n\t\tif (permissions.length === 0) {\r\n\t\t\tconst defaultPlanName = this.findDefaultPlanName(subscriptionConfig, isAuthenticated);\r\n\t\t\tconst permissionConfig = this.findPermissionConfig(allPermissions, defaultPlanName);\r\n\r\n\t\t\tpermissions = permissionConfig?.permissions ?? [];\r\n\t\t\tthis.updateUserConfiguration(permissionConfig?.userConfiguration as UserConfiguration);\r\n\t\t\tif (!subscriptionConfig.ignoreSubscriptions) {\r\n\t\t\t\tthis._hasOnlyUnauthorizedPermissions = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn permissions;\r\n\t}\r\n\r\n\tprivate checkRolePermissions(): Permission[] | undefined {\r\n\t\tconst subscriptionConfig = this.subscriptionConfig;\r\n\t\tconst token = this.token;\r\n\t\tlet permissions: Permission[] = [];\r\n\r\n\t\tconst roles = token?.realm_access?.roles;\r\n\r\n\t\t// if no roles for user or no permissions defined for roles, return empty array.\r\n\t\tif (!roles?.length || !subscriptionConfig.roles?.length) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tif (this.isSupport()) {\r\n\t\t\treturn this.findPermissionConfig(subscriptionConfig.roles, this.SUPPORT_ROLE_KEY)?.permissions;\r\n\t\t}\r\n\r\n\t\troles.forEach((role) => {\r\n\t\t\tconst rolePermissionConfig = this.findPermissionConfig(subscriptionConfig.roles, role);\r\n\t\t\tif (rolePermissionConfig) {\r\n\t\t\t\tpermissions = permissions.concat(rolePermissionConfig.permissions as Permission[]);\r\n\t\t\t\tthis.updateUserConfiguration(rolePermissionConfig.userConfiguration);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn permissions;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates current user configuration object with values that gives more permissions (bigger limits) to the user.\r\n\t * @param userConfiguration User configuration object to be compared with current userconfig object\r\n\t */\r\n\tprivate updateUserConfiguration(userConfiguration: UserConfiguration) {\r\n\t\tif (!userConfiguration) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.userConfiguration = this.userConfigurationService.updateUserConfiguration(this.userConfiguration, userConfiguration);\r\n\t}\r\n\r\n\tprivate shouldShowMessage() {\r\n\t\tconst localStorageValue = localStorage.getItem(this.statusLocalStorageKey);\r\n\t\tif (this.status === PermissionStatus.NO_SUBSCRIPTION) {\r\n\t\t\tthis.showSubscriptionMessage = localStorageValue ? false : true;\r\n\t\t} else if (this.status === PermissionStatus.EXPIRED_SUBSCRIPTION) {\r\n\t\t\tconst confirmed = JSON.parse(localStorageValue as string);\r\n\t\t\tif (!confirmed) {\r\n\t\t\t\tthis._expiredNotConfirmedSubscriptions = this.expiredSubscriptions;\r\n\t\t\t\tthis.showSubscriptionMessage = true;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst notConfirmedExpired = [];\r\n\t\t\tfor (const subscription of this.expiredSubscriptions) {\r\n\t\t\t\tif (confirmed[subscription.PlanId] && new Date() > new Date(subscription.EndDate as string)) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tnotConfirmedExpired.push(subscription);\r\n\t\t\t\tthis.showSubscriptionMessage = true;\r\n\t\t\t}\r\n\t\t\tthis._expiredNotConfirmedSubscriptions = notConfirmedExpired;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate isPlanActive(plan: AuthSubscription) {\r\n\t\tif (!plan.EndDate || new Date() < new Date(plan.EndDate)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tprivate isSupportedPlan(plan: AuthSubscription) {\r\n\t\tconst planLabels = Object.values(this.config.getConfiguration().plans) as string[];\r\n\r\n\t\tif (planLabels.includes(plan.Label as string)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Finds permission config in array based on given key\r\n\t * @param permissions permission array where to find config from\r\n\t * @param key object identification key\r\n\t * @returns permission config\r\n\t */\r\n\tprivate findPermissionConfig(\r\n\t\tpermissions: PermissionsConfig<Permission, UserConfiguration>[],\r\n\t\tkey: string\r\n\t): PermissionsConfig<Permission, UserConfiguration> | null {\r\n\t\tfor (const permission of permissions) {\r\n\t\t\tif (permission.keys.includes(key)) {\r\n\t\t\t\treturn permission;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\t// for storing user specific info in localstorage;\r\n\tprivate hashString(username: string) {\r\n\t\tlet hash = 0;\r\n\t\tif (username.length > 0) {\r\n\t\t\tfor (let i = 0; i < username.length; i++) {\r\n\t\t\t\tconst char = username.charCodeAt(i);\r\n\t\t\t\thash = (hash << 5) - hash + char;\r\n\t\t\t\thash = hash & hash; // Convert to 32bit integer\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn hash.toString();\r\n\t}\r\n\r\n\tprivate findDefaultPlanName(config: DefaultSubscriptionConfig, isAuthenticated: boolean): string {\r\n\t\tlet defaultPlanName;\r\n\t\tif (isAuthenticated) {\r\n\t\t\tif (this.status === PermissionStatus.EXPIRED_SUBSCRIPTION) {\r\n\t\t\t\tdefaultPlanName = config.expiredPermissionsPlanName || config.defaultPlanName;\r\n\t\t\t} else {\r\n\t\t\t\tdefaultPlanName = config.defaultPlanName;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn defaultPlanName || (config.unauthorizedDefaultPermissionPlan as string);\r\n\t}\r\n\r\n\tprivate setPermissions(permissions: Permission[]) {\r\n\t\tthis._permissions = permissions;\r\n\t\tthis._onPermissionRefresh.next(this._permissions);\r\n\t}\r\n\r\n\tprivate isSupport(): boolean {\r\n\t\treturn this.token?.realm_access?.roles?.includes(this.SUPPORT_ROLE_KEY);\r\n\t}\r\n}\r\n","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { PermissionsService } from '../permissions.service';\r\n\r\n@Directive({\r\n // eslint-disable-next-line @angular-eslint/directive-selector\r\n selector: '[hasPermissions]',\r\n standalone: true\r\n})\r\nexport class HasPermissionsDirective<Permissions, UserConfiguration> {\r\n private _hasPermissions!: Permissions[];\r\n\r\n get hasPermissions() { return this._hasPermissions; }\r\n\r\n @Input() set hasPermissions(value: Permissions[]) {\r\n this._hasPermissions = value;\r\n this.checkPermission();\r\n }\r\n\r\n private hasView = false;\r\n\r\n constructor(\r\n private readonly permissions: PermissionsService<Permissions, UserConfiguration>,\r\n private readonly viewContainer: ViewContainerRef,\r\n private readonly templateRef: TemplateRef<unknown>\r\n ) {}\r\n\r\n private checkPermission() {\r\n // if has permissions is null or undefined, then user has permission\r\n const hasPermission = !this.hasPermissions || this.permissions.hasPermission(this.hasPermissions);\r\n if (!hasPermission && this.hasView) {\r\n this.viewContainer.clear();\r\n this.hasView = false;\r\n } else if (hasPermission && !this.hasView) {\r\n this.viewContainer.createEmbeddedView(this.templateRef);\r\n this.hasView = true;\r\n }\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { KeycloakEventTypeLegacy, KeycloakService } from 'keycloak-angular';\r\nimport { UserAccessConfigService } from '../user-access-config';\r\nimport { PermissionsService } from '../permissions';\r\nimport { AuthService } from '../auth';\r\n\r\nexport async function KEYCLOAK_INITIALIZER() {\r\n\tconst keycloak = inject(KeycloakService);\r\n\tconst config = inject(UserAccessConfigService);\r\n\tconst permissions = inject(PermissionsService);\r\n\tconst auth = inject(AuthService);\r\n\r\n\tawait keycloak\r\n\t\t.init({\r\n\t\t\tconfig: config.getConfiguration().keycloak,\r\n\t\t\tenableBearerInterceptor: false,\r\n\t\t\tloadUserProfileAtStartUp: true,\r\n\t\t\tinitOptions: {\r\n\t\t\t\tonLoad: 'check-sso',\r\n\t\t\t\tsilentCheckSsoRedirectUri: window.location.origin + '/assets/auth/silent-check-sso.html',\r\n\t\t\t\tredirectUri: window.location.origin,\r\n\t\t\t},\r\n\t\t\tbearerExcludedUrls: config.getConfiguration().keycloak.bearerExcludedUrls,\r\n\t\t})\r\n\t\t.catch((error) => {\r\n\t\t\tconsole.error(error);\r\n\t\t\tpermissions.configurePermissions();\r\n\t\t\treturn;\r\n\t\t});\r\n\r\n\tauth.enableAuth();\r\n\tawait auth.checkLogin();\r\n\t\r\n\tpermissions.configurePermissions();\r\n\r\n\tkeycloak.keycloakEvents$.subscribe((ev) => {\r\n\t\tif (ev.type == KeycloakEventTypeLegacy.OnTokenExpired) {\r\n\t\t\tconst minValidity = 5;\r\n\t\t\tif (keycloak.isTokenExpired(minValidity)) {\r\n\t\t\t\tkeycloak.updateToken(minValidity).then(\r\n\t\t\t\t\t() => {\r\n\t\t\t\t\t\tauth.refreshKeycloakToken();\r\n\t\t\t\t\t\tpermissions.configurePermissions();\r\n\t\t\t\t\t},\r\n\t\t\t\t\t(err) => {\r\n\t\t\t\t\t\tconsole.error('Token refresh failed', err);\r\n\t\t\t\t\t\tkeycloak.login();\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n","import { KeycloakBearerInterceptor, KeycloakService } from 'keycloak-angular';\r\nimport { KEYCLOAK_INITIALIZER } from './keycloak.initializer';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\n\r\nexport async function KEYCLOAK_PROVIDER() {\r\n\treturn [\r\n\t\tKeycloakService,\r\n\t\t{\r\n\t\t\tprovide: HTTP_INTERCEPTORS,\r\n\t\t\tuseClass: KeycloakBearerInterceptor,\r\n\t\t\tdeps: [KeycloakService],\r\n\t\t\tmulti: true,\r\n\t\t},\r\n\t\tawait KEYCLOAK_INITIALIZER(),\r\n\t];\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PlanConfiguration } from './models';\r\nimport { AuthSubscription } from '@tilde-nlp/ngx-common';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SubscriptionCustomService<UserConfiguration> {\r\n\t/* eslint-disable @typescript-eslint/no-unused-vars */\r\n appendCustomUserConfiguration(_planConfiguration: PlanConfiguration<UserConfiguration>, _subscription?: AuthSubscription): void {\r\n\r\n }\r\n}\r\n","import { computed, inject, Injectable } from '@angular/core';\r\nimport { AuthSubscription, JwtToken } from '@tilde-nlp/ngx-common';\r\nimport { ActiveUserSubscription } from './models/active-user-subscription.model';\r\nimport { PlanConfiguration } from './models';\r\nimport { UserAccessConfigService } from '../user-access-config';\r\nimport { AuthService } from '../auth';\r\nimport { SubscriptionCustomService } from './subscription-custom.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SubscriptionService<UserConfiguration> {\r\n readonly #authService = inject(AuthService);\r\n readonly #configService = inject(UserAccessConfigService);\r\n readonly #subscriptionCustom = inject(SubscriptionCustomService);\r\n\r\n /** Active user subscription, including subscription from token and user configuration, modified based on addons. If no active subscription, inactive supported subscription will be selected and can be used with limitations. */\r\n currentUserSubscription = computed<ActiveUserSubscription<UserConfiguration> | undefined>(() => {\r\n return this.#buildCurrentSubscription();\r\n });\r\n\r\n /** Whether user has any subscriptoin from config, it can be either active or expired. */\r\n hasSupportedSubscription = computed(() => {\r\n return this.currentUserSubscription() !== undefined;\r\n });\r\n\r\n #buildCurrentSubscription() {\r\n const token = this.#authService.parsedKeyCloakToken;\r\n\r\n\t // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const activeSubscription = this.#getCurrentSubscription(token as any as JwtToken);\r\n\r\n if (activeSubscription === undefined) {\r\n return undefined;\r\n }\r\n\r\n this.#subscriptionCustom.appendCustomUserConfiguration(activeSubscription.planConfiguration, activeSubscription.subscription);\r\n return activeSubscription;\r\n }\r\n\r\n #getCurrentSubscription(token?: JwtToken): ActiveUserSubscription<UserConfiguration> | undefined {\r\n const supportedPlans = this.#configService.getConfiguration().subscriptions.plans.map((plan: PlanConfiguration<UserConfiguration>) => plan.keys).flat();\r\n\r\n let planId = this.#configService.getConfiguration().subscriptions.defaultPlanName;\r\n let userSubscription: AuthSubscription | undefined = undefined;\r\n\r\n if (token && token.subscription) {\r\n for (const subscription of token.subscription) {\r\n if (supportedPlans.includes(subscription.PlanId)) {\r\n planId = subscription.PlanId;\r\n userSubscription = subscription;\r\n }\r\n }\r\n }\r\n\r\n const planConfig = structuredClone(this.#findPlanConfigFromSubscription(planId));\r\n\r\n if(planConfig){\r\n // assign supported plan even if it may not be active.\r\n return {\r\n subscription: userSubscription,\r\n planConfiguration: planConfig\r\n };\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Find plan configuration object based on subscription object.\r\n * @param subscription\r\n * @returns Deep cloned plan configuration object, so configuration object is not passed by reference and not modified from outside.\r\n */\r\n #findPlanConfigFromSubscription(planId?: string): PlanConfiguration<UserConfiguration> | undefined {\r\n if(!planId){\r\n return;\r\n }\r\n\r\n const planConfig = this.#configService.getConfiguration().subscriptions.plans.find((planConfiguration: PlanConfiguration<UserConfiguration>) => planConfiguration.keys.includes(planId));\r\n \r\n return structuredClone(planConfig);\r\n }\r\n}\r\n","export enum SpeechPlans {\r\n\tSPEECH_STARTER = 'Speech-Starter',\r\n\tSPEECH_ADVANCED = 'Speech-Advanced',\r\n\tSPEECH_PREMIUM = 'Speech-Premium',\r\n\tSPEECH_UNLIMITED = 'Speech-Unlimited',\r\n\tSUBTITLES = 'Subtitles',\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UserAccessConfigService","i3.AuthService","i2.AuthService","i3.UserConfigurationService","i1.PermissionsService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tilde-nlp-ngx-user-access.mjs","sources":["../../../projects/ngx-user-access/src/lib/user-access-config/tokens/user-access-config,.token.ts","../../../projects/ngx-user-access/src/lib/user-access-config/user-access-config.service.ts","../../../projects/ngx-user-access/src/lib/permissions/models/permission-status.model.ts","../../../projects/ngx-user-access/src/lib/permissions/models/default-permissions.enum.ts","../../../projects/ngx-user-access/src/lib/auth/auth.service.ts","../../../projects/ngx-user-access/src/lib/auth/models/auth-guard-param-keys.enum.ts","../../../projects/ngx-user-access/src/lib/auth/auth.guard.ts","../../../projects/ngx-user-access/src/lib/permissions/user-configuration.service.ts","../../../projects/ngx-user-access/src/lib/permissions/permissions.service.ts","../../../projects/ngx-user-access/src/lib/permissions/directives/has-permissions.directive.ts","../../../projects/ngx-user-access/src/lib/keycloak/keycloak.initializer.ts","../../../projects/ngx-user-access/src/lib/keycloak/keycloak.provider.ts","../../../projects/ngx-user-access/src/lib/subscription/subscription-custom.service.ts","../../../projects/ngx-user-access/src/lib/subscription/subscription.service.ts","../../../projects/ngx-user-access/src/lib/subscription/models/speech-plans.model.ts","../../../projects/ngx-user-access/src/tilde-nlp-ngx-user-access.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport { UserAccessConfig } from '../models/user-access-config.model';\r\n\r\nexport const USER_ACCESS_CONFIG_TOKEN = new InjectionToken<UserAccessConfig>('USER_ACCESS_CONFIG_TOKEN');\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { USER_ACCESS_CONFIG_TOKEN } from './tokens/user-access-config,.token';\r\nimport { UserAccessConfig } from './models/user-access-config.model';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class UserAccessConfigService {\r\n\t#config = inject(USER_ACCESS_CONFIG_TOKEN);\r\n\r\n\tgetConfiguration(): UserAccessConfig {\r\n\t\treturn this.#config;\r\n\t}\r\n}\r\n","export enum PermissionStatus {\r\n\tOK = 'OK',\r\n\tEXPIRED_SUBSCRIPTION = 'EXPIRED_SUBSCRIPTION',\r\n\tNO_SUBSCRIPTION = 'NO_SUBSCRIPTION',\r\n}\r\n","export enum DefaultPermissions {\r\n ALL = 'ALL'\r\n}","import { Injectable } from '@angular/core';\r\nimport { KeycloakService } from 'keycloak-angular';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { UserAccessConfigService } from '../user-access-config';\r\nimport { AuthTokenParsed } from './models/auth-token-parsed.model';\r\nimport { AuthSubscription } from '@tilde-nlp/ngx-common';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class AuthService {\r\n\tauthEnabled!: boolean;\r\n\tusername: BehaviorSubject<string>;\r\n\r\n\tprivate _isAuthenticated = false;\r\n\tprivate _parsedKeycloakToken!: AuthTokenParsed;\r\n\tprivate _token!: string | undefined;\r\n\tget token() {\r\n\t\treturn this._token;\r\n\t}\r\n\r\n\tget parsedKeyCloakToken() {\r\n\t\treturn this._parsedKeycloakToken;\r\n\t}\r\n\r\n\tget isAuthRequired() {\r\n return this.config.getConfiguration().alwaysAuth;\r\n }\r\n\r\n\tconstructor(private readonly config: UserAccessConfigService, private readonly keyCloak: KeycloakService) {\r\n\t\tthis.username = new BehaviorSubject<string>('');\r\n\r\n\t\t// make jwt available in window object, so that it can be accessed everywhere (e.g. from webtranslate iframe)\r\n\t\t/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\t\t(window as any).keycloakToken = () => {\r\n\t\t\treturn this._token;\r\n\t\t};\r\n\t}\r\n\r\n\tuserSubscriptionPlan() {\r\n\t\treturn this.parsedKeyCloakToken?.subscription?.find((plan: { PlanId: string }) =>\r\n\t\t\tObject.values(this.config.getConfiguration().plans).includes(plan.PlanId)\r\n\t\t);\r\n\t}\r\n\r\n\tisAuthenticated(): boolean {\r\n\t\treturn this._isAuthenticated;\r\n\t}\r\n\r\n\tgetUserName(): string {\r\n\t\treturn this.isAuthenticated() ? this.keyCloak?.getUsername() : '';\r\n\t}\r\n\r\n\tgetUserDisplayName(): string {\r\n\t\tif (!this.authEnabled || !this._isAuthenticated) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\t\tlet username = this.getUserName();\r\n\r\n\t\tif (this._parsedKeycloakToken?.name) {\r\n\t\t\tusername = this.parsedKeyCloakToken.name;\r\n\t\t}\r\n\t\treturn username;\r\n\t}\r\n\r\n\tgetToken() {\r\n\t\treturn this.keyCloak.getToken();\r\n\t}\r\n\r\n\tlogout() {\r\n\t\tif (!this.authEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.keyCloak.logout(window.location.origin);\r\n\t}\r\n\r\n\tasync checkLogin() {\r\n\t\tif (!this.authEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._isAuthenticated = await this.keyCloak.isLoggedIn();\r\n\t\tthis.refreshKeycloakToken();\r\n\t\tconst username = this.getUserName();\r\n\t\tthis.username.next(username);\r\n\t}\r\n\r\n\tlogin() {\r\n\t\tif (!this.authEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.keyCloak.login();\r\n\t}\r\n\r\n\tenableAuth() {\r\n\t\tthis.authEnabled = true;\r\n\t}\r\n\r\n\trefreshKeycloakToken() {\r\n\t\tif (!this.authEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst keyCloakInstance = this.keyCloak.getKeycloakInstance();\r\n\t\t/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\t\tconst tokenParsed: AuthTokenParsed = keyCloakInstance.tokenParsed as any;\r\n\t\tthis._token = keyCloakInstance.token;\r\n\t\ttokenParsed?.subscription?.forEach((subscription: AuthSubscription) => {\r\n\t\t\t// Removes \"-Yearly\", \"-Monthly\" from end of string or -Eur- and everything that follows.\r\n\t\t\tsubscription.Label = subscription.PlanId.replace(/-Monthly$|-Yearly$|-EUR-(.*)/, '');\r\n\t\t});\r\n\t\tthis._parsedKeycloakToken = tokenParsed;\r\n\t}\r\n\r\n\tuserIsGroupMember(): boolean {\r\n\t\treturn this.parsedKeyCloakToken?.membership?.length > 0;\r\n\t}\r\n}\r\n","export enum AuthGuardParamKeys {\r\n\tREDIRECT_ROUTE = 'redirectRoute',\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, Router, RouterStateSnapshot, CanActivate } from '@angular/router';\r\nimport { KeycloakService } from 'keycloak-angular';\r\n\r\nimport { AuthService } from './auth.service';\r\nimport { AuthGuardParamKeys } from './models/auth-guard-param-keys.enum';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class AuthGuard implements CanActivate {\r\n\tconstructor(private readonly router: Router, private readonly keycloak: KeycloakService, private readonly auth: AuthService) {}\r\n\r\n\tasync canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {\r\n\t\tif (this.auth.isAuthRequired && !this.auth.isAuthenticated()) {\r\n\t\t\t// redirectToLogin query param is more important than redirectRoute\r\n\t\t\tif (!route.queryParams?.redirectToLogin && route.data?.[AuthGuardParamKeys.REDIRECT_ROUTE]) {\r\n\t\t\t\tthis.router.navigate([route.data[AuthGuardParamKeys.REDIRECT_ROUTE]]);\r\n\t\t\t} else {\r\n\t\t\t\tawait this.keycloak.login({\r\n\t\t\t\t\tredirectUri: window.location.origin + state.url,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Clear unnecessary query param\r\n\t\tif (route.queryParams?.redirectToLogin) {\r\n\t\t\tconst queryParams = { ...route.queryParams };\r\n\t\t\tdelete queryParams.redirectToLogin;\r\n\t\t\tthis.router.navigate([state.url.split('?')[0]], { queryParams });\r\n\t\t}\r\n\r\n\t\treturn !this.auth.isAuthRequired || this.auth.isAuthenticated();\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { UserCustomConfiguration } from './models';\r\nimport { Addon } from '@tilde-nlp/ngx-common';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class UserConfigurationService<UserConfiguration> implements UserCustomConfiguration<UserConfiguration> {\r\n\t/* eslint-disable @typescript-eslint/no-unused-vars */\r\n\tupdateUserConfiguration(_currentConfiguration: UserConfiguration, _newConfiguration: UserConfiguration): UserConfiguration {\r\n\t\treturn _currentConfiguration;\r\n\t}\r\n\r\n\t/* eslint-disable @typescript-eslint/no-unused-vars */\r\n\taddAddons(_addons: Addon[], _newConfiguration: UserConfiguration) {\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PermissionStatus } from './models/permission-status.model';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { UserAccessConfigService } from '../user-access-config';\r\nimport { AuthService } from '../auth';\r\nimport { DefaultPermissions } from './models/default-permissions.enum';\r\nimport { PermissionsConfig } from './models/permissions-config.model';\r\nimport { DefaultSubscriptionConfig } from './models/default-subscription-config.model';\r\nimport { Addon, AuthSubscription } from '@tilde-nlp/ngx-common';\r\nimport { UserConfigurationService } from './user-configuration.service';\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class PermissionsService<Permission, UserConfiguration> {\r\n\tuserConfiguration!: UserConfiguration;\r\n\tshowSubscriptionMessage!: boolean;\r\n\r\n\tprivate _hasOnlyUnauthorizedPermissions!: boolean;\r\n\r\n\tprivate _status!: PermissionStatus;\r\n\r\n\tprivate _permissions!: Permission[];\r\n\r\n\tprivate _expiredSubscriptions: AuthSubscription[] = [];\r\n\r\n\tprivate _expiredNotConfirmedSubscriptions: AuthSubscription[] = [];\r\n\r\n\tprivate _onPermissionRefresh = new Subject<Permission[]>();\r\n\r\n\tprivate isDebug!: boolean;\r\n\r\n\tprivate get statusLocalStorageKey() {\r\n\t\treturn this.userSpecificLocalstorageKey(this.status);\r\n\t}\r\n\r\n\tprivate get subscriptionConfig() {\r\n\t\treturn this.config.getConfiguration().subscriptions;\r\n\t}\r\n\r\n\tprivate get token() {\r\n\t\treturn this.auth.parsedKeyCloakToken;\r\n\t}\r\n\r\n\tget status() {\r\n\t\treturn this._status;\r\n\t}\r\n\tget permissions() {\r\n\t\treturn this._permissions;\r\n\t}\r\n\tget expiredSubscriptions() {\r\n\t\treturn this._expiredSubscriptions;\r\n\t}\r\n\tget expiredNotConfirmedSubscriptions() {\r\n\t\treturn this._expiredNotConfirmedSubscriptions;\r\n\t}\r\n\tget hasOnlyUnauthorizedPermissions() {\r\n\t\treturn this._hasOnlyUnauthorizedPermissions;\r\n\t}\r\n\r\n\tget onPermissionRefresh(): Observable<Permission[]> {\r\n\t\treturn this._onPermissionRefresh.asObservable();\r\n\t}\r\n\r\n\tprivate readonly SUPPORT_ROLE_KEY = 'support';\r\n\r\n\tconstructor(\r\n\t\tprivate readonly config: UserAccessConfigService,\r\n\t\tprivate readonly auth: AuthService,\r\n\t\tprivate readonly userConfigurationService: UserConfigurationService<UserConfiguration>\r\n\t) {}\r\n\r\n\t/**\r\n\t * Checks wether user has necessary permission/permissions. By default, if user has at least one of given permissions, method returns true. To check all permissions, set needsAll to true.\r\n\t * @param permissions Permissions to be checked.\r\n\t * @param needsAll If user should have all of given permissions\r\n\t * @returns\r\n\t */\r\n\thasPermission(permissions: Permission[], needsAll = false): boolean {\r\n\t\t// if user is not any group member, access should not be provided\r\n\t\tif (!this.auth.userIsGroupMember() && this.auth.userSubscriptionPlan()) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (!permissions || permissions.length === 0 || this.permissions.includes(DefaultPermissions.ALL as Permission)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tfor (const permission of permissions) {\r\n\t\t\tconst hasPermission = this.permissions.includes(permission);\r\n\t\t\tif (needsAll && !hasPermission) {\r\n\t\t\t\treturn false;\r\n\t\t\t} else if (!needsAll && hasPermission) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn needsAll ? true : false;\r\n\t}\r\n\r\n\tconfigurePermissions(): void {\r\n\t\tthis.isDebug = this.config.getConfiguration()?.isDebug ?? false;\r\n\r\n\t\tthis.userConfiguration = {} as UserConfiguration;\r\n\t\tthis._status = PermissionStatus.OK;\r\n\r\n\t\tlet allPermissions: Permission[] | undefined = [];\r\n\t\tconst expiredSubscriptions: AuthSubscription[] = [];\r\n\r\n\t\tallPermissions = this.refreshAllPermissionsForUser();\r\n\r\n\t\tif (new Date() > new Date(this.auth.userSubscriptionPlan()?.EndDate as string)) {\r\n\t\t\texpiredSubscriptions.push(this.auth.userSubscriptionPlan() as AuthSubscription);\r\n\t\t}\r\n\r\n\t\tthis.setPermissions(allPermissions as Permission[]);\r\n\t\tthis._expiredSubscriptions = expiredSubscriptions;\r\n\t\tif (this.isDebug) {\r\n\t\t\t// eslint-disable-next-line no-console\r\n\t\t\tconsole.log('permissions', this.permissions);\r\n\t\t\t// eslint-disable-next-line no-console\r\n\t\t\tconsole.log('userConfig', this.userConfiguration);\r\n\t\t}\r\n\t\tthis.shouldShowMessage();\r\n\t}\r\n\r\n\tconfirmMessage() {\r\n\t\tconst localStorageKey = this.statusLocalStorageKey;\r\n\t\tif (this.status === PermissionStatus.NO_SUBSCRIPTION) {\r\n\t\t\tlocalStorage.setItem(localStorageKey, `true`);\r\n\t\t} else if (this.status === PermissionStatus.EXPIRED_SUBSCRIPTION) {\r\n\t\t\tconst confirmed = JSON.parse(localStorage.getItem(localStorageKey) as string) ?? {};\r\n\t\t\tthis.expiredNotConfirmedSubscriptions.forEach((subscription) => {\r\n\t\t\t\tconfirmed[subscription.PlanId] = new Date().toString();\r\n\t\t\t});\r\n\t\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(confirmed));\r\n\t\t}\r\n\t\tthis.showSubscriptionMessage = false;\r\n\t}\r\n\r\n\tuserSpecificLocalstorageKey(key: string) {\r\n\t\treturn this.hashString(`${key}_${this.auth.getUserName().toUpperCase()}`);\r\n\t}\r\n\r\n\tprivate refreshAllPermissionsForUser() {\r\n\t\t// We should ignore subscription permissions for Supports.\r\n\t\treturn this.isSupport()\r\n\t\t\t? this.checkRolePermissions()\r\n\t\t\t: this.checkSubscriptionPermissions().concat(this.checkRolePermissions() as Permission[]);\r\n\t}\r\n\r\n\tprivate checkSubscriptionPermissions(): Permission[] {\r\n\t\tconst subscriptionConfig = this.subscriptionConfig;\r\n\t\tconst allPermissions = subscriptionConfig.plans;\r\n\t\tconst token = this.token;\r\n\t\tconst isAuthenticated = this.auth.isAuthenticated();\r\n\r\n\t\tlet permissions: Permission[] = [];\r\n\r\n\t\tif (isAuthenticated && !subscriptionConfig.ignoreSubscriptions) {\r\n\t\t\tlet hasAnySubscription = false;\r\n\t\t\tif (token?.subscription) {\r\n\t\t\t\tfor (const plan of token.subscription) {\r\n\t\t\t\t\tconst permissionConfig = this.findPermissionConfig(allPermissions, plan.Label as string);\r\n\t\t\t\t\tif (!this.isPlanActive(plan) && this.isSupportedPlan(plan)) {\r\n\t\t\t\t\t\tif (permissionConfig) {\r\n\t\t\t\t\t\t\thasAnySubscription = true;\r\n\t\t\t\t\t\t\tthis._status = PermissionStatus.EXPIRED_SUBSCRIPTION;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (this.isPlanActive(plan) && this.isSupportedPlan(plan) && permissionConfig) {\r\n\t\t\t\t\t\thasAnySubscription = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (permissionConfig?.permissions) {\r\n\t\t\t\t\t\tpermissionConfig.permissions.forEach((permission) => {\r\n\t\t\t\t\t\t\tif (!permissions.includes(permission)) {\r\n\t\t\t\t\t\t\t\tpermissions.push(permission);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (permissionConfig?.userConfiguration) {\r\n\t\t\t\t\t\tthis.updateUserConfiguration(permissionConfig.userConfiguration);\r\n\t\t\t\t\t\tif (plan.Addons?.length) {\r\n\t\t\t\t\t\t\tthis.updateAddons(plan.Addons);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!hasAnySubscription) {\r\n\t\t\t\tthis._status = PermissionStatus.NO_SUBSCRIPTION;\r\n\t\t\t}\r\n\t\t} else if (subscriptionConfig.ignoreSubscriptions && this.isDebug) {\r\n\t\t\tconsole.warn(\r\n\t\t\t\t'You are ignoring subscriptions, which means that your permissions might not work as expected. This option might be set in config.local.debug.json for easier testing.'\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// if has no permissions, use default permissions\r\n\t\tif (permissions.length === 0) {\r\n\t\t\tconst defaultPlanName = this.findDefaultPlanName(subscriptionConfig, isAuthenticated);\r\n\t\t\tconst permissionConfig = this.findPermissionConfig(allPermissions, defaultPlanName);\r\n\r\n\t\t\tpermissions = permissionConfig?.permissions ?? [];\r\n\t\t\tthis.updateUserConfiguration(permissionConfig?.userConfiguration as UserConfiguration);\r\n\t\t\tif (!subscriptionConfig.ignoreSubscriptions) {\r\n\t\t\t\tthis._hasOnlyUnauthorizedPermissions = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn permissions;\r\n\t}\r\n\r\n\tprivate updateAddons(addons: Addon[]): void {\r\n\t\tthis.userConfigurationService.addAddons(addons, this.userConfiguration);\r\n\t}\r\n\r\n\tprivate checkRolePermissions(): Permission[] | undefined {\r\n\t\tconst subscriptionConfig = this.subscriptionConfig;\r\n\t\tconst token = this.token;\r\n\t\tlet permissions: Permission[] = [];\r\n\r\n\t\tconst roles = token?.realm_access?.roles;\r\n\r\n\t\t// if no roles for user or no permissions defined for roles, return empty array.\r\n\t\tif (!roles?.length || !subscriptionConfig.roles?.length) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tif (this.isSupport()) {\r\n\t\t\treturn this.findPermissionConfig(subscriptionConfig.roles, this.SUPPORT_ROLE_KEY)?.permissions;\r\n\t\t}\r\n\r\n\t\troles.forEach((role) => {\r\n\t\t\tconst rolePermissionConfig = this.findPermissionConfig(subscriptionConfig.roles, role);\r\n\t\t\tif (rolePermissionConfig) {\r\n\t\t\t\tpermissions = permissions.concat(rolePermissionConfig.permissions as Permission[]);\r\n\t\t\t\tthis.updateUserConfiguration(rolePermissionConfig.userConfiguration);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn permissions;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates current user configuration object with values that gives more permissions (bigger limits) to the user.\r\n\t * @param userConfiguration User configuration object to be compared with current userconfig object\r\n\t */\r\n\tprivate updateUserConfiguration(userConfiguration: UserConfiguration) {\r\n\t\tif (!userConfiguration) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.userConfiguration = this.userConfigurationService.updateUserConfiguration(this.userConfiguration, userConfiguration);\r\n\t}\r\n\r\n\tprivate shouldShowMessage() {\r\n\t\tconst localStorageValue = localStorage.getItem(this.statusLocalStorageKey);\r\n\t\tif (this.status === PermissionStatus.NO_SUBSCRIPTION) {\r\n\t\t\tthis.showSubscriptionMessage = localStorageValue ? false : true;\r\n\t\t} else if (this.status === PermissionStatus.EXPIRED_SUBSCRIPTION) {\r\n\t\t\tconst confirmed = JSON.parse(localStorageValue as string);\r\n\t\t\tif (!confirmed) {\r\n\t\t\t\tthis._expiredNotConfirmedSubscriptions = this.expiredSubscriptions;\r\n\t\t\t\tthis.showSubscriptionMessage = true;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst notConfirmedExpired = [];\r\n\t\t\tfor (const subscription of this.expiredSubscriptions) {\r\n\t\t\t\tif (confirmed[subscription.PlanId] && new Date() > new Date(subscription.EndDate as string)) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tnotConfirmedExpired.push(subscription);\r\n\t\t\t\tthis.showSubscriptionMessage = true;\r\n\t\t\t}\r\n\t\t\tthis._expiredNotConfirmedSubscriptions = notConfirmedExpired;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate isPlanActive(plan: AuthSubscription) {\r\n\t\tif (!plan.EndDate || new Date() < new Date(plan.EndDate)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tprivate isSupportedPlan(plan: AuthSubscription) {\r\n\t\tconst planLabels = Object.values(this.config.getConfiguration().plans) as string[];\r\n\r\n\t\tif (planLabels.includes(plan.Label as string)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Finds permission config in array based on given key\r\n\t * @param permissions permission array where to find config from\r\n\t * @param key object identification key\r\n\t * @returns permission config\r\n\t */\r\n\tprivate findPermissionConfig(\r\n\t\tpermissions: PermissionsConfig<Permission, UserConfiguration>[],\r\n\t\tkey: string\r\n\t): PermissionsConfig<Permission, UserConfiguration> | null {\r\n\t\tfor (const permission of permissions) {\r\n\t\t\tif (permission.keys.includes(key)) {\r\n\t\t\t\treturn permission;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\t// for storing user specific info in localstorage;\r\n\tprivate hashString(username: string) {\r\n\t\tlet hash = 0;\r\n\t\tif (username.length > 0) {\r\n\t\t\tfor (let i = 0; i < username.length; i++) {\r\n\t\t\t\tconst char = username.charCodeAt(i);\r\n\t\t\t\thash = (hash << 5) - hash + char;\r\n\t\t\t\thash = hash & hash; // Convert to 32bit integer\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn hash.toString();\r\n\t}\r\n\r\n\tprivate findDefaultPlanName(config: DefaultSubscriptionConfig, isAuthenticated: boolean): string {\r\n\t\tlet defaultPlanName;\r\n\t\tif (isAuthenticated) {\r\n\t\t\tif (this.status === PermissionStatus.EXPIRED_SUBSCRIPTION) {\r\n\t\t\t\tdefaultPlanName = config.expiredPermissionsPlanName || config.defaultPlanName;\r\n\t\t\t} else {\r\n\t\t\t\tdefaultPlanName = config.defaultPlanName;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn defaultPlanName || (config.unauthorizedDefaultPermissionPlan as string);\r\n\t}\r\n\r\n\tprivate setPermissions(permissions: Permission[]) {\r\n\t\tthis._permissions = permissions;\r\n\t\tthis._onPermissionRefresh.next(this._permissions);\r\n\t}\r\n\r\n\tprivate isSupport(): boolean {\r\n\t\treturn this.token?.realm_access?.roles?.includes(this.SUPPORT_ROLE_KEY);\r\n\t}\r\n}\r\n","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { PermissionsService } from '../permissions.service';\r\n\r\n@Directive({\r\n // eslint-disable-next-line @angular-eslint/directive-selector\r\n selector: '[hasPermissions]',\r\n standalone: true\r\n})\r\nexport class HasPermissionsDirective<Permissions, UserConfiguration> {\r\n private _hasPermissions!: Permissions[];\r\n\r\n get hasPermissions() { return this._hasPermissions; }\r\n\r\n @Input() set hasPermissions(value: Permissions[]) {\r\n this._hasPermissions = value;\r\n this.checkPermission();\r\n }\r\n\r\n private hasView = false;\r\n\r\n constructor(\r\n private readonly permissions: PermissionsService<Permissions, UserConfiguration>,\r\n private readonly viewContainer: ViewContainerRef,\r\n private readonly templateRef: TemplateRef<unknown>\r\n ) {}\r\n\r\n private checkPermission() {\r\n // if has permissions is null or undefined, then user has permission\r\n const hasPermission = !this.hasPermissions || this.permissions.hasPermission(this.hasPermissions);\r\n if (!hasPermission && this.hasView) {\r\n this.viewContainer.clear();\r\n this.hasView = false;\r\n } else if (hasPermission && !this.hasView) {\r\n this.viewContainer.createEmbeddedView(this.templateRef);\r\n this.hasView = true;\r\n }\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { KeycloakEventTypeLegacy, KeycloakService } from 'keycloak-angular';\r\nimport { UserAccessConfigService } from '../user-access-config';\r\nimport { PermissionsService } from '../permissions';\r\nimport { AuthService } from '../auth';\r\n\r\nexport async function KEYCLOAK_INITIALIZER() {\r\n\tconst keycloak = inject(KeycloakService);\r\n\tconst config = inject(UserAccessConfigService);\r\n\tconst permissions = inject(PermissionsService);\r\n\tconst auth = inject(AuthService);\r\n\r\n\tawait keycloak\r\n\t\t.init({\r\n\t\t\tconfig: config.getConfiguration().keycloak,\r\n\t\t\tenableBearerInterceptor: false,\r\n\t\t\tloadUserProfileAtStartUp: true,\r\n\t\t\tinitOptions: {\r\n\t\t\t\tonLoad: 'check-sso',\r\n\t\t\t\tsilentCheckSsoRedirectUri: window.location.origin + '/assets/auth/silent-check-sso.html',\r\n\t\t\t\tredirectUri: window.location.origin,\r\n\t\t\t},\r\n\t\t\tbearerExcludedUrls: config.getConfiguration().keycloak.bearerExcludedUrls,\r\n\t\t})\r\n\t\t.catch((error) => {\r\n\t\t\tconsole.error(error);\r\n\t\t\tpermissions.configurePermissions();\r\n\t\t\treturn;\r\n\t\t});\r\n\r\n\tauth.enableAuth();\r\n\tawait auth.checkLogin();\r\n\t\r\n\tpermissions.configurePermissions();\r\n\r\n\tkeycloak.keycloakEvents$.subscribe((ev) => {\r\n\t\tif (ev.type == KeycloakEventTypeLegacy.OnTokenExpired) {\r\n\t\t\tconst minValidity = 5;\r\n\t\t\tif (keycloak.isTokenExpired(minValidity)) {\r\n\t\t\t\tkeycloak.updateToken(minValidity).then(\r\n\t\t\t\t\t() => {\r\n\t\t\t\t\t\tauth.refreshKeycloakToken();\r\n\t\t\t\t\t\tpermissions.configurePermissions();\r\n\t\t\t\t\t},\r\n\t\t\t\t\t(err) => {\r\n\t\t\t\t\t\tconsole.error('Token refresh failed', err);\r\n\t\t\t\t\t\tkeycloak.login();\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n","import { KeycloakBearerInterceptor, KeycloakService } from 'keycloak-angular';\r\nimport { KEYCLOAK_INITIALIZER } from './keycloak.initializer';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\n\r\nexport async function KEYCLOAK_PROVIDER() {\r\n\treturn [\r\n\t\tKeycloakService,\r\n\t\t{\r\n\t\t\tprovide: HTTP_INTERCEPTORS,\r\n\t\t\tuseClass: KeycloakBearerInterceptor,\r\n\t\t\tdeps: [KeycloakService],\r\n\t\t\tmulti: true,\r\n\t\t},\r\n\t\tawait KEYCLOAK_INITIALIZER(),\r\n\t];\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PlanConfiguration } from './models';\r\nimport { AuthSubscription } from '@tilde-nlp/ngx-common';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SubscriptionCustomService<UserConfiguration> {\r\n\t/* eslint-disable @typescript-eslint/no-unused-vars */\r\n appendCustomUserConfiguration(_planConfiguration: PlanConfiguration<UserConfiguration>, _subscription?: AuthSubscription): void {\r\n\r\n }\r\n}\r\n","import { computed, inject, Injectable } from '@angular/core';\r\nimport { AuthSubscription, JwtToken } from '@tilde-nlp/ngx-common';\r\nimport { ActiveUserSubscription } from './models/active-user-subscription.model';\r\nimport { PlanConfiguration } from './models';\r\nimport { UserAccessConfigService } from '../user-access-config';\r\nimport { AuthService } from '../auth';\r\nimport { SubscriptionCustomService } from './subscription-custom.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SubscriptionService<UserConfiguration> {\r\n readonly #authService = inject(AuthService);\r\n readonly #configService = inject(UserAccessConfigService);\r\n readonly #subscriptionCustom = inject(SubscriptionCustomService);\r\n\r\n /** Active user subscription, including subscription from token and user configuration, modified based on addons. If no active subscription, inactive supported subscription will be selected and can be used with limitations. */\r\n currentUserSubscription = computed<ActiveUserSubscription<UserConfiguration> | undefined>(() => {\r\n return this.#buildCurrentSubscription();\r\n });\r\n\r\n /** Whether user has any subscriptoin from config, it can be either active or expired. */\r\n hasSupportedSubscription = computed(() => {\r\n return this.currentUserSubscription() !== undefined;\r\n });\r\n\r\n #buildCurrentSubscription() {\r\n const token = this.#authService.parsedKeyCloakToken;\r\n\r\n\t // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const activeSubscription = this.#getCurrentSubscription(token as any as JwtToken);\r\n\r\n if (activeSubscription === undefined) {\r\n return undefined;\r\n }\r\n\r\n this.#subscriptionCustom.appendCustomUserConfiguration(activeSubscription.planConfiguration, activeSubscription.subscription);\r\n return activeSubscription;\r\n }\r\n\r\n #getCurrentSubscription(token?: JwtToken): ActiveUserSubscription<UserConfiguration> | undefined {\r\n const supportedPlans = this.#configService.getConfiguration().subscriptions.plans.map((plan: PlanConfiguration<UserConfiguration>) => plan.keys).flat();\r\n\r\n let planId = this.#configService.getConfiguration().subscriptions.defaultPlanName;\r\n let userSubscription: AuthSubscription | undefined = undefined;\r\n\r\n if (token && token.subscription) {\r\n for (const subscription of token.subscription) {\r\n if (supportedPlans.includes(subscription.PlanId)) {\r\n planId = subscription.PlanId;\r\n userSubscription = subscription;\r\n }\r\n }\r\n }\r\n\r\n const planConfig = structuredClone(this.#findPlanConfigFromSubscription(planId));\r\n\r\n if(planConfig){\r\n // assign supported plan even if it may not be active.\r\n return {\r\n subscription: userSubscription,\r\n planConfiguration: planConfig\r\n };\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Find plan configuration object based on subscription object.\r\n * @param subscription\r\n * @returns Deep cloned plan configuration object, so configuration object is not passed by reference and not modified from outside.\r\n */\r\n #findPlanConfigFromSubscription(planId?: string): PlanConfiguration<UserConfiguration> | undefined {\r\n if(!planId){\r\n return;\r\n }\r\n\r\n const planConfig = this.#configService.getConfiguration().subscriptions.plans.find((planConfiguration: PlanConfiguration<UserConfiguration>) => planConfiguration.keys.includes(planId));\r\n \r\n return structuredClone(planConfig);\r\n }\r\n}\r\n","export enum SpeechPlans {\r\n\tSPEECH_STARTER = 'Speech-Starter',\r\n\tSPEECH_ADVANCED = 'Speech-Advanced',\r\n\tSPEECH_PREMIUM = 'Speech-Premium',\r\n\tSPEECH_UNLIMITED = 'Speech-Unlimited',\r\n\tSUBTITLES = 'Subtitles',\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UserAccessConfigService","i3.AuthService","i2.AuthService","i3.UserConfigurationService","i1.PermissionsService"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { InjectionToken, ViewContainerRef, TemplateRef } from '@angular/core';
|
|
|
3
3
|
import * as _angular_common_http from '@angular/common/http';
|
|
4
4
|
import { KeycloakService, KeycloakBearerInterceptor } from 'keycloak-angular';
|
|
5
5
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
6
|
-
import { AuthSubscription, ChargebeeSettings } from '@tilde-nlp/ngx-common';
|
|
6
|
+
import { AuthSubscription, Addon, ChargebeeSettings } from '@tilde-nlp/ngx-common';
|
|
7
7
|
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
|
|
8
8
|
|
|
9
9
|
interface UserAccessConfig {
|
|
@@ -165,12 +165,14 @@ interface DefaultSubscriptionConfig {
|
|
|
165
165
|
roles?: PermissionsConfig<unknown, unknown>[];
|
|
166
166
|
}
|
|
167
167
|
|
|
168
|
-
interface UserCustomConfiguration<
|
|
169
|
-
updateUserConfiguration: (currentConfiguration:
|
|
168
|
+
interface UserCustomConfiguration<UserConfiguration> {
|
|
169
|
+
updateUserConfiguration: (currentConfiguration: UserConfiguration, newConfiguration: UserConfiguration) => UserConfiguration;
|
|
170
|
+
addAddons: (addons: Addon[], newConfiguration: UserConfiguration) => void;
|
|
170
171
|
}
|
|
171
172
|
|
|
172
|
-
declare class UserConfigurationService<
|
|
173
|
-
updateUserConfiguration(_currentConfiguration:
|
|
173
|
+
declare class UserConfigurationService<UserConfiguration> implements UserCustomConfiguration<UserConfiguration> {
|
|
174
|
+
updateUserConfiguration(_currentConfiguration: UserConfiguration, _newConfiguration: UserConfiguration): UserConfiguration;
|
|
175
|
+
addAddons(_addons: Addon[], _newConfiguration: UserConfiguration): void;
|
|
174
176
|
static ɵfac: i0.ɵɵFactoryDeclaration<UserConfigurationService<any>, never>;
|
|
175
177
|
static ɵprov: i0.ɵɵInjectableDeclaration<UserConfigurationService<any>>;
|
|
176
178
|
}
|
|
@@ -211,6 +213,7 @@ declare class PermissionsService<Permission, UserConfiguration> {
|
|
|
211
213
|
userSpecificLocalstorageKey(key: string): string;
|
|
212
214
|
private refreshAllPermissionsForUser;
|
|
213
215
|
private checkSubscriptionPermissions;
|
|
216
|
+
private updateAddons;
|
|
214
217
|
private checkRolePermissions;
|
|
215
218
|
/**
|
|
216
219
|
* Updates current user configuration object with values that gives more permissions (bigger limits) to the user.
|