76 lines
2.2 KiB
TypeScript
76 lines
2.2 KiB
TypeScript
import type { Provider } from 'injection-js';
|
|
import {
|
|
PASSED_CONFIG,
|
|
type PassedInitialConfig,
|
|
createStaticLoader,
|
|
} from './auth-config';
|
|
import { StsConfigLoader } from './config/loader/config-loader';
|
|
import { APP_INITIALIZER } from './injection';
|
|
import { AbstractLoggerService } from './logging/abstract-logger.service';
|
|
import { ConsoleLoggerService } from './logging/console-logger.service';
|
|
import { OidcSecurityService } from './oidc.security.service';
|
|
import { AbstractSecurityStorage } from './storage/abstract-security-storage';
|
|
import { DefaultSessionStorageService } from './storage/default-sessionstorage.service';
|
|
|
|
/**
|
|
* A feature to be used with `provideAuth`.
|
|
*/
|
|
export interface AuthFeature {
|
|
ɵproviders: Provider[];
|
|
}
|
|
|
|
export function provideAuth(
|
|
passedConfig: PassedInitialConfig,
|
|
...features: AuthFeature[]
|
|
): Provider[] {
|
|
const providers = _provideAuth(passedConfig);
|
|
|
|
for (const feature of features) {
|
|
providers.push(...feature.ɵproviders);
|
|
}
|
|
|
|
return providers;
|
|
}
|
|
|
|
export function _provideAuth(passedConfig: PassedInitialConfig): Provider[] {
|
|
return [
|
|
// Make the PASSED_CONFIG available through injection
|
|
{ provide: PASSED_CONFIG, useValue: passedConfig },
|
|
|
|
// Create the loader: Either the one getting passed or a static one
|
|
passedConfig?.loader || {
|
|
provide: StsConfigLoader,
|
|
useFactory: createStaticLoader,
|
|
deps: [PASSED_CONFIG],
|
|
},
|
|
{
|
|
provide: AbstractSecurityStorage,
|
|
useClass: DefaultSessionStorageService,
|
|
},
|
|
{ provide: AbstractLoggerService, useClass: ConsoleLoggerService },
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Configures an app initializer, which is called before the app starts, and
|
|
* resolves any OAuth callback variables.
|
|
* When used, it replaces the need to manually call
|
|
* `OidcSecurityService.checkAuth(...)` or
|
|
* `OidcSecurityService.checkAuthMultiple(...)`.
|
|
*
|
|
* @see https://angular.dev/api/core/APP_INITIALIZER
|
|
*/
|
|
export function withAppInitializerAuthCheck(): AuthFeature {
|
|
return {
|
|
ɵproviders: [
|
|
{
|
|
provide: APP_INITIALIZER,
|
|
useFactory: (oidcSecurityService: OidcSecurityService) => () =>
|
|
oidcSecurityService.checkAuthMultiple(),
|
|
multi: true,
|
|
deps: [OidcSecurityService],
|
|
},
|
|
],
|
|
};
|
|
}
|