mirror of
https://git.meshkee.com/cssd/cssd-back.git
synced 2026-10-11 20:21:06 +03:30
101 lines
2.6 KiB
JavaScript
Vendored
101 lines
2.6 KiB
JavaScript
Vendored
import axios from 'axios'
|
|
import { TokenService } from '../auth/storage.service'
|
|
import store from '@/store'
|
|
|
|
const ApiService = {
|
|
|
|
init(baseURL) {
|
|
axios.defaults.baseURL = baseURL;
|
|
},
|
|
|
|
setHeader() {
|
|
axios.defaults.headers.common["Accept"] = `application/json`;
|
|
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
|
|
},
|
|
|
|
setAuthHeader() {
|
|
axios.defaults.headers.common["Authorization"] = `Bearer ${TokenService.getToken()}`;
|
|
},
|
|
|
|
removeAuthHeader() {
|
|
axios.defaults.headers.common["Authorization"] = null;
|
|
},
|
|
|
|
get(resource) {
|
|
return axios.get(resource)
|
|
},
|
|
|
|
post(resource, data) {
|
|
return axios.post(resource, data)
|
|
},
|
|
|
|
put(resource, data) {
|
|
data['_method'] = 'put';
|
|
return axios.post(resource, data)
|
|
},
|
|
|
|
delete(resource) {
|
|
let data = {'_method': 'delete'};
|
|
return axios.post(resource, data)
|
|
},
|
|
|
|
/**
|
|
* Perform a custom Axios request.
|
|
*
|
|
* data is an object containing the following properties:
|
|
* - method
|
|
* - url
|
|
* - data ... request payload
|
|
* - auth (optional)
|
|
* - username
|
|
* - password
|
|
**/
|
|
customRequest(data) {
|
|
return axios(data);
|
|
},
|
|
|
|
_401interceptor: null,
|
|
|
|
mount401Interceptor() {
|
|
this._401interceptor = axios.interceptors.response.use(
|
|
(response) => {
|
|
return response
|
|
},
|
|
async (error) => {
|
|
if (error.request.status == 401) {
|
|
if (error.config.url.includes('login')) {
|
|
// Refresh token has failed. Logout the user
|
|
store.dispatch('auth/logout');
|
|
throw error;
|
|
} else {
|
|
// Refresh the access token
|
|
try{
|
|
await store.dispatch('refreshToken')
|
|
// Retry the original request
|
|
return this.customRequest({
|
|
method: error.config.method,
|
|
url: error.config.url,
|
|
data: error.config.data
|
|
})
|
|
} catch (e) {
|
|
// Refresh has failed - reject the original request
|
|
throw error
|
|
}
|
|
}
|
|
}
|
|
|
|
// If error was not 401 just reject as is
|
|
throw error
|
|
}
|
|
)
|
|
},
|
|
|
|
unmount401Interceptor() {
|
|
// Eject the interceptor
|
|
axios.interceptors.response.eject(this._401interceptor)
|
|
}
|
|
}
|
|
|
|
export default ApiService
|
|
export { ApiService }
|