mirror of
https://github.com/filebrowser/filebrowser.git
synced 2024-06-07 23:00:43 +00:00
9c205c928e
Former-commit-id: bf510f9474baf82d86f56447595f11df8bab37af [formerly f66ec9d1e271bf7167086986e82002bf7007f184] [formerly 6df52279a22f6d91503b74e7c6f18f2c6a825207 [formerly b86d9b16b9
]]
Former-commit-id: 3d2b4d2c4e7004c8e704044d669eec07418825a5 [formerly 18ee8c63b9b50dc26c36e0acdb9bda8cc7069d1e]
Former-commit-id: b9d487d62ea901fc627e74a50b98666f6831fd4e
105 lines
2.4 KiB
Go
105 lines
2.4 KiB
Go
package filemanager
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"net/http"
|
|
|
|
"github.com/mitchellh/mapstructure"
|
|
)
|
|
|
|
func commandsHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
|
switch r.Method {
|
|
case http.MethodGet:
|
|
return commandsGetHandler(c, w, r)
|
|
case http.MethodPut:
|
|
return commandsPutHandler(c, w, r)
|
|
}
|
|
|
|
return http.StatusMethodNotAllowed, nil
|
|
}
|
|
|
|
func commandsGetHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
|
if !c.User.Admin {
|
|
return http.StatusForbidden, nil
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
func pluginsGetHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
|
if !c.User.Admin {
|
|
return http.StatusForbidden, nil
|
|
}
|
|
|
|
return renderJSON(w, c.FM.Plugins)
|
|
}
|
|
|
|
func pluginsPutHandler(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 raw map[string]map[string]interface{}
|
|
|
|
// Parses the user and checks for error.
|
|
err := json.NewDecoder(r.Body).Decode(&raw)
|
|
if err != nil {
|
|
return http.StatusBadRequest, err
|
|
}
|
|
|
|
for name, plugin := range raw {
|
|
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
|
|
}
|