improve AuthFlowInitializer

pull/7861/head
mehmet-erim 5 years ago
parent 5cae67820a
commit e1f86b1e7a

@ -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,
],
};
}

@ -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<any> {
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();
}
}

@ -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<any> | Promise<any> {
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),
);
}
}

@ -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';

@ -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;

Loading…
Cancel
Save