Compare commits
2 Commits
313e0c94f7
...
6389331c30
Author | SHA1 | Date | |
---|---|---|---|
|
6389331c30 | ||
|
3f27662e3f |
@ -1,16 +1,23 @@
|
||||
// angular modules
|
||||
import { NgModule, APP_INITIALIZER, ModuleWithProviders, Injector, Optional, SkipSelf } from '@angular/core';
|
||||
import { DatePipe } from '@angular/common';
|
||||
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
||||
import { NgModule, APP_INITIALIZER, ModuleWithProviders, Injector,Optional,SkipSelf } from '@angular/core';
|
||||
import { CommonModule, DatePipe } from '@angular/common';
|
||||
import { HttpClientModule, HttpClient, HTTP_INTERCEPTORS } from '@angular/common/http';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
|
||||
// external modules
|
||||
import { OAuthModule, OAuthService } from 'angular-oauth2-oidc';
|
||||
import { OAuthModule,AuthConfig, OAuthService, OAuthStorage } from 'angular-oauth2-oidc';
|
||||
|
||||
|
||||
// routing module
|
||||
import { AppCommonRoutingModule } from './common-routing.module';
|
||||
|
||||
import { MODULE_NAME } from './module-name';
|
||||
|
||||
//components
|
||||
import { ItemTypeService } from './services/itemtype.service';
|
||||
import { FolderService } from './services/folder.service';
|
||||
import { TimespanService } from './services/timespan.service';
|
||||
import { ItemService } from './services/item.service';
|
||||
import { TimespanService} from './services/timespan.service';
|
||||
import { ItemService} from './services/item.service';
|
||||
import { EventService } from './services/event.service';
|
||||
import { TypeaheadService } from './services/typeahead.service';
|
||||
import { UserService } from './services/user.service';
|
||||
@ -20,21 +27,40 @@ import { appConfigFactory } from "./shared/app.config.factory";
|
||||
import { AuthGuard } from './services/auth-guard.service';
|
||||
import { NavBarGuard } from './services/nav-bar-guard.service';
|
||||
import { FullScreenGuard } from './services/full-screen-guard.service';
|
||||
import { SafePipe } from './shared/safe.pipe';
|
||||
import { AppComponent} from './components/app/app.component';
|
||||
import { AuthCallbackComponent } from './components/auth-callback/auth-callback.component';
|
||||
import { AuthCallbackGuard } from './components/auth-callback/auth-callback.guard';
|
||||
import { SessionClearedComponent } from './components/session-cleared/session-cleared.component';
|
||||
import { ResumableFileUploadService } from './components/resumable-file-upload/resumable-file-upload.service';
|
||||
import { NgbDateNativeAdapter } from './services/date-adapter.service'
|
||||
import { AuthConfigFactory } from './shared/authconfigFactory';
|
||||
import { CodeListItemService } from './services/codelistitem.service';
|
||||
import { ResumableFileUploadComponent } from './components/resumable-file-upload/resumable-file-upload.component';
|
||||
import { NotFoundComponent } from './components/not-found/not-found.component';
|
||||
import { NotImplementedComponent } from './components/not-implemented/not-implemented.component';
|
||||
import { SidePanelComponent } from './components/side-panel/side-panel.component';
|
||||
import { TimespanComponent } from './components/timespan/timespan.component';
|
||||
import { TagInputComponent } from './components/tag-input/tag-input.component';
|
||||
import {IEventMessage } from './models/event.message';
|
||||
import { IItem, Item } from './models/item';
|
||||
import {IItemType} from './models/item.type';
|
||||
import {IItemTypes} from './models/item.types';
|
||||
import {IItemTask,ItemTask} from './models/itemTask';
|
||||
import {IListItem} from './models/list.item';
|
||||
import {ITypeaheadItem} from './models/typeahead.item';
|
||||
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 {NgbDateNativeAdapter} from './services/date-adapter.service'
|
||||
import { from } from 'rxjs';
|
||||
import {AuthConfigFactory} from './shared/authconfigFactory';
|
||||
|
||||
export {
|
||||
FolderService,
|
||||
export {FolderService,
|
||||
ItemTypeService,
|
||||
TimespanService,
|
||||
ItemService,
|
||||
EventService,
|
||||
TypeaheadService,
|
||||
UserService,
|
||||
CodeListItemService,
|
||||
AppConfig,
|
||||
AccessTokenInterceptor,
|
||||
AuthGuard,
|
||||
@ -51,7 +77,7 @@ export {
|
||||
]
|
||||
})
|
||||
export class AppCommonServiceModule {
|
||||
constructor(@Optional() @SkipSelf() parentModule: AppCommonServiceModule) {
|
||||
constructor (@Optional() @SkipSelf() parentModule: AppCommonServiceModule) {
|
||||
if (parentModule) {
|
||||
throw new Error(
|
||||
'AppCommonServiceModule is already loaded. Import it in the AppModule only');
|
||||
@ -65,7 +91,7 @@ export class AppCommonServiceModule {
|
||||
{
|
||||
provide: APP_INITIALIZER,
|
||||
useFactory: appConfigFactory,
|
||||
deps: [Injector, AppConfig, OAuthService, AuthConfigFactory],
|
||||
deps: [Injector, AppConfig, OAuthService,AuthConfigFactory,OAuthStorage],
|
||||
multi: true
|
||||
},
|
||||
{
|
||||
|
@ -42,6 +42,7 @@ import { ICodeListItem } from './models/code.list.item';
|
||||
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,
|
||||
@ -69,7 +70,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
|
||||
|
Loading…
Reference in New Issue
Block a user