mirror of
https://github.com/filebrowser/filebrowser.git
synced 2024-06-07 23:00:43 +00:00
870b5b4079
License: MIT
Signed-off-by: Henrique Dias <hacdias@gmail.com>
Former-commit-id: bb60ec81f56f5d761ef76b2c1e26bbe83210f434 [formerly b28f83c65e0934e138a1710549f52e0f66a158e0] [formerly 7138a3215ceb144afa0ea45be2315f30b052109f [formerly 72069207c6
]]
Former-commit-id: 0fb7ae6353f786edd93a9166141bfa446dd3dbf9 [formerly 5cb07e8c96a7cfca1aec5843123e1abc4ca8578a]
Former-commit-id: 914c0348516f072a9ccce4e105327feaaddb4cc0
88 lines
2.2 KiB
Go
88 lines
2.2 KiB
Go
package cmd
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"path/filepath"
|
|
"reflect"
|
|
|
|
"github.com/filebrowser/filebrowser/v2/auth"
|
|
"github.com/filebrowser/filebrowser/v2/settings"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func init() {
|
|
configCmd.AddCommand(configImportCmd)
|
|
}
|
|
|
|
type settingsFile struct {
|
|
Settings *settings.Settings `json:"settings"`
|
|
Server *settings.Server `json:"server"`
|
|
Auther interface{} `json:"auther"`
|
|
}
|
|
|
|
var configImportCmd = &cobra.Command{
|
|
Use: "import <filename>",
|
|
Short: `Import a configuration file. This will replace all the existing
|
|
configuration. Can be used with or without unexisting databases.
|
|
If used with a nonexisting database, a key will be generated
|
|
automatically. Otherwise the key will be kept the same as in the
|
|
database.`,
|
|
Args: jsonYamlArg,
|
|
Run: python(func(cmd *cobra.Command, args []string, d pythonData) {
|
|
var key []byte
|
|
if d.hadDB {
|
|
settings, err := d.store.Settings.Get()
|
|
checkErr(err)
|
|
key = settings.Key
|
|
} else {
|
|
key = generateRandomBytes(64)
|
|
}
|
|
|
|
file := settingsFile{}
|
|
err := unmarshal(args[0], &file)
|
|
checkErr(err)
|
|
|
|
file.Settings.Key = key
|
|
err = d.store.Settings.Save(file.Settings)
|
|
checkErr(err)
|
|
|
|
err = d.store.Settings.SaveServer(file.Server)
|
|
checkErr(err)
|
|
|
|
var rawAuther interface{}
|
|
if filepath.Ext(args[0]) != ".json" {
|
|
rawAuther = cleanUpInterfaceMap(file.Auther.(map[interface{}]interface{}))
|
|
} else {
|
|
rawAuther = file.Auther
|
|
}
|
|
|
|
var auther auth.Auther
|
|
switch file.Settings.AuthMethod {
|
|
case auth.MethodJSONAuth:
|
|
auther = getAuther(auth.JSONAuth{}, rawAuther).(*auth.JSONAuth)
|
|
case auth.MethodNoAuth:
|
|
auther = getAuther(auth.NoAuth{}, rawAuther).(*auth.NoAuth)
|
|
case auth.MethodProxyAuth:
|
|
auther = getAuther(auth.ProxyAuth{}, rawAuther).(*auth.ProxyAuth)
|
|
default:
|
|
checkErr(errors.New("invalid auth method"))
|
|
}
|
|
|
|
err = d.store.Auth.Save(auther)
|
|
checkErr(err)
|
|
|
|
printSettings(file.Server, file.Settings, auther)
|
|
}, pythonConfig{allowNoDB: true}),
|
|
}
|
|
|
|
func getAuther(sample auth.Auther, data interface{}) interface{} {
|
|
authType := reflect.TypeOf(sample)
|
|
auther := reflect.New(authType).Interface()
|
|
bytes, err := json.Marshal(data)
|
|
checkErr(err)
|
|
err = json.Unmarshal(bytes, &auther)
|
|
checkErr(err)
|
|
return auther
|
|
}
|