]> git.r.bdr.sh - rbdr/dasein/blobdiff - app/services/auth.js
Merge branch 'release/1.0.0'
[rbdr/dasein] / app / services / auth.js
diff --git a/app/services/auth.js b/app/services/auth.js
new file mode 100644 (file)
index 0000000..32db321
--- /dev/null
@@ -0,0 +1,75 @@
+import Axios from 'axios';
+
+const internals = {};
+
+/* global localStorage */
+
+internals.kInitiateLoginRoute = '/api/auth/login';
+internals.kHandleCallbackRoute = '/api/auth/callback';
+
+export default internals.AuthService = class AuthService {
+
+  constructor() {
+
+    this.authenticated = false;
+
+    // Bootstrap from local storage.
+    if (localStorage.hasOwnProperty('user') && localStorage.hasOwnProperty('token')
+        && localStorage.hasOwnProperty('expiresAt')) {
+
+      if (parseInt(localStorage.getItem('expiresAt')) > Date.now()) {
+        this.expiresAt = localStorage.getItem('expiresAt');
+        this.user = JSON.parse(localStorage.getItem('user'));
+        this.token = localStorage.getItem('token');
+        this.authenticated = true;
+      }
+    }
+  }
+
+  // Initiates the login process. Resolves to an object that contains the URL
+  // to redirect to to continue processing.
+  initiateLogin() {
+
+    return Axios.get(internals.kInitiateLoginRoute).then((response) => {
+
+      return response.data;
+    });
+  }
+
+  // Posts the oAuthToken and verifier to the API to get back a user object
+  // and a signed JWT
+  getUserObject(oAuthToken, oAuthVerifier) {
+
+    return Axios.post(internals.kHandleCallbackRoute, {
+      oAuthToken,
+      oAuthVerifier
+    }).then((response) => {
+
+      return response.data;
+    });
+  }
+
+  // Logs in the user by setting the user and token
+  login(user, token, expiresAt) {
+
+    localStorage.setItem('user', JSON.stringify(user));
+    localStorage.setItem('token', token);
+    localStorage.setItem('expiresAt', expiresAt);
+    this.user = user;
+    this.token = token;
+    this.expiresAt = expiresAt;
+    this.authenticated = true;
+  }
+
+  // Logs a user out by removing the user and token
+  logout() {
+
+    localStorage.removeItem('user');
+    localStorage.removeItem('token');
+    localStorage.removeItem('expiresAt');
+    delete this.user;
+    delete this.token;
+    delete this.expiresAt;
+    this.authenticated = false;
+  }
+};