mirror of
https://github.com/filebrowser/filebrowser.git
synced 2024-06-07 23:00:43 +00:00
d50bec8caa
* update dependencies to latest version
* add mising dependencies
* Syntax updates and such
* Reorganize files and translate login to portuguese
* Add i18n to buttons
* Error translations and some bug fixes
* Add i18n to files
* i18n on prompts
* update search
* Prompts and Sidebar in
* i18n to the header
* Change to YAML
* alphabetical order
* # Add simplified Chinese language (#180)
* Add Simplified Chinese and sort by alphabet
* Add more text to translations
* API Updates
* Update zh_cn.yaml (#182)
* Api Upgrades
* Simplify api and clean zh_cn lang file
* Improve error logging
* Fix some route bugs and separate login styles
* better organization
* Fix bug on api
* Build assets Tue, Aug 1, 2017 11:32:23 AM
* Rename users path and fix bug scroll event
* Start Portuguese translation and file org
* Add more to the PT translation
* Add show
* Build assets Tue Aug 1 12:01:39 GMTST 2017
* Add locale to cofnig
* Update portuguese translation
* You can change the language :)
* :D
* Build assets Tue Aug 1 17:50:31 GMTST 2017
* Update requestContext variable names
* Remove assets
* Build assets Tue Aug 1 20:48:21 GMTST 2017
Former-commit-id: 08f373725c14990f61dbb00bea43118c496c5d32 [formerly 281e23007c79dac1e9b86424201891a99d20f73a] [formerly b1b73f42debbce06b4f36e4cf97e319789c85b9f [formerly d8bc73390c
]]
Former-commit-id: 92e99405cbf9935d1cf77b0fe70b122fca552be6 [formerly 3cd365e862f2a54ada60e226a19ac607b8d0c43b]
Former-commit-id: cf9815114ac686cdf75a6b1cba15adafe493d083
130 lines
3.0 KiB
Go
130 lines
3.0 KiB
Go
package filemanager
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"reflect"
|
|
|
|
"github.com/mitchellh/mapstructure"
|
|
)
|
|
|
|
type modifySettingsRequest struct {
|
|
*modifyRequest
|
|
Data struct {
|
|
Commands map[string][]string `json:"commands"`
|
|
Plugins map[string]map[string]interface{} `json:"plugins"`
|
|
} `json:"data"`
|
|
}
|
|
|
|
type pluginOption struct {
|
|
Variable string `json:"variable"`
|
|
Name string `json:"name"`
|
|
Value interface{} `json:"value"`
|
|
}
|
|
|
|
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 != "" && 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
|
|
}
|
|
|
|
type settingsGetRequest struct {
|
|
Commands map[string][]string `json:"commands"`
|
|
Plugins map[string][]pluginOption `json:"plugins"`
|
|
}
|
|
|
|
func settingsGetHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
|
if !c.User.Admin {
|
|
return http.StatusForbidden, nil
|
|
}
|
|
|
|
result := &settingsGetRequest{
|
|
Commands: c.Commands,
|
|
Plugins: map[string][]pluginOption{},
|
|
}
|
|
|
|
for name, p := range c.Plugins {
|
|
result.Plugins[name] = []pluginOption{}
|
|
|
|
t := reflect.TypeOf(p).Elem()
|
|
for i := 0; i < t.NumField(); i++ {
|
|
result.Plugins[name] = append(result.Plugins[name], pluginOption{
|
|
Variable: t.Field(i).Name,
|
|
Name: t.Field(i).Tag.Get("name"),
|
|
Value: reflect.ValueOf(p).Elem().FieldByName(t.Field(i).Name).Interface(),
|
|
})
|
|
}
|
|
}
|
|
|
|
return renderJSON(w, result)
|
|
}
|
|
|
|
func settingsPutHandler(c *RequestContext, w http.ResponseWriter, r *http.Request) (int, error) {
|
|
if !c.User.Admin {
|
|
return http.StatusForbidden, nil
|
|
}
|
|
|
|
mod, err := parsePutSettingsRequest(r)
|
|
if err != nil {
|
|
return http.StatusBadRequest, err
|
|
}
|
|
// Update the commands.
|
|
if mod.Which == "commands" {
|
|
if err := c.db.Set("config", "commands", mod.Data.Commands); err != nil {
|
|
return http.StatusInternalServerError, err
|
|
}
|
|
|
|
c.Commands = mod.Data.Commands
|
|
return http.StatusOK, nil
|
|
}
|
|
|
|
// Update the plugins.
|
|
if mod.Which == "plugins" {
|
|
for name, plugin := range mod.Data.Plugins {
|
|
err = mapstructure.Decode(plugin, c.Plugins[name])
|
|
if err != nil {
|
|
return http.StatusInternalServerError, err
|
|
}
|
|
|
|
err = c.db.Set("plugins", name, c.Plugins[name])
|
|
if err != nil {
|
|
return http.StatusInternalServerError, err
|
|
}
|
|
}
|
|
|
|
return http.StatusOK, nil
|
|
}
|
|
|
|
return http.StatusMethodNotAllowed, nil
|
|
}
|