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