Files
ezbookkeeping/src/lib/services.js
T
2020-10-22 01:30:25 +08:00

68 lines
1.7 KiB
JavaScript

import axios from 'axios';
import userState from "./userstate.js";
axios.defaults.baseURL = '/api';
axios.interceptors.request.use(config => {
const token = userState.getToken();
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
}, error => {
return Promise.reject(error);
});
axios.interceptors.response.use(response => {
return response;
}, error => {
if (error.response && error.response.data && error.response.data.errorCode) {
const errorCode = error.response.data.errorCode;
if (202001 <= errorCode && errorCode <= 202007) { // unauthorized access or token is invalid
userState.clearToken();
location.reload();
return Promise.reject({ processed: true });
}
}
return Promise.reject(error);
});
export default {
setLocale: locale => {
axios.defaults.headers.common['Accept-Language'] = locale;
},
authorize: ({ loginName, password }) => {
return axios.post('authorize.json', {
loginName,
password
});
},
authorize2FA: ({ passcode, token }) => {
return axios.post('2fa/authorize.json', {
passcode
}, {
headers: {
Authorization: `Bearer ${token}`
}
});
},
authorize2FAByBackupCode: ({ recoveryCode, token }) => {
return axios.post('2fa/recovery.json', {
recoveryCode
}, {
headers: {
Authorization: `Bearer ${token}`
}
});
},
logout: () => {
return axios.get('v1/logout.json');
},
refreshToken: () => {
return axios.post('v1/tokens/refresh.json');
},
};