From 152cb381ea2c915c762416092337ce1d8589d1c6 Mon Sep 17 00:00:00 2001 From: Aijana Schumann Date: Mon, 6 Dec 2021 15:09:15 +0100 Subject: 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 Change-Id: I21137756b204287e25766a9646bf2faf7bad9d35 --- .../framework/src/services/broadcastService.ts | 110 +++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 sdnr/wt/odlux/framework/src/services/broadcastService.ts (limited to 'sdnr/wt/odlux/framework/src/services/broadcastService.ts') diff --git a/sdnr/wt/odlux/framework/src/services/broadcastService.ts b/sdnr/wt/odlux/framework/src/services/broadcastService.ts new file mode 100644 index 000000000..85ae3e65c --- /dev/null +++ b/sdnr/wt/odlux/framework/src/services/broadcastService.ts @@ -0,0 +1,110 @@ +/** + * ============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 { setGeneralSettingsAction } from "../actions/settingsAction"; +import { loginUserAction, logoutUser } from "../actions/authentication"; +import { ReplaceAction } from "../actions/navigationActions"; +import { User } from "../models/authentication"; +import { ApplicationStore } from "../store/applicationStore"; + +type Broadcaster = {channel: BroadcastChannel, key: String}; + +type AuthTypes = 'login' | 'logout'; +export type AuthMessage={key: AuthTypes, data: any}; + +type SettingsType = 'general'; +export type SettingsMessage={key: SettingsType, enableNotifications: boolean, user: string}; + +let channels: Broadcaster[] = []; +let store : ApplicationStore | null = null; + +export const subscribe = (channel: BroadcastChannel, channelName: string) => { + channels.push({channel: channel, key: channelName}); +} + +export const startBroadcastChannel = (applicationStore: ApplicationStore)=>{ + store=applicationStore; + + //might decide to use one general broadcast channel with more keys in the future + createAuthBroadcastChannel(); + createSettingsBroadcastChannel(); +} + +const createSettingsBroadcastChannel = () =>{ + + const name = "odlux_settings"; + const bc: BroadcastChannel = new BroadcastChannel(name); + channels.push({ channel: bc, key: name }); + + bc.onmessage = (eventMessage: MessageEvent) => { + console.log(eventMessage) + + if (eventMessage.data.key === 'general') { + + if (store?.state.framework.authenticationState.user) { + const data = eventMessage.data; + if(store.state.framework.authenticationState.user.user === data.user){ + store?.dispatch(setGeneralSettingsAction(data.enableNotifications)); + } + } + } + } + +} + +const createAuthBroadcastChannel = () => { + const name = "odlux_auth"; + const bc: BroadcastChannel = new BroadcastChannel(name); + channels.push({ channel: bc, key: name }); + + bc.onmessage = (eventMessage: MessageEvent) => { + console.log(eventMessage) + + if (eventMessage.data.key === 'login') { + if (!store?.state.framework.authenticationState.user) { + const initialToken = localStorage.getItem("userToken"); + if (initialToken) { + store?.dispatch(loginUserAction(User.fromString(initialToken))); + store?.dispatch(new ReplaceAction("/")); + } + } + } + else if (eventMessage.data.key === 'logout') { + + if (store?.state.framework.authenticationState.user) { + store?.dispatch(logoutUser()); + store?.dispatch(new ReplaceAction("/login")); + } + } + } +} + +export const getBroadcastChannel = (channelName: string) =>{ + const foundChannel = channels.find(s =>s.key===channelName); + return foundChannel?.channel; +} + + +export const sendMessage = (data: any, channel: string) =>{ + + const foundChannel = channels.find(s =>s.key===channel); + if(foundChannel){ + foundChannel.channel.postMessage(data); + } + + } -- cgit 1.2.3-korg