68 lines
1.7 KiB
JavaScript
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');
|
|
},
|
|
};
|