Files
filebrowser/cmd/config_init.go
T

183 lines
3.8 KiB
Go
Raw Normal View History

2019-01-05 22:44:33 +00:00
package cmd
import (
"fmt"
"github.com/spf13/cobra"
2020-06-01 01:12:36 +02:00
"github.com/filebrowser/filebrowser/v2/settings"
2019-01-05 22:44:33 +00:00
)
func init() {
configCmd.AddCommand(configInitCmd)
2019-01-08 10:50:37 +00:00
addConfigFlags(configInitCmd.Flags())
2019-01-05 22:44:33 +00:00
}
var configInitCmd = &cobra.Command{
Use: "init",
Short: "Initialize a new database",
Long: `Initialize a new database to use with File Browser. All of
this options can be changed in the future with the command
2019-01-08 16:37:02 +00:00
'filebrowser config set'. The user related flags apply
2019-01-05 22:44:33 +00:00
to the defaults when creating new users and you don't
override the options.`,
Args: cobra.NoArgs,
RunE: python(func(cmd *cobra.Command, _ []string, d *pythonData) error {
2019-01-05 22:44:33 +00:00
defaults := settings.UserDefaults{}
2019-01-08 14:07:55 +00:00
flags := cmd.Flags()
err := getUserDefaults(flags, &defaults, true)
if err != nil {
return err
}
authMethod, auther, err := getAuthentication(flags)
if err != nil {
return err
}
key := generateKey()
signup, err := getBool(flags, "signup")
if err != nil {
return err
}
createUserDir, err := getBool(flags, "create-user-dir")
if err != nil {
return err
}
minLength, err := getUint(flags, "minimum-password-length")
if err != nil {
return err
}
shell, err := getString(flags, "shell")
if err != nil {
return err
}
brandingName, err := getString(flags, "branding.name")
if err != nil {
return err
}
brandingDisableExternal, err := getBool(flags, "branding.disableExternal")
if err != nil {
return err
}
brandingDisableUsedPercentage, err := getBool(flags, "branding.disableUsedPercentage")
if err != nil {
return err
}
brandingTheme, err := getString(flags, "branding.theme")
if err != nil {
return err
}
brandingFiles, err := getString(flags, "branding.files")
if err != nil {
return err
}
2019-01-05 22:44:33 +00:00
s := &settings.Settings{
Key: key,
Signup: signup,
CreateUserDir: createUserDir,
MinimumPasswordLength: minLength,
Shell: convertCmdStrToCmdArray(shell),
AuthMethod: authMethod,
Defaults: defaults,
2019-01-05 22:44:33 +00:00
Branding: settings.Branding{
Name: brandingName,
DisableExternal: brandingDisableExternal,
DisableUsedPercentage: brandingDisableUsedPercentage,
Theme: brandingTheme,
Files: brandingFiles,
2019-01-05 22:44:33 +00:00
},
}
s.FileMode, err = getMode(flags, "file-mode")
if err != nil {
return err
}
2025-07-31 07:25:21 +02:00
s.DirMode, err = getMode(flags, "dir-mode")
if err != nil {
return err
}
address, err := getString(flags, "address")
if err != nil {
return err
}
socket, err := getString(flags, "socket")
if err != nil {
return err
}
root, err := getString(flags, "root")
if err != nil {
return err
}
baseURL, err := getString(flags, "baseurl")
if err != nil {
return err
}
tlsKey, err := getString(flags, "key")
if err != nil {
return err
}
cert, err := getString(flags, "cert")
if err != nil {
return err
}
port, err := getString(flags, "port")
if err != nil {
return err
}
log, err := getString(flags, "log")
if err != nil {
return err
2019-01-05 22:44:33 +00:00
}
2019-01-08 14:07:55 +00:00
ser := &settings.Server{
Address: address,
Socket: socket,
Root: root,
BaseURL: baseURL,
TLSKey: tlsKey,
TLSCert: cert,
Port: port,
Log: log,
}
err = d.store.Settings.Save(s)
if err != nil {
return err
}
2019-01-08 14:07:55 +00:00
err = d.store.Settings.SaveServer(ser)
if err != nil {
return err
}
2019-01-07 20:24:23 +00:00
err = d.store.Auth.Save(auther)
if err != nil {
return err
}
2019-01-05 22:44:33 +00:00
fmt.Printf(`
Congratulations! You've set up your database to use with File Browser.
2020-11-05 00:47:36 +08:00
Now add your first user via 'filebrowser users add' and then you just
2019-01-05 22:44:33 +00:00
need to call the main command to boot up the server.
`)
return printSettings(ser, s, auther)
2019-01-07 20:24:23 +00:00
}, pythonConfig{noDB: true}),
2019-01-05 22:44:33 +00:00
}