mirror of
https://github.com/filebrowser/filebrowser.git
synced 2024-06-07 23:00:43 +00:00
802318f903
Supports json and yaml.
Former-commit-id: d36b07953ede1842942b7ab477effeb2e5aa7d5b [formerly 51d0d5691d19e0649935816779a34b1b700e088a] [formerly 342f636293be8e38e7907453a67c67e5e9195c78 [formerly 73b8d2ee7e
]]
Former-commit-id: 8ef6a1563ebe425a15a8229165d2ddb043cefb21 [formerly 01c4ac1d89e0d5c6ed16bb7f23c2bbe62085d6e5]
Former-commit-id: 6d197ee1931889571c61ad0920e4352d4b02b264
77 lines
2.0 KiB
Go
77 lines
2.0 KiB
Go
package cmd
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"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"`
|
|
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)
|
|
|
|
autherInterf := cleanUpInterfaceMap(file.Auther.(map[interface{}]interface{}))
|
|
|
|
var auther auth.Auther
|
|
switch file.Settings.AuthMethod {
|
|
case auth.MethodJSONAuth:
|
|
auther = getAuther(auth.JSONAuth{}, autherInterf).(*auth.JSONAuth)
|
|
case auth.MethodNoAuth:
|
|
auther = getAuther(auth.NoAuth{}, autherInterf).(*auth.NoAuth)
|
|
case auth.MethodProxyAuth:
|
|
auther = getAuther(auth.ProxyAuth{}, autherInterf).(*auth.ProxyAuth)
|
|
default:
|
|
checkErr(errors.New("invalid auth method"))
|
|
}
|
|
|
|
err = d.store.Auth.Save(auther)
|
|
checkErr(err)
|
|
printSettings(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
|
|
}
|