@abp/ng.oauth 9.0.4 → 9.1.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/abp-ng.oauth.mjs +27 -30
- package/fesm2022/abp-ng.oauth.mjs.map +1 -1
- package/package.json +3 -5
- package/esm2022/abp-ng.oauth.mjs +0 -5
- package/esm2022/lib/guards/index.mjs +0 -2
- package/esm2022/lib/guards/oauth.guard.mjs +0 -42
- package/esm2022/lib/handlers/index.mjs +0 -2
- package/esm2022/lib/handlers/oauth-configuration.handler.mjs +0 -36
- package/esm2022/lib/interceptors/api.interceptor.mjs +0 -56
- package/esm2022/lib/interceptors/index.mjs +0 -2
- package/esm2022/lib/oauth.module.mjs +0 -21
- package/esm2022/lib/providers/index.mjs +0 -3
- package/esm2022/lib/providers/navigate-to-manage-profile.provider.mjs +0 -19
- package/esm2022/lib/providers/oauth-module-config.provider.mjs +0 -55
- package/esm2022/lib/services/index.mjs +0 -4
- package/esm2022/lib/services/oauth-error-filter.service.mjs +0 -43
- package/esm2022/lib/services/oauth.service.mjs +0 -82
- package/esm2022/lib/services/remember-me.service.mjs +0 -33
- package/esm2022/lib/strategies/auth-code-flow-strategy.mjs +0 -86
- package/esm2022/lib/strategies/auth-flow-strategy.mjs +0 -93
- package/esm2022/lib/strategies/auth-password-flow-strategy.mjs +0 -69
- package/esm2022/lib/strategies/index.mjs +0 -4
- package/esm2022/lib/tokens/auth-flow-strategy.mjs +0 -11
- package/esm2022/lib/tokens/index.mjs +0 -2
- package/esm2022/lib/utils/auth-utils.mjs +0 -24
- package/esm2022/lib/utils/check-access-token.mjs +0 -11
- package/esm2022/lib/utils/clear-o-auth-storage.mjs +0 -19
- package/esm2022/lib/utils/index.mjs +0 -6
- package/esm2022/lib/utils/oauth-storage.mjs +0 -2
- package/esm2022/lib/utils/storage.factory.mjs +0 -5
- package/esm2022/public-api.mjs +0 -10
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, Injectable, Inject, signal,
|
|
2
|
+
import { inject, Injectable, Inject, signal, provideAppInitializer, makeEnvironmentProviders, NgModule } from '@angular/core';
|
|
3
3
|
import * as i2 from '@abp/ng.core';
|
|
4
|
-
import {
|
|
4
|
+
import { EnvironmentService, NAVIGATE_TO_MANAGE_PROFILE, AuthService, CORE_OPTIONS, IS_EXTERNAL_REQUEST, TENANT_KEY, AbpLocalStorageService, ConfigStateService, HttpErrorReporterService, SessionStateService, AbpWindowService, noop, AbstractAuthErrorFilter, AuthGuard, authGuard, ApiInterceptor, PIPE_TO_LOGIN_FN_KEY, CHECK_AUTHENTICATION_STATE_FN_KEY, AuthErrorFilterService } from '@abp/ng.core';
|
|
5
5
|
import { HttpHeaders, HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
6
6
|
import * as i1 from 'angular-oauth2-oidc';
|
|
7
7
|
import { OAuthService, OAuthErrorEvent, OAuthInfoEvent, OAuthModule, OAuthStorage } from 'angular-oauth2-oidc';
|
|
@@ -44,10 +44,10 @@ class AbpOAuthGuard {
|
|
|
44
44
|
this.authService.navigateToLogin(params);
|
|
45
45
|
return false;
|
|
46
46
|
}
|
|
47
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
48
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
47
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: AbpOAuthGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
48
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: AbpOAuthGuard, providedIn: 'root' }); }
|
|
49
49
|
}
|
|
50
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: AbpOAuthGuard, decorators: [{
|
|
51
51
|
type: Injectable,
|
|
52
52
|
args: [{
|
|
53
53
|
providedIn: 'root',
|
|
@@ -80,10 +80,10 @@ class OAuthConfigurationHandler {
|
|
|
80
80
|
this.oAuthService.configure(config);
|
|
81
81
|
});
|
|
82
82
|
}
|
|
83
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
84
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
83
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: OAuthConfigurationHandler, deps: [{ token: i1.OAuthService }, { token: i2.EnvironmentService }, { token: CORE_OPTIONS }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
84
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: OAuthConfigurationHandler, providedIn: 'root' }); }
|
|
85
85
|
}
|
|
86
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
86
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: OAuthConfigurationHandler, decorators: [{
|
|
87
87
|
type: Injectable,
|
|
88
88
|
args: [{
|
|
89
89
|
providedIn: 'root',
|
|
@@ -129,10 +129,10 @@ class OAuthApiInterceptor {
|
|
|
129
129
|
headers['X-Requested-With'] = 'XMLHttpRequest';
|
|
130
130
|
return headers;
|
|
131
131
|
}
|
|
132
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
133
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
132
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: OAuthApiInterceptor, deps: [{ token: i1.OAuthService }, { token: i2.SessionStateService }, { token: i2.HttpWaitService }, { token: TENANT_KEY }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
133
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: OAuthApiInterceptor, providedIn: 'root' }); }
|
|
134
134
|
}
|
|
135
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
135
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: OAuthApiInterceptor, decorators: [{
|
|
136
136
|
type: Injectable,
|
|
137
137
|
args: [{
|
|
138
138
|
providedIn: 'root',
|
|
@@ -186,10 +186,10 @@ class RememberMeService {
|
|
|
186
186
|
const parsedToken = JSON.parse(atob(tokenBody));
|
|
187
187
|
return Boolean(parsedToken[this.#rememberMe]);
|
|
188
188
|
}
|
|
189
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
190
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
189
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: RememberMeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
190
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: RememberMeService, providedIn: 'root' }); }
|
|
191
191
|
}
|
|
192
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
192
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: RememberMeService, decorators: [{
|
|
193
193
|
type: Injectable,
|
|
194
194
|
args: [{
|
|
195
195
|
providedIn: 'root',
|
|
@@ -523,10 +523,10 @@ class AbpOAuthService {
|
|
|
523
523
|
getAccessTokenExpiration() {
|
|
524
524
|
return this.oAuthService.getAccessTokenExpiration();
|
|
525
525
|
}
|
|
526
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
527
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
526
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: AbpOAuthService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
527
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: AbpOAuthService, providedIn: 'root' }); }
|
|
528
528
|
}
|
|
529
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
529
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: AbpOAuthService, decorators: [{
|
|
530
530
|
type: Injectable,
|
|
531
531
|
args: [{
|
|
532
532
|
providedIn: 'root',
|
|
@@ -565,10 +565,10 @@ class OAuthErrorFilterService extends AbstractAuthErrorFilter {
|
|
|
565
565
|
.map(({ execute }) => execute(event))
|
|
566
566
|
.some(item => item);
|
|
567
567
|
}
|
|
568
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
569
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
568
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: OAuthErrorFilterService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
569
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: OAuthErrorFilterService, providedIn: 'root' }); }
|
|
570
570
|
}
|
|
571
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
571
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: OAuthErrorFilterService, decorators: [{
|
|
572
572
|
type: Injectable,
|
|
573
573
|
args: [{ providedIn: 'root' }]
|
|
574
574
|
}] });
|
|
@@ -605,12 +605,9 @@ function provideAbpOAuth() {
|
|
|
605
605
|
multi: true,
|
|
606
606
|
},
|
|
607
607
|
NavigateToManageProfileProvider,
|
|
608
|
-
{
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
deps: [OAuthConfigurationHandler],
|
|
612
|
-
useFactory: noop,
|
|
613
|
-
},
|
|
608
|
+
provideAppInitializer(() => {
|
|
609
|
+
inject(OAuthConfigurationHandler);
|
|
610
|
+
}),
|
|
614
611
|
OAuthModule.forRoot().providers,
|
|
615
612
|
{ provide: OAuthStorage, useClass: AbpLocalStorageService },
|
|
616
613
|
{ provide: AuthErrorFilterService, useExisting: OAuthErrorFilterService },
|
|
@@ -628,11 +625,11 @@ class AbpOAuthModule {
|
|
|
628
625
|
providers: [provideAbpOAuth()],
|
|
629
626
|
};
|
|
630
627
|
}
|
|
631
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
632
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
633
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
628
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: AbpOAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
629
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.5", ngImport: i0, type: AbpOAuthModule }); }
|
|
630
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: AbpOAuthModule }); }
|
|
634
631
|
}
|
|
635
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
632
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: AbpOAuthModule, decorators: [{
|
|
636
633
|
type: NgModule
|
|
637
634
|
}] });
|
|
638
635
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abp-ng.oauth.mjs","sources":["../../../../packages/oauth/src/lib/providers/navigate-to-manage-profile.provider.ts","../../../../packages/oauth/src/lib/guards/oauth.guard.ts","../../../../packages/oauth/src/lib/handlers/oauth-configuration.handler.ts","../../../../packages/oauth/src/lib/interceptors/api.interceptor.ts","../../../../packages/oauth/src/lib/utils/oauth-storage.ts","../../../../packages/oauth/src/lib/utils/clear-o-auth-storage.ts","../../../../packages/oauth/src/lib/utils/storage.factory.ts","../../../../packages/oauth/src/lib/services/remember-me.service.ts","../../../../packages/oauth/src/lib/utils/auth-utils.ts","../../../../packages/oauth/src/lib/utils/check-access-token.ts","../../../../packages/oauth/src/lib/strategies/auth-flow-strategy.ts","../../../../packages/oauth/src/lib/strategies/auth-code-flow-strategy.ts","../../../../packages/oauth/src/lib/strategies/auth-password-flow-strategy.ts","../../../../packages/oauth/src/lib/tokens/auth-flow-strategy.ts","../../../../packages/oauth/src/lib/services/oauth.service.ts","../../../../packages/oauth/src/lib/services/oauth-error-filter.service.ts","../../../../packages/oauth/src/lib/providers/oauth-module-config.provider.ts","../../../../packages/oauth/src/lib/oauth.module.ts","../../../../packages/oauth/src/abp-ng.oauth.ts"],"sourcesContent":["import { inject, Provider } from '@angular/core';\r\nimport { EnvironmentService, NAVIGATE_TO_MANAGE_PROFILE } from '@abp/ng.core';\r\n\r\nexport const NavigateToManageProfileProvider: Provider = {\r\n provide: NAVIGATE_TO_MANAGE_PROFILE,\r\n useFactory: () => {\r\n const environment = inject(EnvironmentService);\r\n\r\n return () => {\r\n const env = environment.getEnvironment();\r\n if (!env.oAuthConfig) {\r\n console.warn('The oAuthConfig env is missing on environment.ts');\r\n return;\r\n }\r\n\r\n const { issuer } = env.oAuthConfig;\r\n const path = issuer.endsWith('/') ? issuer : `${issuer}/`;\r\n window.open(`${path}Account/Manage?returnUrl=${window.location.href}`, '_self');\r\n };\r\n },\r\n};\r\n","import { Injectable, inject } from '@angular/core';\r\nimport {\r\n UrlTree,\r\n ActivatedRouteSnapshot,\r\n RouterStateSnapshot,\r\n CanActivateFn,\r\n} from '@angular/router';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\n\r\nimport { AuthService, IAbpGuard } from '@abp/ng.core';\r\n\r\n/**\r\n * @deprecated Use `abpOAuthGuard` *function* instead.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AbpOAuthGuard implements IAbpGuard {\r\n protected readonly oAuthService = inject(OAuthService);\r\n protected readonly authService = inject(AuthService);\r\n\r\n canActivate(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n ): Observable<boolean> | boolean | UrlTree {\r\n const hasValidAccessToken = this.oAuthService.hasValidAccessToken();\r\n if (hasValidAccessToken) {\r\n return true;\r\n }\r\n\r\n const params = { returnUrl: state.url };\r\n this.authService.navigateToLogin(params);\r\n return false;\r\n }\r\n}\r\n\r\nexport const abpOAuthGuard: CanActivateFn = (\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n) => {\r\n const oAuthService = inject(OAuthService);\r\n const authService = inject(AuthService);\r\n\r\n const hasValidAccessToken = oAuthService.hasValidAccessToken();\r\n\r\n if (hasValidAccessToken) {\r\n return true;\r\n }\r\n\r\n const params = { returnUrl: state.url };\r\n authService.navigateToLogin(params);\r\n return false;\r\n};\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { AuthConfig, OAuthService } from \"angular-oauth2-oidc\";\r\nimport compare from 'just-compare';\r\nimport { filter, map } from 'rxjs/operators';\r\nimport { ABP, EnvironmentService, CORE_OPTIONS } from '@abp/ng.core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class OAuthConfigurationHandler {\r\n constructor(\r\n private oAuthService: OAuthService,\r\n private environmentService: EnvironmentService,\r\n @Inject(CORE_OPTIONS) private options: ABP.Root,\r\n ) {\r\n this.listenToSetEnvironment();\r\n }\r\n\r\n private listenToSetEnvironment() {\r\n this.environmentService\r\n .createOnUpdateStream(state => state)\r\n .pipe(\r\n map(environment => environment.oAuthConfig as AuthConfig),\r\n filter(config => !compare(config, this.options.environment.oAuthConfig)),\r\n )\r\n .subscribe((config) => {\r\n this.oAuthService.configure(config);\r\n });\r\n }\r\n}\r\n","import { HttpHandler, HttpHeaders, HttpRequest } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\nimport { finalize } from 'rxjs/operators';\r\nimport {\r\n HttpWaitService,\r\n IApiInterceptor,\r\n IS_EXTERNAL_REQUEST,\r\n SessionStateService,\r\n TENANT_KEY,\r\n} from '@abp/ng.core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class OAuthApiInterceptor implements IApiInterceptor {\r\n constructor(\r\n private oAuthService: OAuthService,\r\n private sessionState: SessionStateService,\r\n private httpWaitService: HttpWaitService,\r\n @Inject(TENANT_KEY) private tenantKey: string,\r\n ) {}\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler) {\r\n this.httpWaitService.addRequest(request);\r\n const isExternalRequest = request.context?.get(IS_EXTERNAL_REQUEST);\r\n const newRequest = isExternalRequest\r\n ? request\r\n : request.clone({\r\n setHeaders: this.getAdditionalHeaders(request.headers),\r\n });\r\n\r\n return next\r\n .handle(newRequest)\r\n .pipe(finalize(() => this.httpWaitService.deleteRequest(request)));\r\n }\r\n\r\n getAdditionalHeaders(existingHeaders?: HttpHeaders) {\r\n const headers = {} as any;\r\n\r\n const token = this.oAuthService.getAccessToken();\r\n if (!existingHeaders?.has('Authorization') && token) {\r\n headers['Authorization'] = `Bearer ${token}`;\r\n }\r\n\r\n const lang = this.sessionState.getLanguage();\r\n if (!existingHeaders?.has('Accept-Language') && lang) {\r\n headers['Accept-Language'] = lang;\r\n }\r\n\r\n const tenant = this.sessionState.getTenant();\r\n if (!existingHeaders?.has(this.tenantKey) && tenant?.id) {\r\n headers[this.tenantKey] = tenant.id;\r\n }\r\n\r\n headers['X-Requested-With'] = 'XMLHttpRequest';\r\n\r\n return headers;\r\n }\r\n}\r\n","export const oAuthStorage = localStorage;\r\n","import { OAuthStorage } from 'angular-oauth2-oidc';\r\nimport { oAuthStorage } from './oauth-storage';\r\n\r\nexport function clearOAuthStorage(storage: OAuthStorage = oAuthStorage) {\r\n const keys = [\r\n 'access_token',\r\n 'id_token',\r\n 'refresh_token',\r\n 'nonce',\r\n 'PKCE_verifier',\r\n 'expires_at',\r\n 'id_token_claims_obj',\r\n 'id_token_expires_at',\r\n 'id_token_stored_at',\r\n 'access_token_stored_at',\r\n 'granted_scopes',\r\n 'session_state',\r\n ];\r\n\r\n keys.forEach(key => storage.removeItem(key));\r\n}\r\n","import { OAuthStorage } from 'angular-oauth2-oidc';\r\nimport { oAuthStorage } from './oauth-storage';\r\n\r\nexport function storageFactory(): OAuthStorage {\r\n return oAuthStorage;\r\n}\r\n","import { AbpLocalStorageService } from '@abp/ng.core';\r\nimport { Injectable, inject } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RememberMeService {\r\n readonly #rememberMe = 'remember_me';\r\n protected readonly localStorageService = inject(AbpLocalStorageService);\r\n\r\n set(remember: boolean) {\r\n this.localStorageService.setItem(this.#rememberMe, JSON.stringify(remember));\r\n }\r\n\r\n remove() {\r\n this.localStorageService.removeItem(this.#rememberMe);\r\n }\r\n\r\n get() {\r\n return Boolean(JSON.parse(this.localStorageService.getItem(this.#rememberMe) || 'false'));\r\n }\r\n\r\n getFromToken(accessToken: string) {\r\n const tokenBody = accessToken.split('.')[1].replace(/-/g, '+').replace(/_/g, '/');\r\n const parsedToken = JSON.parse(atob(tokenBody));\r\n return Boolean(parsedToken[this.#rememberMe]);\r\n }\r\n}\r\n","import { Injector } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { pipe } from 'rxjs';\r\nimport { switchMap, tap } from 'rxjs/operators';\r\nimport {\r\n AuthService,\r\n ConfigStateService,\r\n LoginParams,\r\n PipeToLoginFn,\r\n} from '@abp/ng.core';\r\nimport { RememberMeService } from '../services/remember-me.service';\r\n\r\nexport const pipeToLogin: PipeToLoginFn = function (\r\n params: Pick<LoginParams, 'redirectUrl' | 'rememberMe'>,\r\n injector: Injector,\r\n) {\r\n const configState = injector.get(ConfigStateService);\r\n const router = injector.get(Router);\r\n const rememberMeService = injector.get(RememberMeService);\r\n const authService = injector.get(AuthService);\r\n return pipe(\r\n switchMap(() => configState.refreshAppState()),\r\n tap(() => {\r\n rememberMeService.set(\r\n params.rememberMe ||\r\n rememberMeService.get() ||\r\n rememberMeService.getFromToken(authService.getAccessToken())\r\n );\r\n if (params.redirectUrl) router.navigate([params.redirectUrl]);\r\n }),\r\n );\r\n};\r\n\r\n//Ref: https://github.com/manfredsteyer/angular-oauth2-oidc/issues/1214\r\nexport function isTokenExpired(expireDate: number): boolean {\r\n const currentDate = new Date().getTime();\r\n return expireDate < currentDate;\r\n}\r\n","import { Injector } from '@angular/core';\r\nimport { CheckAuthenticationStateFn, ConfigStateService } from '@abp/ng.core';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\nimport { clearOAuthStorage } from './clear-o-auth-storage';\r\n\r\nexport const checkAccessToken: CheckAuthenticationStateFn = function (injector: Injector) {\r\n const configState = injector.get(ConfigStateService);\r\n const oAuth = injector.get(OAuthService);\r\n if (oAuth.hasValidAccessToken() && !configState.getDeep('currentUser.id')) {\r\n clearOAuthStorage();\r\n }\r\n};\r\n","import { Injector } from '@angular/core';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { Params, Router } from '@angular/router';\r\n\r\nimport { Observable, of } from 'rxjs';\r\nimport { filter, map, switchMap, take, tap } from 'rxjs/operators';\r\nimport {\r\n AuthConfig,\r\n OAuthErrorEvent,\r\n OAuthService as OAuthService2,\r\n OAuthStorage,\r\n} from 'angular-oauth2-oidc';\r\n\r\nimport {\r\n AbpLocalStorageService,\r\n AbpWindowService,\r\n ConfigStateService,\r\n EnvironmentService,\r\n HttpErrorReporterService,\r\n LoginParams,\r\n SessionStateService,\r\n TENANT_KEY,\r\n} from '@abp/ng.core';\r\n\r\nimport { clearOAuthStorage } from '../utils/clear-o-auth-storage';\r\nimport { oAuthStorage } from '../utils/oauth-storage';\r\nimport { OAuthErrorFilterService } from '../services';\r\nimport { isTokenExpired } from '../utils';\r\nimport { RememberMeService } from '../services/remember-me.service';\r\n\r\nexport abstract class AuthFlowStrategy {\r\n abstract readonly isInternalAuth: boolean;\r\n\r\n protected httpErrorReporter: HttpErrorReporterService;\r\n protected environment: EnvironmentService;\r\n protected configState: ConfigStateService;\r\n protected oAuthService: OAuthService2;\r\n protected oAuthConfig!: AuthConfig;\r\n protected sessionState: SessionStateService;\r\n protected localStorageService: AbpLocalStorageService;\r\n protected rememberMeService: RememberMeService;\r\n protected windowService: AbpWindowService;\r\n protected tenantKey: string;\r\n protected router: Router;\r\n\r\n protected readonly oAuthErrorFilterService: OAuthErrorFilterService;\r\n\r\n abstract checkIfInternalAuth(queryParams?: Params): boolean;\r\n abstract navigateToLogin(queryParams?: Params): void;\r\n abstract logout(queryParams?: Params): Observable<any>;\r\n abstract login(params?: LoginParams | Params): Observable<any>;\r\n\r\n private catchError = (err: HttpErrorResponse) => {\r\n this.httpErrorReporter.reportError(err);\r\n return of(null);\r\n };\r\n\r\n constructor(protected injector: Injector) {\r\n this.httpErrorReporter = injector.get(HttpErrorReporterService);\r\n this.environment = injector.get(EnvironmentService);\r\n this.configState = injector.get(ConfigStateService);\r\n this.oAuthService = injector.get(OAuthService2);\r\n this.sessionState = injector.get(SessionStateService);\r\n this.localStorageService = injector.get(AbpLocalStorageService);\r\n this.oAuthConfig = this.environment.getEnvironment().oAuthConfig || {};\r\n this.tenantKey = injector.get(TENANT_KEY);\r\n this.router = injector.get(Router);\r\n this.oAuthErrorFilterService = injector.get(OAuthErrorFilterService);\r\n this.rememberMeService = injector.get(RememberMeService);\r\n this.windowService = injector.get(AbpWindowService);\r\n\r\n this.listenToOauthErrors();\r\n }\r\n\r\n async init(): Promise<any> {\r\n if (this.oAuthConfig.clientId) {\r\n const shouldClear = shouldStorageClear(this.oAuthConfig.clientId, oAuthStorage);\r\n if (shouldClear) clearOAuthStorage(oAuthStorage);\r\n }\r\n this.oAuthService.configure(this.oAuthConfig);\r\n this.oAuthService.events\r\n .pipe(filter(event => event.type === 'token_refresh_error'))\r\n .subscribe(() => this.navigateToLogin());\r\n this.navigateToPreviousUrl();\r\n return this.oAuthService\r\n .loadDiscoveryDocument()\r\n .then(() => {\r\n const isTokenExpire = isTokenExpired(this.oAuthService.getAccessTokenExpiration());\r\n if (isTokenExpire && this.oAuthService.getRefreshToken()) {\r\n return this.refreshToken();\r\n }\r\n\r\n return Promise.resolve();\r\n })\r\n .catch(this.catchError);\r\n }\r\n\r\n protected navigateToPreviousUrl(): void {\r\n const { responseType } = this.oAuthConfig;\r\n if (responseType === 'code') {\r\n this.oAuthService.events\r\n .pipe(\r\n filter(event => event.type === 'token_received' && !!this.oAuthService.state),\r\n take(1),\r\n map(() => {\r\n const redirectUri = decodeURIComponent(this.oAuthService.state);\r\n\r\n if (redirectUri && redirectUri !== '/') {\r\n return redirectUri;\r\n }\r\n\r\n return '/';\r\n }),\r\n switchMap(redirectUri =>\r\n this.configState.getOne$('currentUser').pipe(\r\n filter(user => !!user?.isAuthenticated),\r\n tap(() => this.router.navigateByUrl(redirectUri)),\r\n ),\r\n ),\r\n )\r\n .subscribe();\r\n }\r\n }\r\n\r\n protected refreshToken() {\r\n return this.oAuthService.refreshToken().catch(() => clearOAuthStorage());\r\n }\r\n\r\n protected listenToOauthErrors() {\r\n this.oAuthService.events\r\n .pipe(\r\n filter(event => event instanceof OAuthErrorEvent),\r\n tap((err: OAuthErrorEvent) => {\r\n const shouldSkip = this.oAuthErrorFilterService.run(err);\r\n if (!shouldSkip) {\r\n clearOAuthStorage();\r\n }\r\n }),\r\n switchMap(() => this.configState.refreshAppState()),\r\n )\r\n .subscribe();\r\n }\r\n}\r\n\r\nfunction shouldStorageClear(clientId: string, storage: OAuthStorage): boolean {\r\n const key = 'abpOAuthClientId';\r\n if (!storage.getItem(key)) {\r\n storage.setItem(key, clientId);\r\n return false;\r\n }\r\n\r\n const shouldClear = storage.getItem(key) !== clientId;\r\n if (shouldClear) storage.setItem(key, clientId);\r\n return shouldClear;\r\n}\r\n","import { noop } from '@abp/ng.core';\r\nimport { Params } from '@angular/router';\r\nimport { filter, from, of, take, tap } from 'rxjs';\r\nimport { AuthFlowStrategy } from './auth-flow-strategy';\r\nimport { isTokenExpired } from '../utils';\r\n\r\nexport class AuthCodeFlowStrategy extends AuthFlowStrategy {\r\n readonly isInternalAuth = false;\r\n\r\n async init() {\r\n this.checkRememberMeOption();\r\n this.listenToTokenReceived();\r\n\r\n return super\r\n .init()\r\n .then(() => this.oAuthService.tryLogin().catch(noop))\r\n .then(() => this.oAuthService.setupAutomaticSilentRefresh());\r\n }\r\n\r\n private checkRememberMeOption() {\r\n const accessToken = this.oAuthService.getAccessToken();\r\n const isTokenExpire = isTokenExpired(this.oAuthService.getAccessTokenExpiration());\r\n let rememberMe = this.rememberMeService.get();\r\n\r\n if (accessToken && !rememberMe) {\r\n const rememberMeValue = this.rememberMeService.getFromToken(accessToken);\r\n\r\n this.rememberMeService.set(!!rememberMeValue);\r\n }\r\n\r\n rememberMe = this.rememberMeService.get();\r\n if (accessToken && isTokenExpire && !rememberMe) {\r\n this.rememberMeService.remove();\r\n this.oAuthService.logOut();\r\n }\r\n }\r\n\r\n private getCultureParams(queryParams?: Params) {\r\n const lang = this.sessionState.getLanguage();\r\n const culture = { culture: lang, 'ui-culture': lang };\r\n return { ...(lang && culture), ...queryParams };\r\n }\r\n\r\n protected setUICulture() {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n this.configState.uiCultureFromAuthCodeFlow = urlParams.get('ui-culture');\r\n }\r\n\r\n protected replaceURLParams() {\r\n const location = this.windowService.window.location;\r\n const history = this.windowService.window.history;\r\n\r\n const href =\r\n location.origin +\r\n location.pathname +\r\n location.search\r\n .replace(/iss=[^&$]*/, '')\r\n .replace(/culture=[^&$]*/, '')\r\n .replace(/ui-culture=[^&$]*/, '') +\r\n location.hash;\r\n\r\n history.replaceState(null, '', href);\r\n }\r\n\r\n protected listenToTokenReceived() {\r\n this.oAuthService.events\r\n .pipe(\r\n filter(event => event.type === 'token_received'),\r\n tap(() => {\r\n this.setUICulture();\r\n this.replaceURLParams();\r\n }),\r\n take(1),\r\n )\r\n .subscribe();\r\n }\r\n\r\n navigateToLogin(queryParams?: Params) {\r\n let additionalState = '';\r\n if (queryParams?.returnUrl) {\r\n additionalState = queryParams.returnUrl;\r\n }\r\n\r\n const cultureParams = this.getCultureParams(queryParams);\r\n this.oAuthService.initCodeFlow(additionalState, cultureParams);\r\n }\r\n\r\n checkIfInternalAuth(queryParams?: Params) {\r\n this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams));\r\n return false;\r\n }\r\n\r\n logout(queryParams?: Params) {\r\n this.rememberMeService.remove();\r\n if (queryParams?.noRedirectToLogoutUrl) {\r\n this.router.navigate(['/']);\r\n return from(this.oAuthService.revokeTokenAndLogout(true));\r\n }\r\n return from(this.oAuthService.revokeTokenAndLogout(this.getCultureParams(queryParams)));\r\n }\r\n\r\n login(queryParams?: Params) {\r\n this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams));\r\n return of(null);\r\n }\r\n}\r\n","import { filter, switchMap, tap } from 'rxjs/operators';\r\nimport { OAuthInfoEvent } from 'angular-oauth2-oidc';\r\nimport { Params, Router } from '@angular/router';\r\nimport { from, Observable } from 'rxjs';\r\nimport { HttpHeaders } from '@angular/common/http';\r\nimport { AuthFlowStrategy } from './auth-flow-strategy';\r\nimport { isTokenExpired, pipeToLogin } from '../utils/auth-utils';\r\nimport { LoginParams } from '@abp/ng.core';\r\nimport { clearOAuthStorage } from '../utils/clear-o-auth-storage';\r\n\r\nexport class AuthPasswordFlowStrategy extends AuthFlowStrategy {\r\n readonly isInternalAuth = true;\r\n\r\n private listenToTokenExpiration() {\r\n this.oAuthService.events\r\n .pipe(\r\n filter(\r\n event => event instanceof OAuthInfoEvent &&\r\n event.type === 'token_expires' &&\r\n event.info === 'access_token'\r\n ),\r\n )\r\n .subscribe(() => {\r\n if (this.oAuthService.getRefreshToken()) {\r\n this.refreshToken();\r\n } else {\r\n this.oAuthService.logOut();\r\n this.rememberMeService.remove();\r\n this.configState.refreshAppState().subscribe();\r\n }\r\n });\r\n }\r\n\r\n async init() {\r\n this.checkRememberMeOption();\r\n\r\n return super.init().then(() => this.listenToTokenExpiration());\r\n }\r\n\r\n private checkRememberMeOption() {\r\n const accessToken = this.oAuthService.getAccessToken();\r\n const isTokenExpire = isTokenExpired(this.oAuthService.getAccessTokenExpiration());\r\n const rememberMe = this.rememberMeService.get();\r\n if (accessToken && isTokenExpire && !rememberMe) {\r\n this.rememberMeService.remove();\r\n this.oAuthService.logOut();\r\n }\r\n }\r\n\r\n navigateToLogin(queryParams?: Params) {\r\n const router = this.injector.get(Router);\r\n return router.navigate(['/account/login'], { queryParams });\r\n }\r\n\r\n checkIfInternalAuth() {\r\n return true;\r\n }\r\n\r\n login(params: LoginParams): Observable<any> {\r\n const tenant = this.sessionState.getTenant();\r\n\r\n return from(\r\n this.oAuthService.fetchTokenUsingPasswordFlow(\r\n params.username,\r\n params.password,\r\n new HttpHeaders({ ...(tenant && tenant.id && { [this.tenantKey]: tenant.id }) }),\r\n ),\r\n ).pipe(pipeToLogin(params, this.injector));\r\n }\r\n\r\n logout() {\r\n const router = this.injector.get(Router);\r\n const noRedirectToLogoutUrl = true;\r\n return from(this.oAuthService.revokeTokenAndLogout(noRedirectToLogoutUrl)).pipe(\r\n switchMap(() => this.configState.refreshAppState()),\r\n tap(() => {\r\n this.rememberMeService.remove();\r\n router.navigateByUrl('/');\r\n }),\r\n );\r\n }\r\n\r\n protected refreshToken() {\r\n return this.oAuthService.refreshToken().catch(() => {\r\n clearOAuthStorage();\r\n this.rememberMeService.remove();\r\n });\r\n }\r\n}\r\n","import { Injector } from '@angular/core';\r\nimport { AuthCodeFlowStrategy } from '../strategies/auth-code-flow-strategy';\r\nimport { AuthPasswordFlowStrategy } from '../strategies/auth-password-flow-strategy';\r\n\r\nexport const AUTH_FLOW_STRATEGY = {\r\n Code(injector: Injector) {\r\n return new AuthCodeFlowStrategy(injector);\r\n },\r\n Password(injector: Injector) {\r\n return new AuthPasswordFlowStrategy(injector);\r\n },\r\n};\r\n","import { Injectable, Injector } from '@angular/core';\r\nimport { Params } from '@angular/router';\r\nimport { from, Observable, lastValueFrom, EMPTY } from 'rxjs';\r\nimport { filter, map, switchMap, take, tap } from 'rxjs/operators';\r\nimport { AbpAuthResponse, IAuthService, LoginParams } from '@abp/ng.core';\r\nimport { AuthFlowStrategy } from '../strategies';\r\nimport { EnvironmentService } from '@abp/ng.core';\r\nimport { AUTH_FLOW_STRATEGY } from '../tokens/auth-flow-strategy';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\nimport { HttpHeaders } from '@angular/common/http';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AbpOAuthService implements IAuthService {\r\n private strategy!: AuthFlowStrategy;\r\n private readonly oAuthService: OAuthService;\r\n\r\n get oidc() {\r\n return this.oAuthService.oidc;\r\n }\r\n\r\n set oidc(value) {\r\n this.oAuthService.oidc = value;\r\n }\r\n\r\n get isInternalAuth() {\r\n return this.strategy.isInternalAuth;\r\n }\r\n\r\n constructor(protected injector: Injector) {\r\n this.oAuthService = this.injector.get(OAuthService);\r\n }\r\n\r\n async init() {\r\n const environmentService = this.injector.get(EnvironmentService);\r\n\r\n const result$ = environmentService.getEnvironment$().pipe(\r\n map(env => env?.oAuthConfig),\r\n filter(Boolean),\r\n tap(oAuthConfig => {\r\n this.strategy =\r\n oAuthConfig.responseType === 'code'\r\n ? AUTH_FLOW_STRATEGY.Code(this.injector)\r\n : AUTH_FLOW_STRATEGY.Password(this.injector);\r\n }),\r\n switchMap(() => from(this.strategy.init())),\r\n take(1),\r\n );\r\n\r\n return await lastValueFrom(result$);\r\n }\r\n\r\n logout(queryParams?: Params): Observable<any> {\r\n if (!this.strategy) {\r\n return EMPTY;\r\n }\r\n\r\n return this.strategy.logout(queryParams);\r\n }\r\n\r\n navigateToLogin(queryParams?: Params) {\r\n this.strategy.navigateToLogin(queryParams);\r\n }\r\n\r\n login(params: LoginParams) {\r\n return this.strategy.login(params);\r\n }\r\n\r\n get isAuthenticated(): boolean {\r\n return this.oAuthService.hasValidAccessToken();\r\n }\r\n\r\n loginUsingGrant(\r\n grantType: string,\r\n parameters: object,\r\n headers?: HttpHeaders,\r\n ): Promise<AbpAuthResponse> {\r\n const { clientId: client_id, dummyClientSecret: client_secret } = this.oAuthService;\r\n const access_token = this.oAuthService.getAccessToken();\r\n const p = {\r\n access_token,\r\n grant_type: grantType,\r\n client_id,\r\n ...parameters,\r\n };\r\n\r\n if (client_secret) {\r\n p['client_secret'] = client_secret;\r\n }\r\n\r\n return this.oAuthService.fetchTokenUsingGrant(grantType, p, headers);\r\n }\r\n\r\n getRefreshToken(): string {\r\n return this.oAuthService.getRefreshToken();\r\n }\r\n\r\n getAccessToken(): string {\r\n return this.oAuthService.getAccessToken();\r\n }\r\n\r\n refreshToken(): Promise<AbpAuthResponse> {\r\n return this.oAuthService.refreshToken();\r\n }\r\n\r\n getAccessTokenExpiration(): number {\r\n return this.oAuthService.getAccessTokenExpiration();\r\n }\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\nimport { OAuthErrorEvent } from 'angular-oauth2-oidc';\r\nimport { AbstractAuthErrorFilter, AuthErrorFilter } from '@abp/ng.core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class OAuthErrorFilterService extends AbstractAuthErrorFilter<\r\n AuthErrorFilter<OAuthErrorEvent>,\r\n OAuthErrorEvent\r\n> {\r\n protected readonly _filters = signal<Array<AuthErrorFilter<OAuthErrorEvent>>>([]);\r\n readonly filters = this._filters.asReadonly();\r\n\r\n get(id: string): AuthErrorFilter<OAuthErrorEvent> {\r\n return this._filters().find(({ id: _id }) => _id === id);\r\n }\r\n\r\n add(filter: AuthErrorFilter<OAuthErrorEvent>): void {\r\n this._filters.update(items => [...items, filter]);\r\n }\r\n\r\n patch(item: Partial<AuthErrorFilter<OAuthErrorEvent>>): void {\r\n const _item = this.filters().find(({ id }) => id === item.id);\r\n if (!_item) {\r\n return;\r\n }\r\n\r\n Object.assign(_item, item);\r\n }\r\n\r\n remove(id: string): void {\r\n const item = this.filters().find(({ id: _id }) => _id === id);\r\n if (!item) {\r\n return;\r\n }\r\n\r\n this._filters.update(items => items.filter(({ id: _id }) => _id !== id));\r\n }\r\n\r\n run(event: OAuthErrorEvent): boolean {\r\n return this.filters()\r\n .filter(({ executable }) => !!executable)\r\n .map(({ execute }) => execute(event))\r\n .some(item => item);\r\n }\r\n}\r\n","import {\r\n AuthService,\r\n AuthGuard,\r\n authGuard,\r\n ApiInterceptor,\r\n PIPE_TO_LOGIN_FN_KEY,\r\n CHECK_AUTHENTICATION_STATE_FN_KEY,\r\n AbpLocalStorageService,\r\n AuthErrorFilterService,\r\n noop,\r\n} from '@abp/ng.core';\r\nimport { APP_INITIALIZER, Provider, makeEnvironmentProviders } from '@angular/core';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc';\r\nimport { AbpOAuthGuard, abpOAuthGuard } from '../guards';\r\nimport { OAuthConfigurationHandler } from '../handlers';\r\nimport { OAuthApiInterceptor } from '../interceptors';\r\nimport { AbpOAuthService, OAuthErrorFilterService } from '../services';\r\nimport { pipeToLogin, checkAccessToken } from '../utils';\r\nimport { NavigateToManageProfileProvider } from './navigate-to-manage-profile.provider';\r\n\r\nexport function provideAbpOAuth() {\r\n const providers = [\r\n {\r\n provide: AuthService,\r\n useClass: AbpOAuthService,\r\n },\r\n {\r\n provide: AuthGuard,\r\n useClass: AbpOAuthGuard,\r\n },\r\n {\r\n provide: authGuard,\r\n useValue: abpOAuthGuard,\r\n },\r\n {\r\n provide: ApiInterceptor,\r\n useClass: OAuthApiInterceptor,\r\n },\r\n {\r\n provide: PIPE_TO_LOGIN_FN_KEY,\r\n useValue: pipeToLogin,\r\n },\r\n {\r\n provide: CHECK_AUTHENTICATION_STATE_FN_KEY,\r\n useValue: checkAccessToken,\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useExisting: ApiInterceptor,\r\n multi: true,\r\n },\r\n NavigateToManageProfileProvider,\r\n {\r\n provide: APP_INITIALIZER,\r\n multi: true,\r\n deps: [OAuthConfigurationHandler],\r\n useFactory: noop,\r\n },\r\n OAuthModule.forRoot().providers as Provider[],\r\n { provide: OAuthStorage, useClass: AbpLocalStorageService },\r\n { provide: AuthErrorFilterService, useExisting: OAuthErrorFilterService },\r\n ];\r\n\r\n return makeEnvironmentProviders(providers);\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { provideAbpOAuth } from './providers';\r\n\r\n/**\r\n * @deprecated AbpOAuthModule is deprecated use `provideAbpOAuth` *function* instead.\r\n */\r\n@NgModule()\r\nexport class AbpOAuthModule {\r\n static forRoot(): ModuleWithProviders<AbpOAuthModule> {\r\n return {\r\n ngModule: AbpOAuthModule,\r\n providers: [provideAbpOAuth()],\r\n };\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["OAuthService2","filter","tap","take"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"abp-ng.oauth.mjs","sources":["../../../../packages/oauth/src/lib/providers/navigate-to-manage-profile.provider.ts","../../../../packages/oauth/src/lib/guards/oauth.guard.ts","../../../../packages/oauth/src/lib/handlers/oauth-configuration.handler.ts","../../../../packages/oauth/src/lib/interceptors/api.interceptor.ts","../../../../packages/oauth/src/lib/utils/oauth-storage.ts","../../../../packages/oauth/src/lib/utils/clear-o-auth-storage.ts","../../../../packages/oauth/src/lib/utils/storage.factory.ts","../../../../packages/oauth/src/lib/services/remember-me.service.ts","../../../../packages/oauth/src/lib/utils/auth-utils.ts","../../../../packages/oauth/src/lib/utils/check-access-token.ts","../../../../packages/oauth/src/lib/strategies/auth-flow-strategy.ts","../../../../packages/oauth/src/lib/strategies/auth-code-flow-strategy.ts","../../../../packages/oauth/src/lib/strategies/auth-password-flow-strategy.ts","../../../../packages/oauth/src/lib/tokens/auth-flow-strategy.ts","../../../../packages/oauth/src/lib/services/oauth.service.ts","../../../../packages/oauth/src/lib/services/oauth-error-filter.service.ts","../../../../packages/oauth/src/lib/providers/oauth-module-config.provider.ts","../../../../packages/oauth/src/lib/oauth.module.ts","../../../../packages/oauth/src/abp-ng.oauth.ts"],"sourcesContent":["import { inject, Provider } from '@angular/core';\r\nimport { EnvironmentService, NAVIGATE_TO_MANAGE_PROFILE } from '@abp/ng.core';\r\n\r\nexport const NavigateToManageProfileProvider: Provider = {\r\n provide: NAVIGATE_TO_MANAGE_PROFILE,\r\n useFactory: () => {\r\n const environment = inject(EnvironmentService);\r\n\r\n return () => {\r\n const env = environment.getEnvironment();\r\n if (!env.oAuthConfig) {\r\n console.warn('The oAuthConfig env is missing on environment.ts');\r\n return;\r\n }\r\n\r\n const { issuer } = env.oAuthConfig;\r\n const path = issuer.endsWith('/') ? issuer : `${issuer}/`;\r\n window.open(`${path}Account/Manage?returnUrl=${window.location.href}`, '_self');\r\n };\r\n },\r\n};\r\n","import { Injectable, inject } from '@angular/core';\r\nimport {\r\n UrlTree,\r\n ActivatedRouteSnapshot,\r\n RouterStateSnapshot,\r\n CanActivateFn,\r\n} from '@angular/router';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\n\r\nimport { AuthService, IAbpGuard } from '@abp/ng.core';\r\n\r\n/**\r\n * @deprecated Use `abpOAuthGuard` *function* instead.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AbpOAuthGuard implements IAbpGuard {\r\n protected readonly oAuthService = inject(OAuthService);\r\n protected readonly authService = inject(AuthService);\r\n\r\n canActivate(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n ): Observable<boolean> | boolean | UrlTree {\r\n const hasValidAccessToken = this.oAuthService.hasValidAccessToken();\r\n if (hasValidAccessToken) {\r\n return true;\r\n }\r\n\r\n const params = { returnUrl: state.url };\r\n this.authService.navigateToLogin(params);\r\n return false;\r\n }\r\n}\r\n\r\nexport const abpOAuthGuard: CanActivateFn = (\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n) => {\r\n const oAuthService = inject(OAuthService);\r\n const authService = inject(AuthService);\r\n\r\n const hasValidAccessToken = oAuthService.hasValidAccessToken();\r\n\r\n if (hasValidAccessToken) {\r\n return true;\r\n }\r\n\r\n const params = { returnUrl: state.url };\r\n authService.navigateToLogin(params);\r\n return false;\r\n};\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { AuthConfig, OAuthService } from \"angular-oauth2-oidc\";\r\nimport compare from 'just-compare';\r\nimport { filter, map } from 'rxjs/operators';\r\nimport { ABP, EnvironmentService, CORE_OPTIONS } from '@abp/ng.core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class OAuthConfigurationHandler {\r\n constructor(\r\n private oAuthService: OAuthService,\r\n private environmentService: EnvironmentService,\r\n @Inject(CORE_OPTIONS) private options: ABP.Root,\r\n ) {\r\n this.listenToSetEnvironment();\r\n }\r\n\r\n private listenToSetEnvironment() {\r\n this.environmentService\r\n .createOnUpdateStream(state => state)\r\n .pipe(\r\n map(environment => environment.oAuthConfig as AuthConfig),\r\n filter(config => !compare(config, this.options.environment.oAuthConfig)),\r\n )\r\n .subscribe((config) => {\r\n this.oAuthService.configure(config);\r\n });\r\n }\r\n}\r\n","import { HttpHandler, HttpHeaders, HttpRequest } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\nimport { finalize } from 'rxjs/operators';\r\nimport {\r\n HttpWaitService,\r\n IApiInterceptor,\r\n IS_EXTERNAL_REQUEST,\r\n SessionStateService,\r\n TENANT_KEY,\r\n} from '@abp/ng.core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class OAuthApiInterceptor implements IApiInterceptor {\r\n constructor(\r\n private oAuthService: OAuthService,\r\n private sessionState: SessionStateService,\r\n private httpWaitService: HttpWaitService,\r\n @Inject(TENANT_KEY) private tenantKey: string,\r\n ) {}\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler) {\r\n this.httpWaitService.addRequest(request);\r\n const isExternalRequest = request.context?.get(IS_EXTERNAL_REQUEST);\r\n const newRequest = isExternalRequest\r\n ? request\r\n : request.clone({\r\n setHeaders: this.getAdditionalHeaders(request.headers),\r\n });\r\n\r\n return next\r\n .handle(newRequest)\r\n .pipe(finalize(() => this.httpWaitService.deleteRequest(request)));\r\n }\r\n\r\n getAdditionalHeaders(existingHeaders?: HttpHeaders) {\r\n const headers = {} as any;\r\n\r\n const token = this.oAuthService.getAccessToken();\r\n if (!existingHeaders?.has('Authorization') && token) {\r\n headers['Authorization'] = `Bearer ${token}`;\r\n }\r\n\r\n const lang = this.sessionState.getLanguage();\r\n if (!existingHeaders?.has('Accept-Language') && lang) {\r\n headers['Accept-Language'] = lang;\r\n }\r\n\r\n const tenant = this.sessionState.getTenant();\r\n if (!existingHeaders?.has(this.tenantKey) && tenant?.id) {\r\n headers[this.tenantKey] = tenant.id;\r\n }\r\n\r\n headers['X-Requested-With'] = 'XMLHttpRequest';\r\n\r\n return headers;\r\n }\r\n}\r\n","export const oAuthStorage = localStorage;\r\n","import { OAuthStorage } from 'angular-oauth2-oidc';\r\nimport { oAuthStorage } from './oauth-storage';\r\n\r\nexport function clearOAuthStorage(storage: OAuthStorage = oAuthStorage) {\r\n const keys = [\r\n 'access_token',\r\n 'id_token',\r\n 'refresh_token',\r\n 'nonce',\r\n 'PKCE_verifier',\r\n 'expires_at',\r\n 'id_token_claims_obj',\r\n 'id_token_expires_at',\r\n 'id_token_stored_at',\r\n 'access_token_stored_at',\r\n 'granted_scopes',\r\n 'session_state',\r\n ];\r\n\r\n keys.forEach(key => storage.removeItem(key));\r\n}\r\n","import { OAuthStorage } from 'angular-oauth2-oidc';\r\nimport { oAuthStorage } from './oauth-storage';\r\n\r\nexport function storageFactory(): OAuthStorage {\r\n return oAuthStorage;\r\n}\r\n","import { AbpLocalStorageService } from '@abp/ng.core';\r\nimport { Injectable, inject } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RememberMeService {\r\n readonly #rememberMe = 'remember_me';\r\n protected readonly localStorageService = inject(AbpLocalStorageService);\r\n\r\n set(remember: boolean) {\r\n this.localStorageService.setItem(this.#rememberMe, JSON.stringify(remember));\r\n }\r\n\r\n remove() {\r\n this.localStorageService.removeItem(this.#rememberMe);\r\n }\r\n\r\n get() {\r\n return Boolean(JSON.parse(this.localStorageService.getItem(this.#rememberMe) || 'false'));\r\n }\r\n\r\n getFromToken(accessToken: string) {\r\n const tokenBody = accessToken.split('.')[1].replace(/-/g, '+').replace(/_/g, '/');\r\n const parsedToken = JSON.parse(atob(tokenBody));\r\n return Boolean(parsedToken[this.#rememberMe]);\r\n }\r\n}\r\n","import { Injector } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { pipe } from 'rxjs';\r\nimport { switchMap, tap } from 'rxjs/operators';\r\nimport {\r\n AuthService,\r\n ConfigStateService,\r\n LoginParams,\r\n PipeToLoginFn,\r\n} from '@abp/ng.core';\r\nimport { RememberMeService } from '../services/remember-me.service';\r\n\r\nexport const pipeToLogin: PipeToLoginFn = function (\r\n params: Pick<LoginParams, 'redirectUrl' | 'rememberMe'>,\r\n injector: Injector,\r\n) {\r\n const configState = injector.get(ConfigStateService);\r\n const router = injector.get(Router);\r\n const rememberMeService = injector.get(RememberMeService);\r\n const authService = injector.get(AuthService);\r\n return pipe(\r\n switchMap(() => configState.refreshAppState()),\r\n tap(() => {\r\n rememberMeService.set(\r\n params.rememberMe ||\r\n rememberMeService.get() ||\r\n rememberMeService.getFromToken(authService.getAccessToken())\r\n );\r\n if (params.redirectUrl) router.navigate([params.redirectUrl]);\r\n }),\r\n );\r\n};\r\n\r\n//Ref: https://github.com/manfredsteyer/angular-oauth2-oidc/issues/1214\r\nexport function isTokenExpired(expireDate: number): boolean {\r\n const currentDate = new Date().getTime();\r\n return expireDate < currentDate;\r\n}\r\n","import { Injector } from '@angular/core';\r\nimport { CheckAuthenticationStateFn, ConfigStateService } from '@abp/ng.core';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\nimport { clearOAuthStorage } from './clear-o-auth-storage';\r\n\r\nexport const checkAccessToken: CheckAuthenticationStateFn = function (injector: Injector) {\r\n const configState = injector.get(ConfigStateService);\r\n const oAuth = injector.get(OAuthService);\r\n if (oAuth.hasValidAccessToken() && !configState.getDeep('currentUser.id')) {\r\n clearOAuthStorage();\r\n }\r\n};\r\n","import { Injector } from '@angular/core';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { Params, Router } from '@angular/router';\r\n\r\nimport { Observable, of } from 'rxjs';\r\nimport { filter, map, switchMap, take, tap } from 'rxjs/operators';\r\nimport {\r\n AuthConfig,\r\n OAuthErrorEvent,\r\n OAuthService as OAuthService2,\r\n OAuthStorage,\r\n} from 'angular-oauth2-oidc';\r\n\r\nimport {\r\n AbpLocalStorageService,\r\n AbpWindowService,\r\n ConfigStateService,\r\n EnvironmentService,\r\n HttpErrorReporterService,\r\n LoginParams,\r\n SessionStateService,\r\n TENANT_KEY,\r\n} from '@abp/ng.core';\r\n\r\nimport { clearOAuthStorage } from '../utils/clear-o-auth-storage';\r\nimport { oAuthStorage } from '../utils/oauth-storage';\r\nimport { OAuthErrorFilterService } from '../services';\r\nimport { isTokenExpired } from '../utils';\r\nimport { RememberMeService } from '../services/remember-me.service';\r\n\r\nexport abstract class AuthFlowStrategy {\r\n abstract readonly isInternalAuth: boolean;\r\n\r\n protected httpErrorReporter: HttpErrorReporterService;\r\n protected environment: EnvironmentService;\r\n protected configState: ConfigStateService;\r\n protected oAuthService: OAuthService2;\r\n protected oAuthConfig!: AuthConfig;\r\n protected sessionState: SessionStateService;\r\n protected localStorageService: AbpLocalStorageService;\r\n protected rememberMeService: RememberMeService;\r\n protected windowService: AbpWindowService;\r\n protected tenantKey: string;\r\n protected router: Router;\r\n\r\n protected readonly oAuthErrorFilterService: OAuthErrorFilterService;\r\n\r\n abstract checkIfInternalAuth(queryParams?: Params): boolean;\r\n abstract navigateToLogin(queryParams?: Params): void;\r\n abstract logout(queryParams?: Params): Observable<any>;\r\n abstract login(params?: LoginParams | Params): Observable<any>;\r\n\r\n private catchError = (err: HttpErrorResponse) => {\r\n this.httpErrorReporter.reportError(err);\r\n return of(null);\r\n };\r\n\r\n constructor(protected injector: Injector) {\r\n this.httpErrorReporter = injector.get(HttpErrorReporterService);\r\n this.environment = injector.get(EnvironmentService);\r\n this.configState = injector.get(ConfigStateService);\r\n this.oAuthService = injector.get(OAuthService2);\r\n this.sessionState = injector.get(SessionStateService);\r\n this.localStorageService = injector.get(AbpLocalStorageService);\r\n this.oAuthConfig = this.environment.getEnvironment().oAuthConfig || {};\r\n this.tenantKey = injector.get(TENANT_KEY);\r\n this.router = injector.get(Router);\r\n this.oAuthErrorFilterService = injector.get(OAuthErrorFilterService);\r\n this.rememberMeService = injector.get(RememberMeService);\r\n this.windowService = injector.get(AbpWindowService);\r\n\r\n this.listenToOauthErrors();\r\n }\r\n\r\n async init(): Promise<any> {\r\n if (this.oAuthConfig.clientId) {\r\n const shouldClear = shouldStorageClear(this.oAuthConfig.clientId, oAuthStorage);\r\n if (shouldClear) clearOAuthStorage(oAuthStorage);\r\n }\r\n this.oAuthService.configure(this.oAuthConfig);\r\n this.oAuthService.events\r\n .pipe(filter(event => event.type === 'token_refresh_error'))\r\n .subscribe(() => this.navigateToLogin());\r\n this.navigateToPreviousUrl();\r\n return this.oAuthService\r\n .loadDiscoveryDocument()\r\n .then(() => {\r\n const isTokenExpire = isTokenExpired(this.oAuthService.getAccessTokenExpiration());\r\n if (isTokenExpire && this.oAuthService.getRefreshToken()) {\r\n return this.refreshToken();\r\n }\r\n\r\n return Promise.resolve();\r\n })\r\n .catch(this.catchError);\r\n }\r\n\r\n protected navigateToPreviousUrl(): void {\r\n const { responseType } = this.oAuthConfig;\r\n if (responseType === 'code') {\r\n this.oAuthService.events\r\n .pipe(\r\n filter(event => event.type === 'token_received' && !!this.oAuthService.state),\r\n take(1),\r\n map(() => {\r\n const redirectUri = decodeURIComponent(this.oAuthService.state);\r\n\r\n if (redirectUri && redirectUri !== '/') {\r\n return redirectUri;\r\n }\r\n\r\n return '/';\r\n }),\r\n switchMap(redirectUri =>\r\n this.configState.getOne$('currentUser').pipe(\r\n filter(user => !!user?.isAuthenticated),\r\n tap(() => this.router.navigateByUrl(redirectUri)),\r\n ),\r\n ),\r\n )\r\n .subscribe();\r\n }\r\n }\r\n\r\n protected refreshToken() {\r\n return this.oAuthService.refreshToken().catch(() => clearOAuthStorage());\r\n }\r\n\r\n protected listenToOauthErrors() {\r\n this.oAuthService.events\r\n .pipe(\r\n filter(event => event instanceof OAuthErrorEvent),\r\n tap((err: OAuthErrorEvent) => {\r\n const shouldSkip = this.oAuthErrorFilterService.run(err);\r\n if (!shouldSkip) {\r\n clearOAuthStorage();\r\n }\r\n }),\r\n switchMap(() => this.configState.refreshAppState()),\r\n )\r\n .subscribe();\r\n }\r\n}\r\n\r\nfunction shouldStorageClear(clientId: string, storage: OAuthStorage): boolean {\r\n const key = 'abpOAuthClientId';\r\n if (!storage.getItem(key)) {\r\n storage.setItem(key, clientId);\r\n return false;\r\n }\r\n\r\n const shouldClear = storage.getItem(key) !== clientId;\r\n if (shouldClear) storage.setItem(key, clientId);\r\n return shouldClear;\r\n}\r\n","import { noop } from '@abp/ng.core';\r\nimport { Params } from '@angular/router';\r\nimport { filter, from, of, take, tap } from 'rxjs';\r\nimport { AuthFlowStrategy } from './auth-flow-strategy';\r\nimport { isTokenExpired } from '../utils';\r\n\r\nexport class AuthCodeFlowStrategy extends AuthFlowStrategy {\r\n readonly isInternalAuth = false;\r\n\r\n async init() {\r\n this.checkRememberMeOption();\r\n this.listenToTokenReceived();\r\n\r\n return super\r\n .init()\r\n .then(() => this.oAuthService.tryLogin().catch(noop))\r\n .then(() => this.oAuthService.setupAutomaticSilentRefresh());\r\n }\r\n\r\n private checkRememberMeOption() {\r\n const accessToken = this.oAuthService.getAccessToken();\r\n const isTokenExpire = isTokenExpired(this.oAuthService.getAccessTokenExpiration());\r\n let rememberMe = this.rememberMeService.get();\r\n\r\n if (accessToken && !rememberMe) {\r\n const rememberMeValue = this.rememberMeService.getFromToken(accessToken);\r\n\r\n this.rememberMeService.set(!!rememberMeValue);\r\n }\r\n\r\n rememberMe = this.rememberMeService.get();\r\n if (accessToken && isTokenExpire && !rememberMe) {\r\n this.rememberMeService.remove();\r\n this.oAuthService.logOut();\r\n }\r\n }\r\n\r\n private getCultureParams(queryParams?: Params) {\r\n const lang = this.sessionState.getLanguage();\r\n const culture = { culture: lang, 'ui-culture': lang };\r\n return { ...(lang && culture), ...queryParams };\r\n }\r\n\r\n protected setUICulture() {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n this.configState.uiCultureFromAuthCodeFlow = urlParams.get('ui-culture');\r\n }\r\n\r\n protected replaceURLParams() {\r\n const location = this.windowService.window.location;\r\n const history = this.windowService.window.history;\r\n\r\n const href =\r\n location.origin +\r\n location.pathname +\r\n location.search\r\n .replace(/iss=[^&$]*/, '')\r\n .replace(/culture=[^&$]*/, '')\r\n .replace(/ui-culture=[^&$]*/, '') +\r\n location.hash;\r\n\r\n history.replaceState(null, '', href);\r\n }\r\n\r\n protected listenToTokenReceived() {\r\n this.oAuthService.events\r\n .pipe(\r\n filter(event => event.type === 'token_received'),\r\n tap(() => {\r\n this.setUICulture();\r\n this.replaceURLParams();\r\n }),\r\n take(1),\r\n )\r\n .subscribe();\r\n }\r\n\r\n navigateToLogin(queryParams?: Params) {\r\n let additionalState = '';\r\n if (queryParams?.returnUrl) {\r\n additionalState = queryParams.returnUrl;\r\n }\r\n\r\n const cultureParams = this.getCultureParams(queryParams);\r\n this.oAuthService.initCodeFlow(additionalState, cultureParams);\r\n }\r\n\r\n checkIfInternalAuth(queryParams?: Params) {\r\n this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams));\r\n return false;\r\n }\r\n\r\n logout(queryParams?: Params) {\r\n this.rememberMeService.remove();\r\n if (queryParams?.noRedirectToLogoutUrl) {\r\n this.router.navigate(['/']);\r\n return from(this.oAuthService.revokeTokenAndLogout(true));\r\n }\r\n return from(this.oAuthService.revokeTokenAndLogout(this.getCultureParams(queryParams)));\r\n }\r\n\r\n login(queryParams?: Params) {\r\n this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams));\r\n return of(null);\r\n }\r\n}\r\n","import { filter, switchMap, tap } from 'rxjs/operators';\r\nimport { OAuthInfoEvent } from 'angular-oauth2-oidc';\r\nimport { Params, Router } from '@angular/router';\r\nimport { from, Observable } from 'rxjs';\r\nimport { HttpHeaders } from '@angular/common/http';\r\nimport { AuthFlowStrategy } from './auth-flow-strategy';\r\nimport { isTokenExpired, pipeToLogin } from '../utils/auth-utils';\r\nimport { LoginParams } from '@abp/ng.core';\r\nimport { clearOAuthStorage } from '../utils/clear-o-auth-storage';\r\n\r\nexport class AuthPasswordFlowStrategy extends AuthFlowStrategy {\r\n readonly isInternalAuth = true;\r\n\r\n private listenToTokenExpiration() {\r\n this.oAuthService.events\r\n .pipe(\r\n filter(\r\n event => event instanceof OAuthInfoEvent &&\r\n event.type === 'token_expires' &&\r\n event.info === 'access_token'\r\n ),\r\n )\r\n .subscribe(() => {\r\n if (this.oAuthService.getRefreshToken()) {\r\n this.refreshToken();\r\n } else {\r\n this.oAuthService.logOut();\r\n this.rememberMeService.remove();\r\n this.configState.refreshAppState().subscribe();\r\n }\r\n });\r\n }\r\n\r\n async init() {\r\n this.checkRememberMeOption();\r\n\r\n return super.init().then(() => this.listenToTokenExpiration());\r\n }\r\n\r\n private checkRememberMeOption() {\r\n const accessToken = this.oAuthService.getAccessToken();\r\n const isTokenExpire = isTokenExpired(this.oAuthService.getAccessTokenExpiration());\r\n const rememberMe = this.rememberMeService.get();\r\n if (accessToken && isTokenExpire && !rememberMe) {\r\n this.rememberMeService.remove();\r\n this.oAuthService.logOut();\r\n }\r\n }\r\n\r\n navigateToLogin(queryParams?: Params) {\r\n const router = this.injector.get(Router);\r\n return router.navigate(['/account/login'], { queryParams });\r\n }\r\n\r\n checkIfInternalAuth() {\r\n return true;\r\n }\r\n\r\n login(params: LoginParams): Observable<any> {\r\n const tenant = this.sessionState.getTenant();\r\n\r\n return from(\r\n this.oAuthService.fetchTokenUsingPasswordFlow(\r\n params.username,\r\n params.password,\r\n new HttpHeaders({ ...(tenant && tenant.id && { [this.tenantKey]: tenant.id }) }),\r\n ),\r\n ).pipe(pipeToLogin(params, this.injector));\r\n }\r\n\r\n logout() {\r\n const router = this.injector.get(Router);\r\n const noRedirectToLogoutUrl = true;\r\n return from(this.oAuthService.revokeTokenAndLogout(noRedirectToLogoutUrl)).pipe(\r\n switchMap(() => this.configState.refreshAppState()),\r\n tap(() => {\r\n this.rememberMeService.remove();\r\n router.navigateByUrl('/');\r\n }),\r\n );\r\n }\r\n\r\n protected refreshToken() {\r\n return this.oAuthService.refreshToken().catch(() => {\r\n clearOAuthStorage();\r\n this.rememberMeService.remove();\r\n });\r\n }\r\n}\r\n","import { Injector } from '@angular/core';\r\nimport { AuthCodeFlowStrategy } from '../strategies/auth-code-flow-strategy';\r\nimport { AuthPasswordFlowStrategy } from '../strategies/auth-password-flow-strategy';\r\n\r\nexport const AUTH_FLOW_STRATEGY = {\r\n Code(injector: Injector) {\r\n return new AuthCodeFlowStrategy(injector);\r\n },\r\n Password(injector: Injector) {\r\n return new AuthPasswordFlowStrategy(injector);\r\n },\r\n};\r\n","import { Injectable, Injector } from '@angular/core';\r\nimport { Params } from '@angular/router';\r\nimport { from, Observable, lastValueFrom, EMPTY } from 'rxjs';\r\nimport { filter, map, switchMap, take, tap } from 'rxjs/operators';\r\nimport { AbpAuthResponse, IAuthService, LoginParams } from '@abp/ng.core';\r\nimport { AuthFlowStrategy } from '../strategies';\r\nimport { EnvironmentService } from '@abp/ng.core';\r\nimport { AUTH_FLOW_STRATEGY } from '../tokens/auth-flow-strategy';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\nimport { HttpHeaders } from '@angular/common/http';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AbpOAuthService implements IAuthService {\r\n private strategy!: AuthFlowStrategy;\r\n private readonly oAuthService: OAuthService;\r\n\r\n get oidc() {\r\n return this.oAuthService.oidc;\r\n }\r\n\r\n set oidc(value) {\r\n this.oAuthService.oidc = value;\r\n }\r\n\r\n get isInternalAuth() {\r\n return this.strategy.isInternalAuth;\r\n }\r\n\r\n constructor(protected injector: Injector) {\r\n this.oAuthService = this.injector.get(OAuthService);\r\n }\r\n\r\n async init() {\r\n const environmentService = this.injector.get(EnvironmentService);\r\n\r\n const result$ = environmentService.getEnvironment$().pipe(\r\n map(env => env?.oAuthConfig),\r\n filter(Boolean),\r\n tap(oAuthConfig => {\r\n this.strategy =\r\n oAuthConfig.responseType === 'code'\r\n ? AUTH_FLOW_STRATEGY.Code(this.injector)\r\n : AUTH_FLOW_STRATEGY.Password(this.injector);\r\n }),\r\n switchMap(() => from(this.strategy.init())),\r\n take(1),\r\n );\r\n\r\n return await lastValueFrom(result$);\r\n }\r\n\r\n logout(queryParams?: Params): Observable<any> {\r\n if (!this.strategy) {\r\n return EMPTY;\r\n }\r\n\r\n return this.strategy.logout(queryParams);\r\n }\r\n\r\n navigateToLogin(queryParams?: Params) {\r\n this.strategy.navigateToLogin(queryParams);\r\n }\r\n\r\n login(params: LoginParams) {\r\n return this.strategy.login(params);\r\n }\r\n\r\n get isAuthenticated(): boolean {\r\n return this.oAuthService.hasValidAccessToken();\r\n }\r\n\r\n loginUsingGrant(\r\n grantType: string,\r\n parameters: object,\r\n headers?: HttpHeaders,\r\n ): Promise<AbpAuthResponse> {\r\n const { clientId: client_id, dummyClientSecret: client_secret } = this.oAuthService;\r\n const access_token = this.oAuthService.getAccessToken();\r\n const p = {\r\n access_token,\r\n grant_type: grantType,\r\n client_id,\r\n ...parameters,\r\n };\r\n\r\n if (client_secret) {\r\n p['client_secret'] = client_secret;\r\n }\r\n\r\n return this.oAuthService.fetchTokenUsingGrant(grantType, p, headers);\r\n }\r\n\r\n getRefreshToken(): string {\r\n return this.oAuthService.getRefreshToken();\r\n }\r\n\r\n getAccessToken(): string {\r\n return this.oAuthService.getAccessToken();\r\n }\r\n\r\n refreshToken(): Promise<AbpAuthResponse> {\r\n return this.oAuthService.refreshToken();\r\n }\r\n\r\n getAccessTokenExpiration(): number {\r\n return this.oAuthService.getAccessTokenExpiration();\r\n }\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\nimport { OAuthErrorEvent } from 'angular-oauth2-oidc';\r\nimport { AbstractAuthErrorFilter, AuthErrorFilter } from '@abp/ng.core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class OAuthErrorFilterService extends AbstractAuthErrorFilter<\r\n AuthErrorFilter<OAuthErrorEvent>,\r\n OAuthErrorEvent\r\n> {\r\n protected readonly _filters = signal<Array<AuthErrorFilter<OAuthErrorEvent>>>([]);\r\n readonly filters = this._filters.asReadonly();\r\n\r\n get(id: string): AuthErrorFilter<OAuthErrorEvent> {\r\n return this._filters().find(({ id: _id }) => _id === id);\r\n }\r\n\r\n add(filter: AuthErrorFilter<OAuthErrorEvent>): void {\r\n this._filters.update(items => [...items, filter]);\r\n }\r\n\r\n patch(item: Partial<AuthErrorFilter<OAuthErrorEvent>>): void {\r\n const _item = this.filters().find(({ id }) => id === item.id);\r\n if (!_item) {\r\n return;\r\n }\r\n\r\n Object.assign(_item, item);\r\n }\r\n\r\n remove(id: string): void {\r\n const item = this.filters().find(({ id: _id }) => _id === id);\r\n if (!item) {\r\n return;\r\n }\r\n\r\n this._filters.update(items => items.filter(({ id: _id }) => _id !== id));\r\n }\r\n\r\n run(event: OAuthErrorEvent): boolean {\r\n return this.filters()\r\n .filter(({ executable }) => !!executable)\r\n .map(({ execute }) => execute(event))\r\n .some(item => item);\r\n }\r\n}\r\n","import {\r\n AuthService,\r\n AuthGuard,\r\n authGuard,\r\n ApiInterceptor,\r\n PIPE_TO_LOGIN_FN_KEY,\r\n CHECK_AUTHENTICATION_STATE_FN_KEY,\r\n AbpLocalStorageService,\r\n AuthErrorFilterService,\r\n} from '@abp/ng.core';\r\nimport { Provider, makeEnvironmentProviders, inject, provideAppInitializer } from '@angular/core';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc';\r\nimport { AbpOAuthGuard, abpOAuthGuard } from '../guards';\r\nimport { OAuthConfigurationHandler } from '../handlers';\r\nimport { OAuthApiInterceptor } from '../interceptors';\r\nimport { AbpOAuthService, OAuthErrorFilterService } from '../services';\r\nimport { pipeToLogin, checkAccessToken } from '../utils';\r\nimport { NavigateToManageProfileProvider } from './navigate-to-manage-profile.provider';\r\n\r\nexport function provideAbpOAuth() {\r\n const providers = [\r\n {\r\n provide: AuthService,\r\n useClass: AbpOAuthService,\r\n },\r\n {\r\n provide: AuthGuard,\r\n useClass: AbpOAuthGuard,\r\n },\r\n {\r\n provide: authGuard,\r\n useValue: abpOAuthGuard,\r\n },\r\n {\r\n provide: ApiInterceptor,\r\n useClass: OAuthApiInterceptor,\r\n },\r\n {\r\n provide: PIPE_TO_LOGIN_FN_KEY,\r\n useValue: pipeToLogin,\r\n },\r\n {\r\n provide: CHECK_AUTHENTICATION_STATE_FN_KEY,\r\n useValue: checkAccessToken,\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useExisting: ApiInterceptor,\r\n multi: true,\r\n },\r\n NavigateToManageProfileProvider,\r\n provideAppInitializer(() => {\r\n inject(OAuthConfigurationHandler);\r\n }),\r\n OAuthModule.forRoot().providers as Provider[],\r\n { provide: OAuthStorage, useClass: AbpLocalStorageService },\r\n { provide: AuthErrorFilterService, useExisting: OAuthErrorFilterService },\r\n ];\r\n\r\n return makeEnvironmentProviders(providers);\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { provideAbpOAuth } from './providers';\r\n\r\n/**\r\n * @deprecated AbpOAuthModule is deprecated use `provideAbpOAuth` *function* instead.\r\n */\r\n@NgModule()\r\nexport class AbpOAuthModule {\r\n static forRoot(): ModuleWithProviders<AbpOAuthModule> {\r\n return {\r\n ngModule: AbpOAuthModule,\r\n providers: [provideAbpOAuth()],\r\n };\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["OAuthService2","filter","tap","take"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abp/ng.oauth",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.1.0-rc.2",
|
|
4
4
|
"homepage": "https://abp.io",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/abpframework/abp.git"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@abp/ng.core": "~9.0.
|
|
11
|
-
"@abp/utils": "~9.0.
|
|
10
|
+
"@abp/ng.core": "~9.1.0-rc.2",
|
|
11
|
+
"@abp/utils": "~9.1.0-rc.2",
|
|
12
12
|
"angular-oauth2-oidc": "^17.0.0",
|
|
13
13
|
"just-clone": "^6.0.0",
|
|
14
14
|
"just-compare": "^2.0.0",
|
|
@@ -39,8 +39,6 @@
|
|
|
39
39
|
},
|
|
40
40
|
".": {
|
|
41
41
|
"types": "./index.d.ts",
|
|
42
|
-
"esm2022": "./esm2022/abp-ng.oauth.mjs",
|
|
43
|
-
"esm": "./esm2022/abp-ng.oauth.mjs",
|
|
44
42
|
"default": "./fesm2022/abp-ng.oauth.mjs"
|
|
45
43
|
}
|
|
46
44
|
},
|
package/esm2022/abp-ng.oauth.mjs
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJwLW5nLm9hdXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvb2F1dGgvc3JjL2FicC1uZy5vYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './oauth.guard';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9vYXV0aC9zcmMvbGliL2d1YXJkcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vb2F1dGguZ3VhcmQnO1xyXG4iXX0=
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { Injectable, inject } from '@angular/core';
|
|
2
|
-
import { OAuthService } from 'angular-oauth2-oidc';
|
|
3
|
-
import { AuthService } from '@abp/ng.core';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
/**
|
|
6
|
-
* @deprecated Use `abpOAuthGuard` *function* instead.
|
|
7
|
-
*/
|
|
8
|
-
export class AbpOAuthGuard {
|
|
9
|
-
constructor() {
|
|
10
|
-
this.oAuthService = inject(OAuthService);
|
|
11
|
-
this.authService = inject(AuthService);
|
|
12
|
-
}
|
|
13
|
-
canActivate(route, state) {
|
|
14
|
-
const hasValidAccessToken = this.oAuthService.hasValidAccessToken();
|
|
15
|
-
if (hasValidAccessToken) {
|
|
16
|
-
return true;
|
|
17
|
-
}
|
|
18
|
-
const params = { returnUrl: state.url };
|
|
19
|
-
this.authService.navigateToLogin(params);
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: AbpOAuthGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
23
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: AbpOAuthGuard, providedIn: 'root' }); }
|
|
24
|
-
}
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: AbpOAuthGuard, decorators: [{
|
|
26
|
-
type: Injectable,
|
|
27
|
-
args: [{
|
|
28
|
-
providedIn: 'root',
|
|
29
|
-
}]
|
|
30
|
-
}] });
|
|
31
|
-
export const abpOAuthGuard = (route, state) => {
|
|
32
|
-
const oAuthService = inject(OAuthService);
|
|
33
|
-
const authService = inject(AuthService);
|
|
34
|
-
const hasValidAccessToken = oAuthService.hasValidAccessToken();
|
|
35
|
-
if (hasValidAccessToken) {
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
const params = { returnUrl: state.url };
|
|
39
|
-
authService.navigateToLogin(params);
|
|
40
|
-
return false;
|
|
41
|
-
};
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9vYXV0aC9zcmMvbGliL2d1YXJkcy9vYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFdBQVcsRUFBYSxNQUFNLGNBQWMsQ0FBQzs7QUFFdEQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8sYUFBYTtJQUgxQjtRQUlxQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztLQWV0RDtJQWJDLFdBQVcsQ0FDVCxLQUE2QixFQUM3QixLQUEwQjtRQUUxQixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNwRSxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs4R0FoQlUsYUFBYTtrSEFBYixhQUFhLGNBRlosTUFBTTs7MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7O0FBb0JELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBa0IsQ0FDMUMsS0FBNkIsRUFDN0IsS0FBMEIsRUFDMUIsRUFBRTtJQUNGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFeEMsTUFBTSxtQkFBbUIsR0FBRyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUUvRCxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3hDLFdBQVcsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBVcmxUcmVlLFxyXG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgUm91dGVyU3RhdGVTbmFwc2hvdCxcclxuICBDYW5BY3RpdmF0ZUZuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE9BdXRoU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xyXG5cclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIElBYnBHdWFyZCB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcblxyXG4vKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIGBhYnBPQXV0aEd1YXJkYCAqZnVuY3Rpb24qIGluc3RlYWQuXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWJwT0F1dGhHdWFyZCBpbXBsZW1lbnRzIElBYnBHdWFyZCB7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9BdXRoU2VydmljZSA9IGluamVjdChPQXV0aFNlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XHJcblxyXG4gIGNhbkFjdGl2YXRlKFxyXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCxcclxuICApOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbiB8IFVybFRyZWUge1xyXG4gICAgY29uc3QgaGFzVmFsaWRBY2Nlc3NUb2tlbiA9IHRoaXMub0F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKTtcclxuICAgIGlmIChoYXNWYWxpZEFjY2Vzc1Rva2VuKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IHsgcmV0dXJuVXJsOiBzdGF0ZS51cmwgfTtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UubmF2aWdhdGVUb0xvZ2luKHBhcmFtcyk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYWJwT0F1dGhHdWFyZDogQ2FuQWN0aXZhdGVGbiA9IChcclxuICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCxcclxuKSA9PiB7XHJcbiAgY29uc3Qgb0F1dGhTZXJ2aWNlID0gaW5qZWN0KE9BdXRoU2VydmljZSk7XHJcbiAgY29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xyXG5cclxuICBjb25zdCBoYXNWYWxpZEFjY2Vzc1Rva2VuID0gb0F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKTtcclxuXHJcbiAgaWYgKGhhc1ZhbGlkQWNjZXNzVG9rZW4pIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgcGFyYW1zID0geyByZXR1cm5Vcmw6IHN0YXRlLnVybCB9O1xyXG4gIGF1dGhTZXJ2aWNlLm5hdmlnYXRlVG9Mb2dpbihwYXJhbXMpO1xyXG4gIHJldHVybiBmYWxzZTtcclxufTtcclxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './oauth-configuration.handler';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9vYXV0aC9zcmMvbGliL2hhbmRsZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL29hdXRoLWNvbmZpZ3VyYXRpb24uaGFuZGxlcic7XHJcbiJdfQ==
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { OAuthService } from "angular-oauth2-oidc";
|
|
3
|
-
import compare from 'just-compare';
|
|
4
|
-
import { filter, map } from 'rxjs/operators';
|
|
5
|
-
import { EnvironmentService, CORE_OPTIONS } from '@abp/ng.core';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "angular-oauth2-oidc";
|
|
8
|
-
import * as i2 from "@abp/ng.core";
|
|
9
|
-
export class OAuthConfigurationHandler {
|
|
10
|
-
constructor(oAuthService, environmentService, options) {
|
|
11
|
-
this.oAuthService = oAuthService;
|
|
12
|
-
this.environmentService = environmentService;
|
|
13
|
-
this.options = options;
|
|
14
|
-
this.listenToSetEnvironment();
|
|
15
|
-
}
|
|
16
|
-
listenToSetEnvironment() {
|
|
17
|
-
this.environmentService
|
|
18
|
-
.createOnUpdateStream(state => state)
|
|
19
|
-
.pipe(map(environment => environment.oAuthConfig), filter(config => !compare(config, this.options.environment.oAuthConfig)))
|
|
20
|
-
.subscribe((config) => {
|
|
21
|
-
this.oAuthService.configure(config);
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: OAuthConfigurationHandler, deps: [{ token: i1.OAuthService }, { token: i2.EnvironmentService }, { token: CORE_OPTIONS }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
25
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: OAuthConfigurationHandler, providedIn: 'root' }); }
|
|
26
|
-
}
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: OAuthConfigurationHandler, decorators: [{
|
|
28
|
-
type: Injectable,
|
|
29
|
-
args: [{
|
|
30
|
-
providedIn: 'root',
|
|
31
|
-
}]
|
|
32
|
-
}], ctorParameters: () => [{ type: i1.OAuthService }, { type: i2.EnvironmentService }, { type: undefined, decorators: [{
|
|
33
|
-
type: Inject,
|
|
34
|
-
args: [CORE_OPTIONS]
|
|
35
|
-
}] }] });
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgtY29uZmlndXJhdGlvbi5oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvb2F1dGgvc3JjL2xpYi9oYW5kbGVycy9vYXV0aC1jb25maWd1cmF0aW9uLmhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9ELE9BQU8sT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBTyxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7QUFLckUsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxZQUNVLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUNoQixPQUFpQjtRQUZ2QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ2hCLFlBQU8sR0FBUCxPQUFPLENBQVU7UUFFL0MsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsa0JBQWtCO2FBQ3BCLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO2FBQ3BDLElBQUksQ0FDSCxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBeUIsQ0FBQyxFQUN6RCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDekU7YUFDQSxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBbkJVLHlCQUF5QixnRkFJMUIsWUFBWTtrSEFKWCx5QkFBeUIsY0FGeEIsTUFBTTs7MkZBRVAseUJBQXlCO2tCQUhyQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBS0ksTUFBTTsyQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEF1dGhDb25maWcsIE9BdXRoU2VydmljZSB9IGZyb20gXCJhbmd1bGFyLW9hdXRoMi1vaWRjXCI7XHJcbmltcG9ydCBjb21wYXJlIGZyb20gJ2p1c3QtY29tcGFyZSc7XHJcbmltcG9ydCB7IGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBQlAsIEVudmlyb25tZW50U2VydmljZSwgQ09SRV9PUFRJT05TIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPQXV0aENvbmZpZ3VyYXRpb25IYW5kbGVyIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgb0F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgQEluamVjdChDT1JFX09QVElPTlMpIHByaXZhdGUgb3B0aW9uczogQUJQLlJvb3QsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmxpc3RlblRvU2V0RW52aXJvbm1lbnQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdGVuVG9TZXRFbnZpcm9ubWVudCgpIHtcclxuICAgIHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlXHJcbiAgICAgIC5jcmVhdGVPblVwZGF0ZVN0cmVhbShzdGF0ZSA9PiBzdGF0ZSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKGVudmlyb25tZW50ID0+IGVudmlyb25tZW50Lm9BdXRoQ29uZmlnIGFzIEF1dGhDb25maWcpLFxyXG4gICAgICAgIGZpbHRlcihjb25maWcgPT4gIWNvbXBhcmUoY29uZmlnLCB0aGlzLm9wdGlvbnMuZW52aXJvbm1lbnQub0F1dGhDb25maWcpKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChjb25maWcpID0+IHtcclxuICAgICAgICB0aGlzLm9BdXRoU2VydmljZS5jb25maWd1cmUoY29uZmlnKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { OAuthService } from 'angular-oauth2-oidc';
|
|
3
|
-
import { finalize } from 'rxjs/operators';
|
|
4
|
-
import { HttpWaitService, IS_EXTERNAL_REQUEST, SessionStateService, TENANT_KEY, } from '@abp/ng.core';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "angular-oauth2-oidc";
|
|
7
|
-
import * as i2 from "@abp/ng.core";
|
|
8
|
-
export class OAuthApiInterceptor {
|
|
9
|
-
constructor(oAuthService, sessionState, httpWaitService, tenantKey) {
|
|
10
|
-
this.oAuthService = oAuthService;
|
|
11
|
-
this.sessionState = sessionState;
|
|
12
|
-
this.httpWaitService = httpWaitService;
|
|
13
|
-
this.tenantKey = tenantKey;
|
|
14
|
-
}
|
|
15
|
-
intercept(request, next) {
|
|
16
|
-
this.httpWaitService.addRequest(request);
|
|
17
|
-
const isExternalRequest = request.context?.get(IS_EXTERNAL_REQUEST);
|
|
18
|
-
const newRequest = isExternalRequest
|
|
19
|
-
? request
|
|
20
|
-
: request.clone({
|
|
21
|
-
setHeaders: this.getAdditionalHeaders(request.headers),
|
|
22
|
-
});
|
|
23
|
-
return next
|
|
24
|
-
.handle(newRequest)
|
|
25
|
-
.pipe(finalize(() => this.httpWaitService.deleteRequest(request)));
|
|
26
|
-
}
|
|
27
|
-
getAdditionalHeaders(existingHeaders) {
|
|
28
|
-
const headers = {};
|
|
29
|
-
const token = this.oAuthService.getAccessToken();
|
|
30
|
-
if (!existingHeaders?.has('Authorization') && token) {
|
|
31
|
-
headers['Authorization'] = `Bearer ${token}`;
|
|
32
|
-
}
|
|
33
|
-
const lang = this.sessionState.getLanguage();
|
|
34
|
-
if (!existingHeaders?.has('Accept-Language') && lang) {
|
|
35
|
-
headers['Accept-Language'] = lang;
|
|
36
|
-
}
|
|
37
|
-
const tenant = this.sessionState.getTenant();
|
|
38
|
-
if (!existingHeaders?.has(this.tenantKey) && tenant?.id) {
|
|
39
|
-
headers[this.tenantKey] = tenant.id;
|
|
40
|
-
}
|
|
41
|
-
headers['X-Requested-With'] = 'XMLHttpRequest';
|
|
42
|
-
return headers;
|
|
43
|
-
}
|
|
44
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: OAuthApiInterceptor, deps: [{ token: i1.OAuthService }, { token: i2.SessionStateService }, { token: i2.HttpWaitService }, { token: TENANT_KEY }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
45
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: OAuthApiInterceptor, providedIn: 'root' }); }
|
|
46
|
-
}
|
|
47
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: OAuthApiInterceptor, decorators: [{
|
|
48
|
-
type: Injectable,
|
|
49
|
-
args: [{
|
|
50
|
-
providedIn: 'root',
|
|
51
|
-
}]
|
|
52
|
-
}], ctorParameters: () => [{ type: i1.OAuthService }, { type: i2.SessionStateService }, { type: i2.HttpWaitService }, { type: undefined, decorators: [{
|
|
53
|
-
type: Inject,
|
|
54
|
-
args: [TENANT_KEY]
|
|
55
|
-
}] }] });
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvb2F1dGgvc3JjL2xpYi9pbnRlcmNlcHRvcnMvYXBpLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUNMLGVBQWUsRUFFZixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLFVBQVUsR0FDWCxNQUFNLGNBQWMsQ0FBQzs7OztBQUt0QixNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFlBQ1UsWUFBMEIsRUFDMUIsWUFBaUMsRUFDakMsZUFBZ0MsRUFDWixTQUFpQjtRQUhyQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ1osY0FBUyxHQUFULFNBQVMsQ0FBUTtJQUM1QyxDQUFDO0lBRUosU0FBUyxDQUFDLE9BQXlCLEVBQUUsSUFBaUI7UUFDcEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sVUFBVSxHQUFHLGlCQUFpQjtZQUNsQyxDQUFDLENBQUMsT0FBTztZQUNULENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUNaLFVBQVUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQzthQUN2RCxDQUFDLENBQUM7UUFFUCxPQUFPLElBQUk7YUFDUixNQUFNLENBQUMsVUFBVSxDQUFDO2FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxlQUE2QjtRQUNoRCxNQUFNLE9BQU8sR0FBRyxFQUFTLENBQUM7UUFFMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNwRCxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsVUFBVSxLQUFLLEVBQUUsQ0FBQztRQUMvQyxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNwQyxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxDQUFDO1FBRUQsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsZ0JBQWdCLENBQUM7UUFFL0MsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs4R0EzQ1UsbUJBQW1CLGdIQUtwQixVQUFVO2tIQUxULG1CQUFtQixjQUZsQixNQUFNOzsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFNSSxNQUFNOzJCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGFuZGxlciwgSHR0cEhlYWRlcnMsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XHJcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1xyXG4gIEh0dHBXYWl0U2VydmljZSxcclxuICBJQXBpSW50ZXJjZXB0b3IsXHJcbiAgSVNfRVhURVJOQUxfUkVRVUVTVCxcclxuICBTZXNzaW9uU3RhdGVTZXJ2aWNlLFxyXG4gIFRFTkFOVF9LRVksXHJcbn0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPQXV0aEFwaUludGVyY2VwdG9yIGltcGxlbWVudHMgSUFwaUludGVyY2VwdG9yIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgb0F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNlc3Npb25TdGF0ZTogU2Vzc2lvblN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cFdhaXRTZXJ2aWNlOiBIdHRwV2FpdFNlcnZpY2UsXHJcbiAgICBASW5qZWN0KFRFTkFOVF9LRVkpIHByaXZhdGUgdGVuYW50S2V5OiBzdHJpbmcsXHJcbiAgKSB7fVxyXG5cclxuICBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcclxuICAgIHRoaXMuaHR0cFdhaXRTZXJ2aWNlLmFkZFJlcXVlc3QocmVxdWVzdCk7XHJcbiAgICBjb25zdCBpc0V4dGVybmFsUmVxdWVzdCA9IHJlcXVlc3QuY29udGV4dD8uZ2V0KElTX0VYVEVSTkFMX1JFUVVFU1QpO1xyXG4gICAgY29uc3QgbmV3UmVxdWVzdCA9IGlzRXh0ZXJuYWxSZXF1ZXN0XHJcbiAgICAgID8gcmVxdWVzdFxyXG4gICAgICA6IHJlcXVlc3QuY2xvbmUoe1xyXG4gICAgICAgICAgc2V0SGVhZGVyczogdGhpcy5nZXRBZGRpdGlvbmFsSGVhZGVycyhyZXF1ZXN0LmhlYWRlcnMpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXh0XHJcbiAgICAgIC5oYW5kbGUobmV3UmVxdWVzdClcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5odHRwV2FpdFNlcnZpY2UuZGVsZXRlUmVxdWVzdChyZXF1ZXN0KSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWRkaXRpb25hbEhlYWRlcnMoZXhpc3RpbmdIZWFkZXJzPzogSHR0cEhlYWRlcnMpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSB7fSBhcyBhbnk7XHJcblxyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLm9BdXRoU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpO1xyXG4gICAgaWYgKCFleGlzdGluZ0hlYWRlcnM/LmhhcygnQXV0aG9yaXphdGlvbicpICYmIHRva2VuKSB7XHJcbiAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHt0b2tlbn1gO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxhbmcgPSB0aGlzLnNlc3Npb25TdGF0ZS5nZXRMYW5ndWFnZSgpO1xyXG4gICAgaWYgKCFleGlzdGluZ0hlYWRlcnM/LmhhcygnQWNjZXB0LUxhbmd1YWdlJykgJiYgbGFuZykge1xyXG4gICAgICBoZWFkZXJzWydBY2NlcHQtTGFuZ3VhZ2UnXSA9IGxhbmc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGVuYW50ID0gdGhpcy5zZXNzaW9uU3RhdGUuZ2V0VGVuYW50KCk7XHJcbiAgICBpZiAoIWV4aXN0aW5nSGVhZGVycz8uaGFzKHRoaXMudGVuYW50S2V5KSAmJiB0ZW5hbnQ/LmlkKSB7XHJcbiAgICAgIGhlYWRlcnNbdGhpcy50ZW5hbnRLZXldID0gdGVuYW50LmlkO1xyXG4gICAgfVxyXG5cclxuICAgIGhlYWRlcnNbJ1gtUmVxdWVzdGVkLVdpdGgnXSA9ICdYTUxIdHRwUmVxdWVzdCc7XHJcblxyXG4gICAgcmV0dXJuIGhlYWRlcnM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './api.interceptor';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9vYXV0aC9zcmMvbGliL2ludGVyY2VwdG9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hcGkuaW50ZXJjZXB0b3InO1xyXG4iXX0=
|