diff options
author | Aijana Schumann <aijana.schumann@highstreet-technologies.com> | 2021-02-15 18:22:28 +0100 |
---|---|---|
committer | Aijana Schumann <aijana.schumann@highstreet-technologies.com> | 2021-02-15 18:23:57 +0100 |
commit | 8515052e1a6de2de56effbc61c73d3aa80169a93 (patch) | |
tree | 8707b2b587890522b35cd7dd1b54ce4f006f1c3a /sdnr/wt/odlux/framework/src/handlers | |
parent | db20d36689c011333ed7216b64d3e987e473f1ee (diff) |
Add OAuth support to odlux
Extend odlux to support oauth, support external login provider for sign-in
Issue-ID: CCSDK-3167
Signed-off-by: Aijana Schumann <aijana.schumann@highstreet-technologies.com>
Change-Id: Id5772e0026fa7ebda22c41c2620a7868598f41aa
Diffstat (limited to 'sdnr/wt/odlux/framework/src/handlers')
-rw-r--r-- | sdnr/wt/odlux/framework/src/handlers/applicationStateHandler.ts | 52 | ||||
-rw-r--r-- | sdnr/wt/odlux/framework/src/handlers/authenticationHandler.ts | 28 |
2 files changed, 53 insertions, 27 deletions
diff --git a/sdnr/wt/odlux/framework/src/handlers/applicationStateHandler.ts b/sdnr/wt/odlux/framework/src/handlers/applicationStateHandler.ts index a93f96a82..b5c1ee7b1 100644 --- a/sdnr/wt/odlux/framework/src/handlers/applicationStateHandler.ts +++ b/sdnr/wt/odlux/framework/src/handlers/applicationStateHandler.ts @@ -16,16 +16,19 @@ * ============LICENSE_END========================================================================== */ import { IActionHandler } from '../flux/action'; -import { SetTitleAction } from '../actions/titleActions'; +import { SetTitleAction } from '../actions/titleActions'; +import { SetExternalLoginProviderAction } from '../actions/loginProvider'; import { AddSnackbarNotification, RemoveSnackbarNotification } from '../actions/snackbarActions'; import { AddErrorInfoAction, RemoveErrorInfoAction, ClearErrorInfoAction } from '../actions/errorActions'; import { MenuAction, MenuClosedByUser } from '../actions/menuAction' -import { IconType } from '../models/iconDefinition'; +import { SetWebsocketAction } from '../actions/websocketAction'; +import { IconType } from '../models/iconDefinition'; import { ErrorInfo } from '../models/errorInfo'; import { SnackbarItem } from '../models/snackbarItem'; -import { SetWebsocketAction } from '../actions/websocketAction'; +import { ExternalLoginProvider } from '../models/externalLoginProvider'; +import { ApplicationConfig } from '../models/applicationConfig'; export interface IApplicationState { title: string; @@ -36,9 +39,27 @@ export interface IApplicationState { errors: ErrorInfo[]; snackBars: SnackbarItem[]; isWebsocketAvailable: boolean | undefined; + externalLoginProviders: ExternalLoginProvider[] | null; + authentication: "basic"|"oauth", // basic + enablePolicy: boolean // false } -const applicationStateInit: IApplicationState = { title: "Loading ...", errors: [], snackBars: [], isMenuOpen: true, isMenuClosedByUser: false, isWebsocketAvailable: undefined }; +const applicationStateInit: IApplicationState = { + title: "Loading ...", + errors: [], + snackBars: [], + isMenuOpen: true, + isMenuClosedByUser: false, + isWebsocketAvailable: undefined, + externalLoginProviders: null, + authentication: "basic", + enablePolicy: false, +}; + +export const configureApplication = (config: ApplicationConfig) => { + applicationStateInit.authentication = config.authentication === "oauth" ? "oauth" : "basic"; + applicationStateInit.enablePolicy = config.authentication ? true : false; +} export const applicationStateHandler: IActionHandler<IApplicationState> = (state = applicationStateInit, action) => { if (action instanceof SetTitleAction) { @@ -46,14 +67,14 @@ export const applicationStateHandler: IActionHandler<IApplicationState> = (state ...state, title: action.title, icon: action.icon, - appId: action.appId + appId: action.appId, }; } else if (action instanceof AddErrorInfoAction) { state = { ...state, errors: [ ...state.errors, - action.errorInfo + action.errorInfo, ] }; } else if (action instanceof RemoveErrorInfoAction) { @@ -63,7 +84,7 @@ export const applicationStateHandler: IActionHandler<IApplicationState> = (state ...state, errors: [ ...state.errors.slice(0, index), - ...state.errors.slice(index + 1) + ...state.errors.slice(index + 1), ] }; } @@ -71,7 +92,7 @@ export const applicationStateHandler: IActionHandler<IApplicationState> = (state if (state.errors && state.errors.length) { state = { ...state, - errors: [] + errors: [], }; } } else if (action instanceof AddSnackbarNotification) { @@ -79,29 +100,34 @@ export const applicationStateHandler: IActionHandler<IApplicationState> = (state ...state, snackBars: [ ...state.snackBars, - action.notification + action.notification, ] }; } else if (action instanceof RemoveSnackbarNotification) { state = { ...state, - snackBars: state.snackBars.filter(s => s.key !== action.key) + snackBars: state.snackBars.filter(s => s.key !== action.key), }; } else if (action instanceof MenuAction) { state = { ...state, - isMenuOpen: action.isOpen + isMenuOpen: action.isOpen, } } else if (action instanceof MenuClosedByUser) { state = { ...state, - isMenuClosedByUser: action.isClosed + isMenuClosedByUser: action.isClosed, } } else if (action instanceof SetWebsocketAction) { state = { ...state, - isWebsocketAvailable: action.isConnected + isWebsocketAvailable: action.isConnected, + } + } else if (action instanceof SetExternalLoginProviderAction){ + state = { + ...state, + externalLoginProviders: action.externalLoginProvders, } } return state; diff --git a/sdnr/wt/odlux/framework/src/handlers/authenticationHandler.ts b/sdnr/wt/odlux/framework/src/handlers/authenticationHandler.ts index 82b228dc0..5217bd414 100644 --- a/sdnr/wt/odlux/framework/src/handlers/authenticationHandler.ts +++ b/sdnr/wt/odlux/framework/src/handlers/authenticationHandler.ts @@ -16,31 +16,26 @@ * ============LICENSE_END========================================================================== */ import { IActionHandler } from '../flux/action'; -import { UpdateAuthentication } from '../actions/authentication'; +import { UpdatePolicies, UpdateUser } from '../actions/authentication'; -import { User } from '../models/authentication'; +import { AuthPolicy, User } from '../models/authentication'; import { onLogin, onLogout } from '../services/applicationApi'; import { startWebsocketSession, endWebsocketSession } from '../services/notificationService'; export interface IAuthenticationState { user?: User; -} - -const initialToken = localStorage.getItem("userToken"); - -if (initialToken !== null) { - startWebsocketSession(); + policies?: AuthPolicy[]; } const authenticationStateInit: IAuthenticationState = { - user: initialToken && User.fromString(initialToken) || undefined + user: undefined }; export const authenticationStateHandler: IActionHandler<IAuthenticationState> = (state = authenticationStateInit, action) => { - if (action instanceof UpdateAuthentication) { - - const user = action.bearerToken && new User(action.bearerToken) || undefined; + if (action instanceof UpdateUser) { + const {user} = action; + if (user) { localStorage.setItem("userToken", user.toString()); startWebsocketSession(); @@ -53,9 +48,14 @@ export const authenticationStateHandler: IActionHandler<IAuthenticationState> = state = { ...state, - user + user, }; + } else if (action instanceof UpdatePolicies) { + state = { + ...state, + policies: action.authPolicies, + }; } - return state; }; + |