Api Upgrades
This commit is contained in:
parent
5d97fd47ba
commit
cab0496c85
@ -92,7 +92,7 @@ import SwitchButton from './buttons/SwitchView'
|
|||||||
import MoveButton from './buttons/Move'
|
import MoveButton from './buttons/Move'
|
||||||
import CopyButton from './buttons/Copy'
|
import CopyButton from './buttons/Copy'
|
||||||
import {mapGetters, mapState} from 'vuex'
|
import {mapGetters, mapState} from 'vuex'
|
||||||
import api from '@/utils/api'
|
import * as api from '@/utils/api'
|
||||||
import buttons from '@/utils/buttons'
|
import buttons from '@/utils/buttons'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import zhCN from './zh_cn.yaml'
|
|||||||
Vue.use(VueI18n)
|
Vue.use(VueI18n)
|
||||||
|
|
||||||
export default new VueI18n({
|
export default new VueI18n({
|
||||||
locale: 'en',
|
locale: 'zh_cn',
|
||||||
fallbackLocale: 'en',
|
fallbackLocale: 'en',
|
||||||
messages: {
|
messages: {
|
||||||
'en': en,
|
'en': en,
|
||||||
|
|||||||
@ -96,7 +96,7 @@ export function put (url, content = '') {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export function moveCopy (items, copy = false) {
|
function moveCopy (items, copy = false) {
|
||||||
let promises = []
|
let promises = []
|
||||||
|
|
||||||
for (let item of items) {
|
for (let item of items) {
|
||||||
@ -203,6 +203,92 @@ export function download (format, ...files) {
|
|||||||
window.open(url)
|
window.open(url)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getCommands () {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let request = new window.XMLHttpRequest()
|
||||||
|
request.open('GET', `${store.state.baseURL}/api/commands/`, true)
|
||||||
|
request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
|
||||||
|
|
||||||
|
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()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function updateCommands (commands) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let request = new window.XMLHttpRequest()
|
||||||
|
request.open('PUT', `${store.state.baseURL}/api/commands/`, true)
|
||||||
|
request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
|
||||||
|
|
||||||
|
request.onload = () => {
|
||||||
|
switch (request.status) {
|
||||||
|
case 200:
|
||||||
|
resolve()
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
reject(request.responseText)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
request.onerror = (error) => reject(error)
|
||||||
|
request.send(JSON.stringify(commands))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getPlugins () {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let request = new window.XMLHttpRequest()
|
||||||
|
request.open('GET', `${store.state.baseURL}/api/plugins/`, true)
|
||||||
|
request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
|
||||||
|
|
||||||
|
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()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function updatePlugins (data) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let request = new window.XMLHttpRequest()
|
||||||
|
request.open('PUT', `${store.state.baseURL}/api/plugins/`, true)
|
||||||
|
request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
|
||||||
|
|
||||||
|
request.onload = () => {
|
||||||
|
switch (request.status) {
|
||||||
|
case 200:
|
||||||
|
resolve()
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
reject(request.responseText)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
request.onerror = (error) => reject(error)
|
||||||
|
request.send(JSON.stringify(data))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// USERS
|
||||||
|
|
||||||
export function getUsers () {
|
export function getUsers () {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let request = new window.XMLHttpRequest()
|
let request = new window.XMLHttpRequest()
|
||||||
@ -312,91 +398,8 @@ export function deleteUser (id) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getCommands () {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
let request = new window.XMLHttpRequest()
|
|
||||||
request.open('GET', `${store.state.baseURL}/api/commands/`, true)
|
|
||||||
request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
|
|
||||||
|
|
||||||
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()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export function updateCommands (commands) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
let request = new window.XMLHttpRequest()
|
|
||||||
request.open('PUT', `${store.state.baseURL}/api/commands/`, true)
|
|
||||||
request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
|
|
||||||
|
|
||||||
request.onload = () => {
|
|
||||||
switch (request.status) {
|
|
||||||
case 200:
|
|
||||||
resolve()
|
|
||||||
break
|
|
||||||
default:
|
|
||||||
reject(request.responseText)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
request.onerror = (error) => reject(error)
|
|
||||||
request.send(JSON.stringify(commands))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getPlugins () {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
let request = new window.XMLHttpRequest()
|
|
||||||
request.open('GET', `${store.state.baseURL}/api/plugins/`, true)
|
|
||||||
request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
|
|
||||||
|
|
||||||
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()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export function updatePlugins (data) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
let request = new window.XMLHttpRequest()
|
|
||||||
request.open('PUT', `${store.state.baseURL}/api/plugins/`, true)
|
|
||||||
request.setRequestHeader('Authorization', `Bearer ${store.state.jwt}`)
|
|
||||||
|
|
||||||
request.onload = () => {
|
|
||||||
switch (request.status) {
|
|
||||||
case 200:
|
|
||||||
resolve()
|
|
||||||
break
|
|
||||||
default:
|
|
||||||
reject(request.responseText)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
request.onerror = (error) => reject(error)
|
|
||||||
request.send(JSON.stringify(data))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
removePrefix,
|
||||||
delete: rm,
|
delete: rm,
|
||||||
fetch,
|
fetch,
|
||||||
checksum,
|
checksum,
|
||||||
@ -407,14 +410,15 @@ export default {
|
|||||||
command,
|
command,
|
||||||
search,
|
search,
|
||||||
download,
|
download,
|
||||||
getUser,
|
// other things
|
||||||
newUser,
|
|
||||||
updateUser,
|
|
||||||
getUsers,
|
|
||||||
getCommands,
|
getCommands,
|
||||||
updateCommands,
|
updateCommands,
|
||||||
removePrefix,
|
|
||||||
getPlugins,
|
getPlugins,
|
||||||
updatePlugins,
|
updatePlugins,
|
||||||
|
// User things
|
||||||
|
newUser,
|
||||||
|
getUser,
|
||||||
|
getUsers,
|
||||||
|
updateUser,
|
||||||
deleteUser
|
deleteUser
|
||||||
}
|
}
|
||||||
|
|||||||
6
http.go
6
http.go
@ -138,10 +138,8 @@ func apiHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int,
|
|||||||
code, err = resourceHandler(c, w, r)
|
code, err = resourceHandler(c, w, r)
|
||||||
case "users":
|
case "users":
|
||||||
code, err = usersHandler(c, w, r)
|
code, err = usersHandler(c, w, r)
|
||||||
case "commands":
|
case "settings":
|
||||||
code, err = commandsHandler(c, w, r)
|
code, err = settingsHandler(c, w, r)
|
||||||
case "plugins":
|
|
||||||
code, err = pluginsHandler(c, w, r)
|
|
||||||
default:
|
default:
|
||||||
code = http.StatusNotFound
|
code = http.StatusNotFound
|
||||||
}
|
}
|
||||||
|
|||||||
150
settings.go
150
settings.go
@ -2,66 +2,23 @@ package filemanager
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"github.com/mitchellh/mapstructure"
|
"github.com/mitchellh/mapstructure"
|
||||||
)
|
)
|
||||||
|
|
||||||
func commandsHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
type modifySettingsRequest struct {
|
||||||
switch r.Method {
|
*modifyRequest
|
||||||
case http.MethodGet:
|
Data struct {
|
||||||
return commandsGetHandler(c, w, r)
|
Commands map[string][]string `json:"commands"`
|
||||||
case http.MethodPut:
|
Plugins map[string]map[string]interface{} `json:"plugins"`
|
||||||
return commandsPutHandler(c, w, r)
|
} `json:"data"`
|
||||||
}
|
|
||||||
|
|
||||||
return http.StatusMethodNotAllowed, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func commandsGetHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
type settingsGetRequest struct {
|
||||||
if !c.User.Admin {
|
Commands map[string][]string `json:"commands"`
|
||||||
return http.StatusForbidden, nil
|
Plugins map[string][]pluginOption `json:"plugins"`
|
||||||
}
|
|
||||||
|
|
||||||
return renderJSON(w, c.FM.Commands)
|
|
||||||
}
|
|
||||||
|
|
||||||
func commandsPutHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
|
||||||
if !c.User.Admin {
|
|
||||||
return http.StatusForbidden, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.Body == nil {
|
|
||||||
return http.StatusBadGateway, errors.New("Empty request body")
|
|
||||||
}
|
|
||||||
|
|
||||||
var commands map[string][]string
|
|
||||||
|
|
||||||
// Parses the user and checks for error.
|
|
||||||
err := json.NewDecoder(r.Body).Decode(&commands)
|
|
||||||
if err != nil {
|
|
||||||
return http.StatusBadRequest, errors.New("Invalid JSON")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := c.FM.db.Set("config", "commands", commands); err != nil {
|
|
||||||
return http.StatusInternalServerError, err
|
|
||||||
}
|
|
||||||
|
|
||||||
c.FM.Commands = commands
|
|
||||||
return http.StatusOK, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func pluginsHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
|
||||||
switch r.Method {
|
|
||||||
case http.MethodGet:
|
|
||||||
return pluginsGetHandler(c, w, r)
|
|
||||||
case http.MethodPut:
|
|
||||||
return pluginsPutHandler(c, w, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
return http.StatusMethodNotAllowed, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type pluginOption struct {
|
type pluginOption struct {
|
||||||
@ -70,19 +27,58 @@ type pluginOption struct {
|
|||||||
Value interface{} `json:"value"`
|
Value interface{} `json:"value"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func pluginsGetHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
func parsePutSettingsRequest(r *http.Request) (*modifySettingsRequest, error) {
|
||||||
|
// Checks if the request body is empty.
|
||||||
|
if r.Body == nil {
|
||||||
|
return nil, errEmptyRequest
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parses the request body and checks if it's well formed.
|
||||||
|
mod := &modifySettingsRequest{}
|
||||||
|
err := json.NewDecoder(r.Body).Decode(mod)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Checks if the request type is right.
|
||||||
|
if mod.What != "settings" {
|
||||||
|
return nil, errWrongDataType
|
||||||
|
}
|
||||||
|
|
||||||
|
return mod, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func settingsHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
||||||
|
if r.URL.Path != "" {
|
||||||
|
return http.StatusNotFound, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
switch r.Method {
|
||||||
|
case http.MethodGet:
|
||||||
|
return settingsGetHandler(c, w, r)
|
||||||
|
case http.MethodPut:
|
||||||
|
return settingsPutHandler(c, w, r)
|
||||||
|
}
|
||||||
|
|
||||||
|
return http.StatusMethodNotAllowed, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func settingsGetHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
||||||
if !c.User.Admin {
|
if !c.User.Admin {
|
||||||
return http.StatusForbidden, nil
|
return http.StatusForbidden, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
plugins := map[string][]pluginOption{}
|
result := &settingsGetRequest{
|
||||||
|
Commands: c.FM.Commands,
|
||||||
|
Plugins: map[string][]pluginOption{},
|
||||||
|
}
|
||||||
|
|
||||||
for name, p := range c.FM.Plugins {
|
for name, p := range c.FM.Plugins {
|
||||||
plugins[name] = []pluginOption{}
|
result.Plugins[name] = []pluginOption{}
|
||||||
|
|
||||||
t := reflect.TypeOf(p).Elem()
|
t := reflect.TypeOf(p).Elem()
|
||||||
for i := 0; i < t.NumField(); i++ {
|
for i := 0; i < t.NumField(); i++ {
|
||||||
plugins[name] = append(plugins[name], pluginOption{
|
result.Plugins[name] = append(result.Plugins[name], pluginOption{
|
||||||
Variable: t.Field(i).Name,
|
Variable: t.Field(i).Name,
|
||||||
Name: t.Field(i).Tag.Get("name"),
|
Name: t.Field(i).Tag.Get("name"),
|
||||||
Value: reflect.ValueOf(p).Elem().FieldByName(t.Field(i).Name).Interface(),
|
Value: reflect.ValueOf(p).Elem().FieldByName(t.Field(i).Name).Interface(),
|
||||||
@ -90,37 +86,43 @@ func pluginsGetHandler(c *RequestContext, w http.ResponseWriter, r *http.Request
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return renderJSON(w, plugins)
|
return renderJSON(w, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
func pluginsPutHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
func settingsPutHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
||||||
if !c.User.Admin {
|
if !c.User.Admin {
|
||||||
return http.StatusForbidden, nil
|
return http.StatusForbidden, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if r.Body == nil {
|
mod, err := parsePutSettingsRequest(r)
|
||||||
return http.StatusBadGateway, errors.New("Empty request body")
|
|
||||||
}
|
|
||||||
|
|
||||||
var raw map[string]map[string]interface{}
|
|
||||||
|
|
||||||
// Parses the user and checks for error.
|
|
||||||
err := json.NewDecoder(r.Body).Decode(&raw)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return http.StatusBadRequest, err
|
return http.StatusBadRequest, err
|
||||||
}
|
}
|
||||||
|
|
||||||
for name, plugin := range raw {
|
if mod.Which == "commands" {
|
||||||
err = mapstructure.Decode(plugin, c.FM.Plugins[name])
|
if err := c.FM.db.Set("config", "commands", mod.Data.Commands); err != nil {
|
||||||
if err != nil {
|
|
||||||
return http.StatusInternalServerError, err
|
return http.StatusInternalServerError, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = c.FM.db.Set("plugins", name, c.FM.Plugins[name])
|
c.FM.Commands = mod.Data.Commands
|
||||||
if err != nil {
|
return http.StatusOK, nil
|
||||||
return http.StatusInternalServerError, err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return http.StatusOK, nil
|
if mod.Which == "plugins" {
|
||||||
|
for name, plugin := range mod.Data.Plugins {
|
||||||
|
err = mapstructure.Decode(plugin, c.FM.Plugins[name])
|
||||||
|
if err != nil {
|
||||||
|
return http.StatusInternalServerError, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = c.FM.db.Set("plugins", name, c.FM.Plugins[name])
|
||||||
|
if err != nil {
|
||||||
|
return http.StatusInternalServerError, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return http.StatusOK, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return http.StatusMethodNotAllowed, nil
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user