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/authentication.ts | |
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/authentication.ts')
-rw-r--r-- | sdnr/wt/odlux/framework/src/actions/authentication.ts | 54 |
1 files changed, 54 insertions, 0 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 |