aboutsummaryrefslogtreecommitdiff
path: root/app/services
diff options
context:
space:
mode:
authorBen Beltran <ben@nsovocal.com>2017-01-31 00:53:36 -0600
committerBen Beltran <ben@nsovocal.com>2017-01-31 00:53:36 -0600
commita3f9e2603dfdf8c492ec0dc355cd434fc6100f06 (patch)
tree52c84831a3a6070e3e01c5ada5b862fd56f28327 /app/services
parent7eb26514c478cfa06a797e9d63a29ef6a6d16d59 (diff)
parentf74591da2d5c42b8a1e658d17310e604bedcf856 (diff)
Merge branch 'release/1.0.0'HEADmain
Diffstat (limited to 'app/services')
-rw-r--r--app/services/auth.js75
1 files changed, 75 insertions, 0 deletions
diff --git a/app/services/auth.js b/app/services/auth.js
new file mode 100644
index 0000000..32db321
--- /dev/null
+++ b/app/services/auth.js
@@ -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;
+ }
+};