Make authstorage configurable
This commit is contained in:
		| @@ -91,7 +91,7 @@ export class AppCommonServiceModule { | ||||
|         { | ||||
|           provide: APP_INITIALIZER, | ||||
|           useFactory: appConfigFactory, | ||||
|           deps: [Injector, AppConfig, OAuthService,AuthConfigFactory], | ||||
|           deps: [Injector, AppConfig, OAuthService,AuthConfigFactory,OAuthStorage], | ||||
|           multi: true | ||||
|         },        | ||||
|         { | ||||
|   | ||||
| @@ -41,6 +41,7 @@ import {IUser} from './models/user'; | ||||
| import * as commonActions from './actions/app-common.actions'; | ||||
| import * as commonReducers from './reducers/app-common.reducer'; | ||||
| import * as commonEffects from './effects/app-common.effects'; | ||||
| import { SecureOAuthStorage} from './shared/secureOAuthStorage'; | ||||
|  | ||||
| export { | ||||
|   SafePipe, | ||||
| @@ -67,7 +68,8 @@ export { | ||||
|   commonReducers, | ||||
|   IAuthconfigFactory, | ||||
|   AuthConfigFactory, | ||||
|   MenuBackgroundComponent | ||||
|   MenuBackgroundComponent, | ||||
|   SecureOAuthStorage | ||||
| }; | ||||
|  | ||||
| @NgModule({ | ||||
|   | ||||
| @@ -1,12 +1,13 @@ | ||||
| import { Injector } from '@angular/core'; | ||||
| import { Location} from '@angular/common'; | ||||
| import { Router,UrlSerializer } from '@angular/router'; | ||||
| import { AuthConfig, OAuthService, JwksValidationHandler, OAuthErrorEvent  } from 'angular-oauth2-oidc'; | ||||
| import { AuthConfig, OAuthService, JwksValidationHandler, OAuthErrorEvent, OAuthStorage  } from 'angular-oauth2-oidc'; | ||||
| import { AppConfig } from "./app.config"; | ||||
| import { IAuthconfigFactory } from './authconfigFactory'; | ||||
|  | ||||
|  | ||||
| export function appConfigFactory(injector:Injector, appConfig: AppConfig, oauthService: OAuthService, authconfigFactory:IAuthconfigFactory): () => Promise<any> { | ||||
|  | ||||
| export function appConfigFactory(injector:Injector, appConfig: AppConfig, oauthService: OAuthService, authconfigFactory:IAuthconfigFactory,authStorage:OAuthStorage): () => Promise<any> { | ||||
|   return (): Promise<any> => { | ||||
|     return appConfig.load().then(() => {      | ||||
|       oauthService.events.subscribe((event) => { | ||||
| @@ -22,7 +23,7 @@ export function appConfigFactory(injector:Injector, appConfig: AppConfig, oauthS | ||||
|         } | ||||
|       }); | ||||
|       oauthService.configure(authconfigFactory.getAuthConfig(appConfig)); | ||||
|       oauthService.setStorage(localStorage); | ||||
|       oauthService.setStorage(authStorage); | ||||
|       oauthService.tokenValidationHandler = new JwksValidationHandler(); | ||||
|       oauthService.tokenValidationHandler.validateAtHash = function () { | ||||
|         return new Promise<boolean>((res) => { res(true); }) | ||||
|   | ||||
							
								
								
									
										36
									
								
								projects/common/src/fm/shared/secureOAuthStorage.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								projects/common/src/fm/shared/secureOAuthStorage.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| import {OAuthStorage} from 'angular-oauth2-oidc'; | ||||
| import {Inject, Injectable} from '@angular/core'; | ||||
|  | ||||
| @Injectable() | ||||
| export class SecureOAuthStorage extends OAuthStorage { | ||||
|     private storage = {}; | ||||
|  | ||||
|     secureKey(key:string): boolean { | ||||
|         if(key == "nonce") return false; | ||||
|         if(key == "PKCI_verifier") return false; | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     getItem(key: string): string { | ||||
|         if(this.secureKey(key)) { | ||||
|             return this.storage[key]; | ||||
|         } else { | ||||
|             return window.sessionStorage.getItem(key); | ||||
|         } | ||||
|  | ||||
|     }; | ||||
|     removeItem(key: string): void { | ||||
|         if(this.secureKey(key)) { | ||||
|             delete this.storage[key]; | ||||
|         } else { | ||||
|             window.sessionStorage.removeItem(key); | ||||
|         } | ||||
|     } | ||||
|     setItem(key: string, data: string): void { | ||||
|         if(this.secureKey(key)) { | ||||
|             this.storage[key]=data; | ||||
|         } else { | ||||
|            window.sessionStorage.setItem(key,data); | ||||
|         }       | ||||
|     } | ||||
| } | ||||
| @@ -18,8 +18,8 @@ import { StoreRouterConnectingModule} from '@ngrx/router-store'; | ||||
| import {AppRoutingModule} from './app-routing.module'; | ||||
| import { LogoComponent } from './logo/logo.component'; | ||||
| import { MenuComponent } from './menu/menu.component'; | ||||
| import { LocalAuthconfigFactory} from './localAuthconfigFactory'; | ||||
| import { AuthConfig } from 'angular-oauth2-oidc'; | ||||
| import { SecureOAuthStorage} from '@farmmaps/common'; | ||||
| import { OAuthStorage } from 'angular-oauth2-oidc'; | ||||
|  | ||||
| export const BOOTSTRAP_EFFECTS = new InjectionToken('Bootstrap Effects'); | ||||
|  | ||||
| @@ -62,7 +62,11 @@ export function provideBootstrapEffects(effects: Type<any>[]) { | ||||
|     EffectsModule.forRoot([]) | ||||
|   ], | ||||
|   providers: [ | ||||
|     AuthConfigFactory | ||||
|     AuthConfigFactory, | ||||
|     { | ||||
|       provide:OAuthStorage, | ||||
|       useClass:SecureOAuthStorage | ||||
|     } | ||||
|     // { | ||||
|     //   provide:AuthConfigFactory, | ||||
|     //   useClass:LocalAuthconfigFactory | ||||
|   | ||||
		Reference in New Issue
	
	Block a user