144 lines
2.8 KiB
JavaScript
144 lines
2.8 KiB
JavaScript
import axios from 'axios'
|
|
import { GeneralAddress } from './abstractAddress'
|
|
|
|
const APIAddress = GeneralAddress
|
|
|
|
let defaultBody = {}
|
|
|
|
const _getList = async (endpoint, token) => {
|
|
return await responseAbstract(
|
|
endpoint,
|
|
'GET',
|
|
token,
|
|
defaultBody
|
|
)
|
|
}
|
|
|
|
const _getOne = async (endpoint, objectId, token) => {
|
|
return await responseAbstract(
|
|
endpoint + objectId + '/',
|
|
'GET',
|
|
token,
|
|
defaultBody
|
|
)
|
|
}
|
|
|
|
const _post = async (endpoint, body, token) => {
|
|
return await responseAbstract(
|
|
endpoint,
|
|
'POST',
|
|
token,
|
|
body
|
|
)
|
|
}
|
|
|
|
const _patch = async (endpoint, objectId, body, token) => {
|
|
return await responseAbstract(
|
|
endpoint + objectId + '/',
|
|
'PATCH',
|
|
token,
|
|
body
|
|
)
|
|
}
|
|
|
|
const _put = async (endpoint, objectId, body, token) => {
|
|
return await responseAbstract(
|
|
endpoint + objectId + '/',
|
|
'PUT',
|
|
token,
|
|
body
|
|
)
|
|
}
|
|
|
|
const _delete = async (endpoint, objectId, token) => {
|
|
let slash = '/'
|
|
if ( objectId === '' )
|
|
slash = ''
|
|
return await responseAbstract(
|
|
endpoint + objectId + slash,
|
|
'DELETE',
|
|
token,
|
|
defaultBody
|
|
)
|
|
}
|
|
|
|
|
|
const responseAbstract = async (endpoint, method, token, body) => {
|
|
let response = await axios(
|
|
headerBuilder(
|
|
APIAddress + endpoint,
|
|
method,
|
|
token,
|
|
body,
|
|
)
|
|
)
|
|
return response
|
|
}
|
|
|
|
const headerBuilder = (url, method, token, body) => {
|
|
let headers_r = {
|
|
'authorization': token,
|
|
'x-csrftoken': getCookie('csrftoken'),
|
|
'accept': 'application/json',
|
|
'content-type': 'application/json'
|
|
}
|
|
let headers = {
|
|
url: url,
|
|
method: method,
|
|
headers: headers_r,
|
|
credentials: 'same-origin'
|
|
}
|
|
if (method === 'PUT' || method === 'POST' || method === 'PATCH') {
|
|
headers = Object.assign({}, headers, {
|
|
data: JSON.stringify(body)
|
|
})
|
|
}
|
|
return headers
|
|
}
|
|
|
|
/**
|
|
* get cookie method for CSRF verification
|
|
* @param {string} name - name of handled cookie
|
|
*/
|
|
const getCookie = (name) => {
|
|
if (!document.cookie) {
|
|
return null;
|
|
}
|
|
const token = document.cookie.split(';')
|
|
.map(c => c.trim())
|
|
.filter(c => c.startsWith(name + '='));
|
|
|
|
if (token.length === 0) {
|
|
return null;
|
|
}
|
|
return decodeURIComponent(token[0].split('=')[1]);
|
|
}
|
|
|
|
const axiosFilePost = async ( endpoint, body, token ) => {
|
|
let formData = new FormData()
|
|
formData.append('file', body.file)
|
|
formData.append('user_id', body.user_id)
|
|
let response = await axios.post(
|
|
APIAddress + endpoint,
|
|
formData,
|
|
{
|
|
headers: {
|
|
'authorization': token,
|
|
'x-csrftoken': getCookie('csrftoken')
|
|
}
|
|
}
|
|
)
|
|
console.log(response)
|
|
return response
|
|
}
|
|
|
|
export default {
|
|
APIAddress,
|
|
_getList,
|
|
_getOne,
|
|
_post,
|
|
_put,
|
|
_patch,
|
|
_delete,
|
|
axiosFilePost
|
|
} |