Files
filebrowser/cmd/config.go
T

130 lines
4.3 KiB
Go
Raw Normal View History

2019-01-05 22:44:33 +00:00
package cmd
import (
"encoding/json"
nerrors "errors"
"fmt"
"os"
"strings"
"text/tabwriter"
"github.com/filebrowser/filebrowser/v2/auth"
"github.com/filebrowser/filebrowser/v2/errors"
"github.com/filebrowser/filebrowser/v2/settings"
"github.com/spf13/cobra"
2019-01-08 10:50:37 +00:00
"github.com/spf13/pflag"
2019-01-05 22:44:33 +00:00
)
func init() {
rootCmd.AddCommand(configCmd)
}
var configCmd = &cobra.Command{
Use: "config",
Version: rootCmd.Version,
Short: "Configuration management utility",
Long: `Configuration management utility.`,
Args: cobra.NoArgs,
2019-01-05 22:44:33 +00:00
}
2019-01-08 10:50:37 +00:00
func addConfigFlags(flags *pflag.FlagSet) {
2019-01-08 14:07:55 +00:00
addServerFlags(flags)
2019-01-08 10:50:37 +00:00
addUserFlags(flags)
flags.BoolP("signup", "s", false, "allow users to signup")
flags.String("shell", "", "shell command to which other commands should be appended")
2019-01-05 22:44:33 +00:00
2019-01-08 10:50:37 +00:00
flags.String("auth.method", string(auth.MethodJSONAuth), "authentication type")
flags.String("auth.header", "", "HTTP header for auth.method=proxy")
2019-01-05 22:44:33 +00:00
2019-01-08 10:50:37 +00:00
flags.String("recaptcha.host", "https://www.google.com", "use another host for ReCAPTCHA. recaptcha.net might be useful in China")
flags.String("recaptcha.key", "", "ReCaptcha site key")
flags.String("recaptcha.secret", "", "ReCaptcha secret")
2019-01-05 22:44:33 +00:00
2019-01-08 10:50:37 +00:00
flags.String("branding.name", "", "replace 'File Browser' by this name")
flags.String("branding.files", "", "path to directory with images and custom styles")
flags.Bool("branding.disableExternal", false, "disable external links such as GitHub links")
2019-01-05 22:44:33 +00:00
}
2019-01-08 14:07:55 +00:00
func getAuthentication(flags *pflag.FlagSet) (settings.AuthMethod, auth.Auther) {
method := settings.AuthMethod(mustGetString(flags, "auth.method"))
2019-01-05 22:44:33 +00:00
var auther auth.Auther
if method == auth.MethodProxyAuth {
2019-01-08 14:07:55 +00:00
header := mustGetString(flags, "auth.header")
2019-01-05 22:44:33 +00:00
if header == "" {
panic(nerrors.New("you must set the flag 'auth.header' for method 'proxy'"))
}
auther = &auth.ProxyAuth{Header: header}
}
if method == auth.MethodNoAuth {
auther = &auth.NoAuth{}
}
if method == auth.MethodJSONAuth {
jsonAuth := &auth.JSONAuth{}
2019-01-08 14:07:55 +00:00
host := mustGetString(flags, "recaptcha.host")
key := mustGetString(flags, "recaptcha.key")
secret := mustGetString(flags, "recaptcha.secret")
2019-01-05 22:44:33 +00:00
if key != "" && secret != "" {
jsonAuth.ReCaptcha = &auth.ReCaptcha{
Host: host,
Key: key,
Secret: secret,
}
}
auther = jsonAuth
}
if auther == nil {
panic(errors.ErrInvalidAuthMethod)
}
return method, auther
}
2019-01-08 14:07:55 +00:00
func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Auther) {
2019-01-05 22:44:33 +00:00
w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
2019-01-08 14:07:55 +00:00
fmt.Fprintf(w, "Sign up:\t%t\n", set.Signup)
fmt.Fprintf(w, "Auth method:\t%s\n", set.AuthMethod)
fmt.Fprintf(w, "Shell:\t%s\t\n", strings.Join(set.Shell, " "))
2019-01-05 22:44:33 +00:00
fmt.Fprintln(w, "\nBranding:")
2019-01-08 14:07:55 +00:00
fmt.Fprintf(w, "\tName:\t%s\n", set.Branding.Name)
fmt.Fprintf(w, "\tFiles override:\t%s\n", set.Branding.Files)
fmt.Fprintf(w, "\tDisable external links:\t%t\n", set.Branding.DisableExternal)
fmt.Fprintln(w, "\nServer:")
fmt.Fprintf(w, "\tLog:\t%s\n", ser.Log)
fmt.Fprintf(w, "\tPort:\t%s\n", ser.Port)
fmt.Fprintf(w, "\tBase URL:\t%s\n", ser.BaseURL)
fmt.Fprintf(w, "\tRoot:\t%s\n", ser.Root)
fmt.Fprintf(w, "\tAddress:\t%s\n", ser.Address)
fmt.Fprintf(w, "\tTLS Cert:\t%s\n", ser.TLSCert)
fmt.Fprintf(w, "\tTLS Key:\t%s\n", ser.TLSKey)
2019-01-05 22:44:33 +00:00
fmt.Fprintln(w, "\nDefaults:")
2019-01-08 14:07:55 +00:00
fmt.Fprintf(w, "\tScope:\t%s\n", set.Defaults.Scope)
fmt.Fprintf(w, "\tLocale:\t%s\n", set.Defaults.Locale)
fmt.Fprintf(w, "\tView mode:\t%s\n", set.Defaults.ViewMode)
fmt.Fprintf(w, "\tCommands:\t%s\n", strings.Join(set.Defaults.Commands, " "))
2019-01-05 22:44:33 +00:00
fmt.Fprintf(w, "\tSorting:\n")
2019-01-08 14:07:55 +00:00
fmt.Fprintf(w, "\t\tBy:\t%s\n", set.Defaults.Sorting.By)
fmt.Fprintf(w, "\t\tAsc:\t%t\n", set.Defaults.Sorting.Asc)
2019-01-05 22:44:33 +00:00
fmt.Fprintf(w, "\tPermissions:\n")
2019-01-08 14:07:55 +00:00
fmt.Fprintf(w, "\t\tAdmin:\t%t\n", set.Defaults.Perm.Admin)
fmt.Fprintf(w, "\t\tExecute:\t%t\n", set.Defaults.Perm.Execute)
fmt.Fprintf(w, "\t\tCreate:\t%t\n", set.Defaults.Perm.Create)
fmt.Fprintf(w, "\t\tRename:\t%t\n", set.Defaults.Perm.Rename)
fmt.Fprintf(w, "\t\tModify:\t%t\n", set.Defaults.Perm.Modify)
fmt.Fprintf(w, "\t\tDelete:\t%t\n", set.Defaults.Perm.Delete)
fmt.Fprintf(w, "\t\tShare:\t%t\n", set.Defaults.Perm.Share)
fmt.Fprintf(w, "\t\tDownload:\t%t\n", set.Defaults.Perm.Download)
2019-01-05 22:44:33 +00:00
w.Flush()
b, err := json.MarshalIndent(auther, "", " ")
checkErr(err)
fmt.Printf("\nAuther configuration (raw):\n\n%s\n\n", string(b))
}