summaryrefslogtreecommitdiff
path: root/opendc-web/opendc-web-ui/src/auth/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'opendc-web/opendc-web-ui/src/auth/index.js')
-rw-r--r--opendc-web/opendc-web-ui/src/auth/index.js57
1 files changed, 57 insertions, 0 deletions
diff --git a/opendc-web/opendc-web-ui/src/auth/index.js b/opendc-web/opendc-web-ui/src/auth/index.js
new file mode 100644
index 00000000..b5953990
--- /dev/null
+++ b/opendc-web/opendc-web-ui/src/auth/index.js
@@ -0,0 +1,57 @@
+import { LOG_IN_SUCCEEDED, LOG_OUT } from '../actions/auth'
+import { DELETE_CURRENT_USER_SUCCEEDED } from '../actions/users'
+
+const getAuthObject = () => {
+ const authItem = localStorage.getItem('auth')
+ if (!authItem || authItem === '{}') {
+ return undefined
+ }
+ return JSON.parse(authItem)
+}
+
+export const userIsLoggedIn = () => {
+ const authObj = getAuthObject()
+
+ if (!authObj || !authObj.googleId) {
+ return false
+ }
+
+ const currentTime = new Date().getTime()
+ return parseInt(authObj.expiresAt, 10) - currentTime > 0
+}
+
+export const getAuthToken = () => {
+ const authObj = getAuthObject()
+ if (!authObj) {
+ return undefined
+ }
+
+ return authObj.authToken
+}
+
+export const saveAuthLocalStorage = (payload) => {
+ localStorage.setItem('auth', JSON.stringify(payload))
+}
+
+export const clearAuthLocalStorage = () => {
+ localStorage.setItem('auth', '')
+}
+
+export const authRedirectMiddleware = (store) => (next) => (action) => {
+ switch (action.type) {
+ case LOG_IN_SUCCEEDED:
+ saveAuthLocalStorage(action.payload)
+ window.location.href = '/projects'
+ break
+ case LOG_OUT:
+ case DELETE_CURRENT_USER_SUCCEEDED:
+ clearAuthLocalStorage()
+ window.location.href = '/'
+ break
+ default:
+ next(action)
+ return
+ }
+
+ next(action)
+}