onspot-frontend/src/api/index.js

134 lines
3.3 KiB
JavaScript

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);
}
}