faszom
This commit is contained in:
134
src/api/index.js
134
src/api/index.js
@@ -0,0 +1,134 @@
|
||||
import axios from 'axios'
|
||||
|
||||
const API_BASE_URL = process.env.VUE_APP_API_LOCATION
|
||||
const LOCAL_STORAGE_KEY = "JWT"
|
||||
|
||||
const COMMON_ERROR_CODES = {
|
||||
403: "Access Denied",
|
||||
401: "Authentication failed",
|
||||
400: "Invalid Request",
|
||||
417: "Invalid Request"
|
||||
}
|
||||
|
||||
export default new class {
|
||||
|
||||
_setupHTTPObject() {
|
||||
const token = localStorage.getItem(LOCAL_STORAGE_KEY)
|
||||
|
||||
let headers = {}
|
||||
if (token) {
|
||||
headers = {'Authorization': token}
|
||||
}
|
||||
|
||||
this.http = axios.create({
|
||||
baseURL: API_BASE_URL,
|
||||
timeout: 15000, // 15 sec, mert szar a mobilnet
|
||||
headers: headers
|
||||
})
|
||||
}
|
||||
|
||||
constructor() {
|
||||
this._setupHTTPObject()
|
||||
}
|
||||
|
||||
get haveToken() {
|
||||
return !!localStorage.getItem(LOCAL_STORAGE_KEY)
|
||||
}
|
||||
|
||||
_performApiCall(method, url, data, precheckToken, expectedStatus, errorTexts = COMMON_ERROR_CODES) {
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
if (precheckToken && !this.haveToken) {
|
||||
return reject({
|
||||
status: null,
|
||||
text: "Not logged in",
|
||||
data: null
|
||||
});
|
||||
}
|
||||
|
||||
this.http.request({
|
||||
url, method, data,
|
||||
validateStatus(status) {
|
||||
return status === expectedStatus;
|
||||
}
|
||||
}).then((response) => {
|
||||
|
||||
return resolve(response.data);
|
||||
|
||||
}).catch((error) => {
|
||||
|
||||
if (!error.response) { // Network error (CORS?)
|
||||
|
||||
return reject({
|
||||
status: null,
|
||||
text: "Network error",
|
||||
data: null
|
||||
})
|
||||
|
||||
} else { // Server side error
|
||||
|
||||
return reject({
|
||||
status: error.response.status,
|
||||
text: errorTexts[error.response.status] || "Network or server error",
|
||||
data: error.response.data
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
performLogin(name, password) {
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
this._performApiCall('post', '/auth/login', {name, password}, false, 201, {
|
||||
401: "Invalid credentials",
|
||||
...COMMON_ERROR_CODES
|
||||
}).then((data) => {
|
||||
|
||||
localStorage.setItem(LOCAL_STORAGE_KEY, data.token)
|
||||
this._setupHTTPObject() // Update JWT token memes
|
||||
return resolve({name})
|
||||
|
||||
}).catch(reject)
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
performLogout() {
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
this._performApiCall('delete', '/auth/login', null, true, 204).then(() => {
|
||||
|
||||
localStorage.removeItem(LOCAL_STORAGE_KEY)
|
||||
this._setupHTTPObject() // Update JWT token memes
|
||||
return resolve(null)
|
||||
|
||||
}).catch(reject)
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
getMyInfo() {
|
||||
return this._performApiCall('get', '/auth/me', null, true, 200);
|
||||
}
|
||||
|
||||
getAllLists() {
|
||||
return this._performApiCall('get', '/lists', null, true, 200);
|
||||
}
|
||||
|
||||
getList(id) {
|
||||
return this._performApiCall('get', `/lists/${id}`, null, true, 200);
|
||||
}
|
||||
|
||||
getTrackFromList(listid, trackid) {
|
||||
return this._performApiCall('get', `/lists/${listid}/${trackid}`, null, true, 200);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user