aboutsummaryrefslogtreecommitdiffstats
path: root/sdnr/wt/odlux/framework/src/actions
diff options
context:
space:
mode:
authorAijana Schumann <aijana.schumann@highstreet-technologies.com>2021-12-06 15:09:15 +0100
committerAijana Schumann <aijana.schumann@highstreet-technologies.com>2021-12-06 15:12:24 +0100
commit152cb381ea2c915c762416092337ce1d8589d1c6 (patch)
tree63b71c8343f9292281f5d7f5eac14342fec06402 /sdnr/wt/odlux/framework/src/actions
parent8ea94e1210671b941f84abfe16e248cfa086fe49 (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.ts54
-rw-r--r--sdnr/wt/odlux/framework/src/actions/settingsAction.ts64
-rw-r--r--sdnr/wt/odlux/framework/src/actions/websocketAction.ts20
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