2018-01-09 17:52:26 +01:00
|
|
|
import { API_HOST, API_PATH } from '../api/_entrypoint';
|
|
|
|
|
|
|
|
// URL and endpoint constants
|
|
|
|
const LOGIN_URL = `${API_HOST}${API_PATH}/login`;
|
|
|
|
const SIGNUP_URL = `${API_HOST}${API_PATH}/users/`;
|
2018-01-13 23:33:03 +01:00
|
|
|
const CHECK_AUTH = `${API_HOST}${API_PATH}/user/`;
|
2018-01-09 17:52:26 +01:00
|
|
|
const REFRESH_TOKEN = `${API_HOST}${API_PATH}/token/refresh`;
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
|
|
|
// Send a request to the login URL and save the returned JWT
|
2018-01-13 23:33:03 +01:00
|
|
|
login(creds, success, error) {
|
2018-01-09 17:52:26 +01:00
|
|
|
fetch(LOGIN_URL, { method: 'POST', body: creds, headers: { 'Content-Type': 'application/json' } })
|
2018-01-13 23:33:03 +01:00
|
|
|
.then((response) => {
|
|
|
|
if (response.status === 200) {
|
|
|
|
return response.json();
|
2018-01-09 17:52:26 +01:00
|
|
|
}
|
2018-01-13 23:33:03 +01:00
|
|
|
throw response.json();
|
|
|
|
})
|
|
|
|
.then((data) => {
|
2018-01-09 17:52:26 +01:00
|
|
|
localStorage.setItem('token', data.token);
|
2018-01-13 23:33:03 +01:00
|
|
|
// localStorage.setItem('refresh_token', data.refresh_token);
|
|
|
|
return success(data);
|
|
|
|
})
|
|
|
|
.catch(err => error(err));
|
2018-01-09 17:52:26 +01:00
|
|
|
},
|
|
|
|
|
2018-01-13 23:33:03 +01:00
|
|
|
signup(creds, success, error) {
|
2018-01-09 17:52:26 +01:00
|
|
|
fetch(SIGNUP_URL, { method: 'POST', body: creds, headers: { 'Content-Type': 'application/json' } })
|
2018-01-13 23:33:03 +01:00
|
|
|
.then((response) => {
|
|
|
|
if (response.status === 200) {
|
|
|
|
return response.json();
|
2018-01-09 17:52:26 +01:00
|
|
|
}
|
2018-01-13 23:33:03 +01:00
|
|
|
throw response.json();
|
|
|
|
})
|
|
|
|
.then((data) => {
|
2018-01-09 17:52:26 +01:00
|
|
|
localStorage.setItem('token', data.token);
|
2018-01-13 23:33:03 +01:00
|
|
|
// localStorage.setItem('refresh_token', data.refresh_token);
|
2018-01-09 17:52:26 +01:00
|
|
|
|
2018-01-13 23:33:03 +01:00
|
|
|
return success(data);
|
|
|
|
}).catch(err => error(err));
|
2018-01-09 17:52:26 +01:00
|
|
|
},
|
|
|
|
refreshToken(store, successHandler, errorHandler) {
|
|
|
|
const refreshToken = localStorage.getItem('refresh_token');
|
2018-01-13 23:33:03 +01:00
|
|
|
console.log('We are refreshing the jwt token');
|
|
|
|
fetch(REFRESH_TOKEN, { method: 'POST', body: JSON.stringify({ refresh_token: refreshToken }), headers: { 'Content-Type': 'application/json' } })
|
2018-01-09 17:52:26 +01:00
|
|
|
.then((response) => {
|
|
|
|
if (response.ok) {
|
|
|
|
return response.json();
|
|
|
|
}
|
2018-01-13 23:33:03 +01:00
|
|
|
return errorHandler('Error while authenticating');
|
2018-01-09 17:52:26 +01:00
|
|
|
})
|
|
|
|
.then((response) => {
|
2018-01-13 23:33:03 +01:00
|
|
|
console.log('We have a new token');
|
2018-01-09 17:52:26 +01:00
|
|
|
this.authenticated = true;
|
|
|
|
store.commit('LOGIN_USER', response);
|
|
|
|
localStorage.setItem('token', response.token);
|
|
|
|
console.log("Let's try to auth again");
|
|
|
|
successHandler();
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
// To log out, we just need to remove the token
|
|
|
|
logout() {
|
|
|
|
localStorage.removeItem('refresh_token');
|
|
|
|
localStorage.removeItem('token');
|
|
|
|
this.authenticated = false;
|
|
|
|
},
|
|
|
|
|
|
|
|
jwt_decode(token) {
|
|
|
|
const base64Url = token.split('.')[1];
|
|
|
|
const base64 = base64Url.replace('-', '+').replace('_', '/');
|
|
|
|
return JSON.parse(window.atob(base64));
|
|
|
|
},
|
|
|
|
|
|
|
|
getTokenExpirationDate(encodedToken) {
|
|
|
|
const token = this.jwt_decode(encodedToken);
|
|
|
|
if (!token.exp) { return null; }
|
|
|
|
|
|
|
|
const date = new Date(0);
|
|
|
|
date.setUTCSeconds(token.exp);
|
|
|
|
|
|
|
|
return date;
|
|
|
|
},
|
|
|
|
|
|
|
|
isTokenExpired(token) {
|
|
|
|
const expirationDate = this.getTokenExpirationDate(token);
|
|
|
|
return expirationDate < new Date();
|
|
|
|
},
|
|
|
|
|
|
|
|
getUser(store, successHandler, errorHandler) {
|
2018-01-13 23:33:03 +01:00
|
|
|
console.log('We are checking the auth');
|
2018-01-09 17:52:26 +01:00
|
|
|
this.token = localStorage.getItem('token');
|
|
|
|
const options = {};
|
|
|
|
options.headers = new Headers();
|
|
|
|
options.headers.set('Authorization', `Bearer ${this.token}`);
|
|
|
|
fetch(CHECK_AUTH, options)
|
|
|
|
.then((response) => {
|
|
|
|
if (response.ok) {
|
|
|
|
return response.json();
|
|
|
|
}
|
2018-01-13 23:33:03 +01:00
|
|
|
return errorHandler('Error while authenticating');
|
|
|
|
}).then((response) => {
|
2018-01-09 17:52:26 +01:00
|
|
|
this.authenticated = true;
|
|
|
|
console.log(response);
|
2018-01-13 23:33:03 +01:00
|
|
|
store.commit('LOAD_USER', response.data);
|
|
|
|
return successHandler();
|
|
|
|
});
|
2018-01-09 17:52:26 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
// The object to be passed as a header for authenticated requests
|
|
|
|
getAuthHeader() {
|
|
|
|
return {
|
|
|
|
Authorization: `Bearer ${localStorage.getItem('access_token')}`,
|
|
|
|
};
|
|
|
|
},
|
|
|
|
};
|