Files
filebrowser/assets/src/utils/api.js
T

456 lines
12 KiB
JavaScript
Raw Normal View History

2017-07-06 09:08:20 +01:00
import store from '@/store'
2017-07-03 11:04:14 +01:00
const ssl = (window.location.protocol === 'https:')
2017-08-01 20:49:56 +01:00
export function removePrefix (url) {
2017-07-03 15:19:17 +01:00
if (url.startsWith('/files')) {
url = url.slice(6)
2017-07-03 15:19:17 +01:00
}
if (url === '') url = '/'
if (url[0] !== '/') url = '/' + url
2017-07-03 15:19:17 +01:00
return url
}
2017-08-01 20:49:56 +01:00
export function fetch (url) {
2017-07-03 15:19:17 +01:00
url = removePrefix(url)
2017-07-03 11:04:14 +01:00
return new Promise((resolve, reject) => {
let request = new window.XMLHttpRequest()
request.open('GET', `${store.state.baseURL}/api/resource${url}`, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-07-03 11:04:14 +01:00
2017-07-03 15:19:17 +01:00
request.onload = () => {
switch (request.status) {
case 200:
2017-07-08 11:12:43 +01:00
resolve(JSON.parse(request.responseText))
2017-07-03 15:19:17 +01:00
break
default:
2017-08-01 20:49:56 +01:00
reject(new Error(request.status))
2017-07-03 15:19:17 +01:00
break
}
}
request.onerror = (error) => reject(error)
request.send()
})
}
2017-08-11 09:33:47 +01:00
export function remove (url) {
2017-07-03 15:23:16 +01:00
url = removePrefix(url)
2017-07-03 15:19:17 +01:00
return new Promise((resolve, reject) => {
let request = new window.XMLHttpRequest()
request.open('DELETE', `${store.state.baseURL}/api/resource${url}`, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-07-03 15:19:17 +01:00
request.onload = () => {
if (request.status === 200) {
resolve(request.responseText)
} else {
reject(request.responseText)
}
}
request.onerror = (error) => reject(error)
request.send()
})
}
2017-08-15 11:08:58 +01:00
export function post (url, content = '', overwrite = false, onupload) {
2017-07-04 21:02:46 +01:00
url = removePrefix(url)
return new Promise((resolve, reject) => {
let request = new window.XMLHttpRequest()
request.open('POST', `${store.state.baseURL}/api/resource${url}`, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-07-04 21:02:46 +01:00
2017-08-15 11:08:58 +01:00
if (typeof onupload === 'function') {
request.upload.onprogress = onupload
}
if (overwrite) {
request.setRequestHeader('Action', `override`)
}
2017-07-04 21:02:46 +01:00
request.onload = () => {
if (request.status === 200) {
resolve(request.responseText)
} else if (request.status === 409) {
reject(request.status)
2017-07-04 21:02:46 +01:00
} else {
reject(request.responseText)
}
}
request.onerror = (error) => {
reject(error)
}
2017-07-04 21:02:46 +01:00
request.send(content)
})
}
2017-08-09 15:06:28 +01:00
export function put (url, content = '', publish = false, date = '') {
2017-07-03 15:19:17 +01:00
url = removePrefix(url)
return new Promise((resolve, reject) => {
let request = new window.XMLHttpRequest()
request.open('PUT', `${store.state.baseURL}/api/resource${url}`, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-08-09 15:06:28 +01:00
request.setRequestHeader('Publish', publish)
if (date !== '') {
request.setRequestHeader('Schedule', date)
}
2017-07-03 15:19:17 +01:00
request.onload = () => {
if (request.status === 200) {
resolve(request.responseText)
} else {
reject(request.responseText)
}
}
request.onerror = (error) => reject(error)
request.send(content)
2017-07-03 15:19:17 +01:00
})
}
2017-07-26 15:55:39 +01:00
function moveCopy (items, copy = false) {
let promises = []
2017-07-03 15:19:17 +01:00
2017-07-26 15:55:39 +01:00
for (let item of items) {
let from = removePrefix(item.from)
let to = removePrefix(item.to)
2017-07-03 15:19:17 +01:00
2017-07-26 15:55:39 +01:00
promises.push(new Promise((resolve, reject) => {
let request = new window.XMLHttpRequest()
request.open('PATCH', `${store.state.baseURL}/api/resource${from}`, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-07-26 15:55:39 +01:00
request.setRequestHeader('Destination', to)
if (copy) {
request.setRequestHeader('Action', 'copy')
2017-07-03 15:19:17 +01:00
}
2017-07-26 15:55:39 +01:00
request.onload = () => {
if (request.status === 200) {
resolve(request.responseText)
} else {
reject(request.responseText)
}
}
request.onerror = (error) => reject(error)
request.send()
}))
}
return Promise.all(promises)
}
2017-08-01 20:49:56 +01:00
export function move (items) {
2017-07-26 15:55:39 +01:00
return moveCopy(items)
}
2017-08-01 20:49:56 +01:00
export function copy (items) {
2017-07-26 15:55:39 +01:00
return moveCopy(items, true)
2017-07-03 15:19:17 +01:00
}
2017-08-01 20:49:56 +01:00
export function checksum (url, algo) {
2017-07-03 15:19:17 +01:00
url = removePrefix(url)
return new Promise((resolve, reject) => {
let request = new window.XMLHttpRequest()
request.open('GET', `${store.state.baseURL}/api/checksum${url}?algo=${algo}`, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-07-03 15:19:17 +01:00
2017-07-03 11:04:14 +01:00
request.onload = () => {
if (request.status === 200) {
2017-07-03 15:19:17 +01:00
resolve(request.responseText)
2017-07-03 11:04:14 +01:00
} else {
2017-07-03 15:19:17 +01:00
reject(request.responseText)
2017-07-03 11:04:14 +01:00
}
}
2017-07-03 15:19:17 +01:00
request.onerror = (error) => reject(error)
2017-07-03 11:04:14 +01:00
request.send()
})
}
2017-08-01 20:49:56 +01:00
export function command (url, command, onmessage, onclose) {
let protocol = (ssl ? 'wss:' : 'ws:')
2017-07-03 18:07:14 +01:00
url = removePrefix(url)
2017-07-27 14:02:50 +01:00
url = `${protocol}//${window.location.host}${store.state.baseURL}/api/command${url}`
2017-07-03 18:07:14 +01:00
let conn = new window.WebSocket(url)
conn.onopen = () => conn.send(command)
conn.onmessage = onmessage
conn.onclose = onclose
}
2017-08-01 20:49:56 +01:00
export function search (url, search, onmessage, onclose) {
let protocol = (ssl ? 'wss:' : 'ws:')
2017-07-03 18:07:14 +01:00
url = removePrefix(url)
2017-07-27 14:02:50 +01:00
url = `${protocol}//${window.location.host}${store.state.baseURL}/api/search${url}`
2017-07-03 18:07:14 +01:00
let conn = new window.WebSocket(url)
conn.onopen = () => conn.send(search)
conn.onmessage = onmessage
conn.onclose = onclose
}
2017-08-01 20:49:56 +01:00
export function download (format, ...files) {
2017-07-03 21:33:21 +01:00
let url = `${store.state.baseURL}/api/download`
if (files.length === 1) {
url += removePrefix(files[0]) + '?'
} else {
let arg = ''
for (let file of files) {
arg += removePrefix(file) + ','
}
arg = arg.substring(0, arg.length - 1)
arg = encodeURIComponent(arg)
url += `/?files=${arg}&`
}
if (format !== null) {
url += `&format=${format}`
}
window.open(url)
}
2017-08-01 20:49:56 +01:00
export function getSettings () {
2017-07-07 20:00:32 +01:00
return new Promise((resolve, reject) => {
let request = new window.XMLHttpRequest()
2017-08-01 20:49:56 +01:00
request.open('GET', `${store.state.baseURL}/api/settings/`, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-07-07 20:00:32 +01:00
request.onload = () => {
switch (request.status) {
case 200:
resolve(JSON.parse(request.responseText))
break
default:
reject(request.responseText)
break
}
}
request.onerror = (error) => reject(error)
request.send()
})
}
2017-08-01 20:49:56 +01:00
export function updateSettings (param, which) {
2017-07-06 21:18:34 +01:00
return new Promise((resolve, reject) => {
2017-08-01 20:49:56 +01:00
let data = {
what: 'settings',
which: which,
data: {}
2017-07-06 21:18:34 +01:00
}
2017-08-01 20:49:56 +01:00
data.data[which] = param
2017-07-07 20:00:32 +01:00
2017-07-20 10:12:45 +01:00
let request = new window.XMLHttpRequest()
2017-08-01 20:49:56 +01:00
request.open('PUT', `${store.state.baseURL}/api/settings/`, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-07-20 10:12:45 +01:00
request.onload = () => {
switch (request.status) {
case 200:
resolve()
break
default:
reject(request.responseText)
break
}
}
2017-08-01 20:49:56 +01:00
request.onerror = (error) => { reject(error) }
request.send(JSON.stringify(data))
2017-07-20 10:12:45 +01:00
})
}
2017-08-01 20:49:56 +01:00
// USERS
2017-07-07 20:00:32 +01:00
2017-08-01 20:49:56 +01:00
export function getUsers () {
2017-07-07 20:00:32 +01:00
return new Promise((resolve, reject) => {
let request = new window.XMLHttpRequest()
2017-08-01 20:49:56 +01:00
request.open('GET', `${store.state.baseURL}/api/users/`, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-07-07 20:00:32 +01:00
request.onload = () => {
switch (request.status) {
case 200:
2017-08-01 20:49:56 +01:00
resolve(JSON.parse(request.responseText))
2017-07-07 20:00:32 +01:00
break
default:
reject(request.responseText)
break
}
}
request.onerror = (error) => reject(error)
2017-08-01 20:49:56 +01:00
request.send()
2017-07-07 20:00:32 +01:00
})
}
2017-08-01 20:49:56 +01:00
export function getUser (id) {
2017-07-08 20:27:26 +01:00
return new Promise((resolve, reject) => {
let request = new window.XMLHttpRequest()
2017-08-01 20:49:56 +01:00
request.open('GET', `${store.state.baseURL}/api/users/${id}`, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-07-08 20:27:26 +01:00
request.onload = () => {
switch (request.status) {
case 200:
resolve(JSON.parse(request.responseText))
break
default:
reject(request.responseText)
break
}
}
request.onerror = (error) => reject(error)
request.send()
})
}
2017-08-01 20:49:56 +01:00
export function newUser (user) {
2017-07-08 20:27:26 +01:00
return new Promise((resolve, reject) => {
let request = new window.XMLHttpRequest()
2017-08-01 20:49:56 +01:00
request.open('POST', `${store.state.baseURL}/api/users/`, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-07-08 20:27:26 +01:00
request.onload = () => {
switch (request.status) {
2017-08-01 20:49:56 +01:00
case 201:
resolve(request.getResponseHeader('Location'))
2017-07-08 20:27:26 +01:00
break
default:
reject(request.responseText)
break
}
}
request.onerror = (error) => reject(error)
2017-08-01 20:49:56 +01:00
request.send(JSON.stringify({
what: 'user',
which: 'new',
data: user
}))
2017-07-08 20:27:26 +01:00
})
}
2017-08-01 20:49:56 +01:00
export function updateUser (user, which) {
2017-07-12 16:18:13 +01:00
return new Promise((resolve, reject) => {
let request = new window.XMLHttpRequest()
2017-08-01 20:49:56 +01:00
request.open('PUT', `${store.state.baseURL}/api/users/${user.ID}`, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-07-12 16:18:13 +01:00
request.onload = () => {
switch (request.status) {
case 200:
2017-08-01 20:49:56 +01:00
resolve(request.getResponseHeader('Location'))
2017-07-12 16:18:13 +01:00
break
default:
reject(request.responseText)
break
}
}
request.onerror = (error) => reject(error)
2017-08-01 20:49:56 +01:00
request.send(JSON.stringify({
what: 'user',
which: (typeof which === 'string') ? which : 'all',
data: user
}))
2017-07-12 16:18:13 +01:00
})
}
2017-08-01 20:49:56 +01:00
export function deleteUser (id) {
2017-07-18 14:43:16 +01:00
return new Promise((resolve, reject) => {
let request = new window.XMLHttpRequest()
2017-08-01 20:49:56 +01:00
request.open('DELETE', `${store.state.baseURL}/api/users/${id}`, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-07-18 14:43:16 +01:00
request.onload = () => {
switch (request.status) {
case 200:
resolve()
break
default:
reject(request.responseText)
break
}
}
request.onerror = (error) => reject(error)
2017-08-01 20:49:56 +01:00
request.send()
2017-07-18 14:43:16 +01:00
})
}
2017-08-11 09:33:47 +01:00
// SHARE
export function getShare (url) {
url = removePrefix(url)
return new Promise((resolve, reject) => {
let request = new window.XMLHttpRequest()
request.open('GET', `${store.state.baseURL}/api/share${url}`, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-08-11 09:33:47 +01:00
request.onload = () => {
if (request.status === 200) {
resolve(JSON.parse(request.responseText))
} else {
reject(request.status)
}
}
request.onerror = (error) => reject(error)
request.send()
})
}
export function deleteShare (hash) {
return new Promise((resolve, reject) => {
let request = new window.XMLHttpRequest()
request.open('DELETE', `${store.state.baseURL}/api/share/${hash}`, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-08-11 09:33:47 +01:00
request.onload = () => {
if (request.status === 200) {
resolve()
} else {
reject(request.status)
}
}
request.onerror = (error) => reject(error)
request.send()
})
}
export function share (url, expires = '', unit = 'hours') {
url = removePrefix(url)
url = `${store.state.baseURL}/api/share${url}`
if (expires !== '') {
url += `?expires=${expires}&unit=${unit}`
}
return new Promise((resolve, reject) => {
let request = new window.XMLHttpRequest()
request.open('POST', url, true)
if (!store.state.noAuth) request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
2017-08-11 09:33:47 +01:00
request.onload = () => {
if (request.status === 200) {
resolve(JSON.parse(request.responseText))
} else {
reject(request.responseStatus)
}
}
request.onerror = (error) => reject(error)
request.send()
})
2017-07-03 11:04:14 +01:00
}