diff options
author | Aijana Schumann <aijana.schumann@highstreet-technologies.com> | 2021-12-06 15:09:15 +0100 |
---|---|---|
committer | Aijana Schumann <aijana.schumann@highstreet-technologies.com> | 2021-12-06 15:12:24 +0100 |
commit | 152cb381ea2c915c762416092337ce1d8589d1c6 (patch) | |
tree | 63b71c8343f9292281f5d7f5eac14342fec06402 /sdnr/wt/odlux/framework/src/actions | |
parent | 8ea94e1210671b941f84abfe16e248cfa086fe49 (diff) |
Update ODLUX
Update login view, add logout after user session ends, add user settings, several bugfixes
Issue-ID: CCSDK-3540
Signed-off-by: Aijana Schumann <aijana.schumann@highstreet-technologies.com>
Change-Id: I21137756b204287e25766a9646bf2faf7bad9d35
Diffstat (limited to 'sdnr/wt/odlux/framework/src/actions')
-rw-r--r-- | sdnr/wt/odlux/framework/src/actions/authentication.ts | 54 | ||||
-rw-r--r-- | sdnr/wt/odlux/framework/src/actions/settingsAction.ts | 64 | ||||
-rw-r--r-- | sdnr/wt/odlux/framework/src/actions/websocketAction.ts | 20 |
3 files changed, 137 insertions, 1 deletions
diff --git a/sdnr/wt/odlux/framework/src/actions/authentication.ts b/sdnr/wt/odlux/framework/src/actions/authentication.ts index de8093573..20a248dc1 100644 --- a/sdnr/wt/odlux/framework/src/actions/authentication.ts +++ b/sdnr/wt/odlux/framework/src/actions/authentication.ts @@ -15,8 +15,12 @@ * the License. * ============LICENSE_END========================================================================== */ +import { Dispatch } from '../flux/store'; import { Action } from '../flux/action'; import { AuthPolicy, User } from '../models/authentication'; +import { GeneralSettings } from '../models/settings'; +import { SetGeneralSettingsAction, setGeneralSettingsAction } from './settingsAction'; +import { endWebsocketSession } from '../services/notificationService'; export class UpdateUser extends Action { @@ -30,4 +34,54 @@ export class UpdatePolicies extends Action { constructor (public authPolicies?: AuthPolicy[]) { super(); } +} + + +export const loginUserAction = (user?: User) => (dispatcher: Dispatch) =>{ + + dispatcher(new UpdateUser(user)); + loadUserSettings(user, dispatcher); + + +} + +export const logoutUser = () => (dispatcher: Dispatch) =>{ + + dispatcher(new UpdateUser(undefined)); + dispatcher(new SetGeneralSettingsAction(null)); + endWebsocketSession(); +} + +const loadUserSettings = (user: User | undefined, dispatcher: Dispatch) =>{ + + + //fetch used, because state change for user login is not done when frameworks restRequest call is started (and is accordingly undefined -> /userdata call yields 401, unauthorized) and triggering an action from inside the handler / login event is impossible + //no timeout used, because it's bad practise to add a timeout to hopefully avoid a race condition + //hence, fetch used to simply use supplied user data for getting settings + + if(user && user.isValid){ + + fetch("/userdata", { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'Authorization': `${user.tokenType} ${user.token}` + } + }).then((res: Response)=>{ + if(res.status==200){ + return res.json(); + }else{ + return null; + } + }).then((result:GeneralSettings)=>{ + if(result?.general){ + //will start websocket session if applicable + dispatcher(setGeneralSettingsAction(result.general.areNotificationsEnabled!)); + + }else{ + dispatcher(setGeneralSettingsAction(false)); + } + }) + } }
\ No newline at end of file diff --git a/sdnr/wt/odlux/framework/src/actions/settingsAction.ts b/sdnr/wt/odlux/framework/src/actions/settingsAction.ts new file mode 100644 index 000000000..ffcdfc26a --- /dev/null +++ b/sdnr/wt/odlux/framework/src/actions/settingsAction.ts @@ -0,0 +1,64 @@ +/** + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt odlux + * ================================================================================================= + * Copyright (C) 2021 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ + +import { Dispatch } from "../flux/store"; +import { Action } from "../flux/action"; +import { GeneralSettings } from "../models/settings"; +import { getSettings, putSettings } from "../services/settingsService"; +import { startWebsocketSession, suspendWebsocketSession } from "../services/notificationService"; + + +export class SetGeneralSettingsAction extends Action{ + /** + * + */ + constructor(public areNoticationsActive: boolean|null) { + super(); + + } +} + +export const setGeneralSettingsAction = (value: boolean) => (dispatcher: Dispatch) =>{ + + dispatcher(new SetGeneralSettingsAction(value)); + + if(value){ + startWebsocketSession(); + }else{ + suspendWebsocketSession(); + } +} + + +export const updateGeneralSettingsAction = (activateNotifications: boolean) => async (dispatcher: Dispatch) =>{ + + const value: GeneralSettings = {general:{areNotificationsEnabled: activateNotifications}}; + const result = await putSettings("/general", JSON.stringify(value.general)); + dispatcher(setGeneralSettingsAction(activateNotifications)); + +} + +export const getGeneralSettingsAction = () => async (dispatcher: Dispatch) => { + + const result = await getSettings<GeneralSettings>(); + + if(result && result.general){ + dispatcher(new SetGeneralSettingsAction(result.general.areNotificationsEnabled!)) + } + +}
\ No newline at end of file diff --git a/sdnr/wt/odlux/framework/src/actions/websocketAction.ts b/sdnr/wt/odlux/framework/src/actions/websocketAction.ts index 8512d59d5..0b45f7ac7 100644 --- a/sdnr/wt/odlux/framework/src/actions/websocketAction.ts +++ b/sdnr/wt/odlux/framework/src/actions/websocketAction.ts @@ -1,8 +1,26 @@ +/** + * ============LICENSE_START======================================================================== + * ONAP : ccsdk feature sdnr wt odlux + * ================================================================================================= + * Copyright (C) 2021 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + * ============LICENSE_END========================================================================== + */ + import { Action } from "../flux/action"; export class SetWebsocketAction extends Action { - constructor(public isConnected: boolean) { + constructor(public isConnected: boolean|null) { super(); } }
\ No newline at end of file |