97 lines
2.9 KiB
TypeScript
97 lines
2.9 KiB
TypeScript
import { inject } from 'injection-js';
|
|
import type { OpenIdConfiguration } from '../config/openid-configuration';
|
|
import type { AuthResult } from '../flows/callback-context';
|
|
import { BrowserStorageService } from './browser-storage.service';
|
|
|
|
export type StorageKeys =
|
|
| 'authnResult'
|
|
| 'authzData'
|
|
| 'access_token_expires_at'
|
|
| 'authWellKnownEndPoints'
|
|
| 'userData'
|
|
| 'authNonce'
|
|
| 'codeVerifier'
|
|
| 'authStateControl'
|
|
| 'reusable_refresh_token'
|
|
| 'session_state'
|
|
| 'storageSilentRenewRunning'
|
|
| 'storageCodeFlowInProgress'
|
|
| 'storageCustomParamsAuthRequest'
|
|
| 'storageCustomParamsRefresh'
|
|
| 'storageCustomParamsEndSession'
|
|
| 'redirect'
|
|
| 'configIds'
|
|
| 'jwtKeys'
|
|
| 'popupauth';
|
|
|
|
export class StoragePersistenceService {
|
|
private readonly browserStorageService = inject(BrowserStorageService);
|
|
|
|
read(key: StorageKeys, config: OpenIdConfiguration): any {
|
|
const storedConfig = this.browserStorageService.read(key, config) || {};
|
|
|
|
return storedConfig[key];
|
|
}
|
|
|
|
write(key: StorageKeys, value: any, config: OpenIdConfiguration): boolean {
|
|
const storedConfig = this.browserStorageService.read(key, config) || {};
|
|
|
|
storedConfig[key] = value;
|
|
|
|
return this.browserStorageService.write(storedConfig, config);
|
|
}
|
|
|
|
remove(key: StorageKeys, config: OpenIdConfiguration): void {
|
|
const storedConfig = this.browserStorageService.read(key, config) || {};
|
|
|
|
delete storedConfig[key];
|
|
|
|
this.browserStorageService.write(storedConfig, config);
|
|
}
|
|
|
|
clear(config: OpenIdConfiguration): void {
|
|
this.browserStorageService.clear(config);
|
|
}
|
|
|
|
resetStorageFlowData(config: OpenIdConfiguration): void {
|
|
this.remove('session_state', config);
|
|
this.remove('storageSilentRenewRunning', config);
|
|
this.remove('storageCodeFlowInProgress', config);
|
|
this.remove('codeVerifier', config);
|
|
this.remove('userData', config);
|
|
this.remove('storageCustomParamsAuthRequest', config);
|
|
this.remove('access_token_expires_at', config);
|
|
this.remove('storageCustomParamsRefresh', config);
|
|
this.remove('storageCustomParamsEndSession', config);
|
|
this.remove('reusable_refresh_token', config);
|
|
}
|
|
|
|
resetAuthStateInStorage(config: OpenIdConfiguration): void {
|
|
this.remove('authzData', config);
|
|
this.remove('reusable_refresh_token', config);
|
|
this.remove('authnResult', config);
|
|
}
|
|
|
|
getAccessToken(config: OpenIdConfiguration): string {
|
|
return this.read('authzData', config);
|
|
}
|
|
|
|
getIdToken(config: OpenIdConfiguration): string {
|
|
return this.read('authnResult', config)?.id_token;
|
|
}
|
|
|
|
getRefreshToken(config: OpenIdConfiguration): string {
|
|
const refreshToken = this.read('authnResult', config)?.refresh_token;
|
|
|
|
if (!refreshToken && config.allowUnsafeReuseRefreshToken) {
|
|
return this.read('reusable_refresh_token', config);
|
|
}
|
|
|
|
return refreshToken;
|
|
}
|
|
|
|
getAuthenticationResult(config: OpenIdConfiguration): AuthResult {
|
|
return this.read('authnResult', config);
|
|
}
|
|
}
|