From e1f86b1e7a608688e53c56a608515fce7624d309 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 9 Mar 2021 10:41:52 +0300 Subject: [PATCH] improve AuthFlowInitializer --- .../packages/core/src/lib/core.module.ts | 4 +-- .../services/auth-flow-initializer.service.ts | 33 ------------------- .../src/lib/services/auth-flow-initializer.ts | 30 +++++++++++++++++ .../packages/core/src/lib/services/index.ts | 2 +- .../core/src/lib/utils/initial-utils.ts | 6 ++-- 5 files changed, 37 insertions(+), 38 deletions(-) delete mode 100644 npm/ng-packs/packages/core/src/lib/services/auth-flow-initializer.service.ts create mode 100644 npm/ng-packs/packages/core/src/lib/services/auth-flow-initializer.ts diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts index 9fba623b39..5c2e60d7c7 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -26,7 +26,7 @@ import { ABP } from './models/common'; import { LocalizationPipe } from './pipes/localization.pipe'; import { SortPipe } from './pipes/sort.pipe'; import { LocaleProvider } from './providers/locale.provider'; -import { AuthFlowInitializerService } from './services/auth-flow-initializer.service'; +import { AuthFlowInitializer } from './services/auth-flow-initializer'; import { LocalizationService } from './services/localization.service'; import { ProfileState } from './states/profile.state'; import { oAuthStorage } from './strategies/auth-flow.strategy'; @@ -179,7 +179,7 @@ export class CoreModule { useFactory: noop, }, { provide: OAuthStorage, useFactory: storageFactory }, - AuthFlowInitializerService, + AuthFlowInitializer, ], }; } diff --git a/npm/ng-packs/packages/core/src/lib/services/auth-flow-initializer.service.ts b/npm/ng-packs/packages/core/src/lib/services/auth-flow-initializer.service.ts deleted file mode 100644 index 2b8609c85e..0000000000 --- a/npm/ng-packs/packages/core/src/lib/services/auth-flow-initializer.service.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Injectable, Injector } from '@angular/core'; -import { from } from 'rxjs'; -import { filter, map, switchMap, take, tap } from 'rxjs/operators'; -import { AUTH_FLOW_STRATEGY } from '../strategies/auth-flow.strategy'; -import { AuthService } from './auth.service'; -import { EnvironmentService } from './environment.service'; - -@Injectable() -export class AuthFlowInitializerService { - constructor( - protected injector: Injector, - protected environmentService: EnvironmentService, - protected authService: AuthService, - ) {} - - init(): Promise { - return this.environmentService - .getEnvironment$() - .pipe( - map(env => env?.oAuthConfig), - filter(oAuthConfig => !!oAuthConfig), - tap(oAuthConfig => { - this.authService.strategy = - oAuthConfig.responseType === 'code' - ? AUTH_FLOW_STRATEGY.Code(this.injector) - : AUTH_FLOW_STRATEGY.Password(this.injector); - }), - switchMap(() => from(this.authService.init())), - take(1), - ) - .toPromise(); - } -} diff --git a/npm/ng-packs/packages/core/src/lib/services/auth-flow-initializer.ts b/npm/ng-packs/packages/core/src/lib/services/auth-flow-initializer.ts new file mode 100644 index 0000000000..5dbdde97a5 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/services/auth-flow-initializer.ts @@ -0,0 +1,30 @@ +import { Injectable, Injector } from '@angular/core'; +import { from, Observable } from 'rxjs'; +import { filter, map, switchMap, take, tap } from 'rxjs/operators'; +import { AUTH_FLOW_STRATEGY } from '../strategies/auth-flow.strategy'; +import { AuthService } from './auth.service'; +import { EnvironmentService } from './environment.service'; + +@Injectable() +export class AuthFlowInitializer { + constructor( + protected injector: Injector, + protected environmentService: EnvironmentService, + protected authService: AuthService, + ) {} + + init(): Observable | Promise { + return this.environmentService.getEnvironment$().pipe( + map(env => env?.oAuthConfig), + filter(oAuthConfig => !!oAuthConfig), + tap(oAuthConfig => { + this.authService.strategy = + oAuthConfig.responseType === 'code' + ? AUTH_FLOW_STRATEGY.Code(this.injector) + : AUTH_FLOW_STRATEGY.Password(this.injector); + }), + switchMap(() => from(this.authService.init())), + take(1), + ); + } +} diff --git a/npm/ng-packs/packages/core/src/lib/services/index.ts b/npm/ng-packs/packages/core/src/lib/services/index.ts index 093c4dece9..5301cd6fe8 100644 --- a/npm/ng-packs/packages/core/src/lib/services/index.ts +++ b/npm/ng-packs/packages/core/src/lib/services/index.ts @@ -1,6 +1,6 @@ export * from './application-configuration.service'; export * from './auth.service'; -export * from './auth-flow-initializer.service'; +export * from './auth-flow-initializer'; export * from './config-state.service'; export * from './content-projection.service'; export * from './dom-insertion.service'; diff --git a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts index c1bfdab95d..04cfcb2bf6 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts @@ -1,12 +1,13 @@ import { registerLocaleData } from '@angular/common'; import { Injector } from '@angular/core'; import { OAuthService } from 'angular-oauth2-oidc'; +import { isObservable, Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; import { ABP } from '../models/common'; import { Environment } from '../models/environment'; import { AbpApplicationConfigurationService } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service'; import { CurrentTenantDto } from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models'; -import { AuthFlowInitializerService } from '../services/auth-flow-initializer.service'; +import { AuthFlowInitializer } from '../services/auth-flow-initializer'; import { ConfigStateService } from '../services/config-state.service'; import { EnvironmentService } from '../services/environment.service'; import { SessionStateService } from '../services/session-state.service'; @@ -25,7 +26,8 @@ export function getInitialData(injector: Injector) { environmentService.setState(options.environment as Environment); await getRemoteEnv(injector, options.environment); await parseTenantFromUrl(injector); - await injector.get(AuthFlowInitializerService).init(); + const authFlowInit = injector.get(AuthFlowInitializer).init(); + await (isObservable(authFlowInit) ? authFlowInit.toPromise() : authFlowInit); if (options.skipGetAppConfiguration) return;