summaryrefslogtreecommitdiff
path: root/opendc-web/opendc-web-ui/src/sagas/users.js
diff options
context:
space:
mode:
Diffstat (limited to 'opendc-web/opendc-web-ui/src/sagas/users.js')
-rw-r--r--opendc-web/opendc-web-ui/src/sagas/users.js44
1 files changed, 44 insertions, 0 deletions
diff --git a/opendc-web/opendc-web-ui/src/sagas/users.js b/opendc-web/opendc-web-ui/src/sagas/users.js
new file mode 100644
index 00000000..74e652f6
--- /dev/null
+++ b/opendc-web/opendc-web-ui/src/sagas/users.js
@@ -0,0 +1,44 @@
+import { call, put } from 'redux-saga/effects'
+import { logInSucceeded } from '../actions/auth'
+import { addToStore } from '../actions/objects'
+import { fetchAuthorizationsOfCurrentUserSucceeded } from '../actions/users'
+import { performTokenSignIn } from '../api/routes/token-signin'
+import { addUser } from '../api/routes/users'
+import { saveAuthLocalStorage } from '../auth/index'
+import { fetchAndStoreProject, fetchAndStoreUser } from './objects'
+
+export function* onFetchLoggedInUser(action) {
+ try {
+ const tokenResponse = yield call(performTokenSignIn, action.payload.authToken)
+
+ let userId = tokenResponse.userId
+
+ if (tokenResponse.isNewUser) {
+ saveAuthLocalStorage({ authToken: action.payload.authToken })
+ const newUser = yield call(addUser, action.payload)
+ userId = newUser._id
+ }
+
+ yield put(logInSucceeded(Object.assign({ userId }, action.payload)))
+ } catch (error) {
+ console.error(error)
+ }
+}
+
+export function* onFetchAuthorizationsOfCurrentUser(action) {
+ try {
+ const user = yield call(fetchAndStoreUser, action.userId)
+
+ for (const authorization of user.authorizations) {
+ authorization.userId = action.userId
+ yield put(addToStore('authorization', authorization))
+ yield fetchAndStoreProject(authorization.projectId)
+ }
+
+ const authorizationIds = user.authorizations.map((authorization) => [action.userId, authorization.projectId])
+
+ yield put(fetchAuthorizationsOfCurrentUserSucceeded(authorizationIds))
+ } catch (error) {
+ console.error(error)
+ }
+}