X-Git-Url: https://git.r.bdr.sh/rbdr/dasein/blobdiff_plain/7eb26514c478cfa06a797e9d63a29ef6a6d16d59..a3f9e2603dfdf8c492ec0dc355cd434fc6100f06:/app/services/auth.js 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; + } +};