aboutsummaryrefslogtreecommitdiffstats
path: root/sdnr/wt/odlux/framework/src/handlers
diff options
context:
space:
mode:
authorAijana Schumann <aijana.schumann@highstreet-technologies.com>2021-02-15 18:22:28 +0100
committerAijana Schumann <aijana.schumann@highstreet-technologies.com>2021-02-15 18:23:57 +0100
commit8515052e1a6de2de56effbc61c73d3aa80169a93 (patch)
tree8707b2b587890522b35cd7dd1b54ce4f006f1c3a /sdnr/wt/odlux/framework/src/handlers
parentdb20d36689c011333ed7216b64d3e987e473f1ee (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.ts52
-rw-r--r--sdnr/wt/odlux/framework/src/handlers/authenticationHandler.ts28
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;
};
+