mirror of
				https://github.com/filebrowser/filebrowser.git
				synced 2025-10-31 17:23:09 +00:00 
			
		
		
		
	 58ff28f84d
			
		
	
	
		58ff28f84d
		
	
	
	
	
		
			
			License: MIT Signed-off-by: Henrique Dias <hacdias@gmail.com> Former-commit-id: 3088476c44d4608e2b8c90d3c274b6db17ef30c0 [formerly e40d3ba193e0b54bccce8c13459032f51af84c7b] [formerly 33cabf26abee5ef4f1dd63e423fe1b0fa7ae4f7c [formerly a3daac84a20fd0d645527bcfd82d4ef46ecdf31c]] Former-commit-id: fe022f36fc4d7d8442df8c0fa4a86e2ff3ec328e [formerly 1d949d0ae88b3b5a9b8e4da5c3b6ca814a319589] Former-commit-id: 36207ddeb7eba335f5fe73ea9dcdf6bffc6265bf
		
			
				
	
	
		
			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 = generateKey()
 | |
| 		}
 | |
| 
 | |
| 		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
 | |
| }
 |