mirror of
https://github.com/filebrowser/filebrowser.git
synced 2024-06-07 23:00:43 +00:00
e1026a1fb4
License: MIT
Signed-off-by: Henrique Dias <hacdias@gmail.com>
Former-commit-id: 4cc444f7168a76920c2821534027f121b7b0b0d5 [formerly fc1b399bbcf6cbd0a26db133ce644192664e4987] [formerly c71a14856c55345626eb7982e2bbe9ca0b7a1aec [formerly e68af011d4
]]
Former-commit-id: b6ec8dd8817ec6bf028e1e7df299f8dd720628d9 [formerly 99077c4ca6faac93a1c956d96833faa3f2c40fe6]
Former-commit-id: 620919fdfd9f213cc61e4ce3b4e8650096a489b4
92 lines
2.3 KiB
Go
92 lines
2.3 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 <path>",
|
|
Short: "Import a configuration file",
|
|
Long: `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.
|
|
|
|
The path must be for a json or yaml file.`,
|
|
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
|
|
}
|