2018-08-21 22:42:03 +01:00
package cmd
import (
"log"
"strings"
2018-08-22 13:15:55 +01:00
fb "github.com/filebrowser/filebrowser/lib"
2018-08-21 22:42:03 +01:00
homedir "github.com/mitchellh/go-homedir"
"github.com/spf13/cobra"
v "github.com/spf13/viper"
)
var cfgFile string
// rootCmd represents the base command when called without any subcommands
var rootCmd = & cobra . Command {
Use : "filebrowser" ,
2018-08-22 13:15:55 +01:00
Version : fb . Version ,
2018-08-21 22:42:03 +01:00
Aliases : [] string { "serve" },
Short : "A stylish web-based file manager" ,
Long : `Command 'serve' is the default. Filebrowser is started
with the provided envvars, flags and/or config file. For example:
filebrowser -c config.json -p 80 -s ./srv
File Browser is a static binary composed of a golang backend and
a Vue.js frontend to create, edit, copy, move, download your files
easily, everywhere, every time.` ,
// Run: func(cmd *cobra.Command, args []string) {},
}
// Execute adds all child commands to the root command and sets flags appropriately.
// This is called by main.main(). It only needs to happen once to the rootCmd.
func Execute () {
checkRootAlias ()
if err := rootCmd . Execute (); err != nil {
panic ( err )
}
}
func init () {
cobra . OnInitialize ( initConfig )
rootCmd . SetVersionTemplate ( "File Browser {{printf \"version %s\" .Version}}\n" )
rootCmd . PersistentFlags (). StringVarP ( & cfgFile , "config" , "c" , "" , "config file (defaults are './.filebrowser[ext]', '$HOME/.filebrowser[ext]' or '/etc/filebrowser/.filebrowser[ext]')" )
}
// initConfig reads in config file and ENV variables if set.
func initConfig () {
if cfgFile == "" {
// Find home directory.
home , err := homedir . Dir ()
if err != nil {
panic ( err )
}
v . AddConfigPath ( "." )
v . AddConfigPath ( home )
v . AddConfigPath ( "/etc/filebrowser/" )
v . SetConfigName ( ".filebrowser" )
} else {
// Use config file from the flag.
v . SetConfigFile ( cfgFile )
}
v . SetEnvPrefix ( "FB" )
v . AutomaticEnv ()
v . SetEnvKeyReplacer ( strings . NewReplacer ( "." , "_" ))
if err := v . ReadInConfig (); err != nil {
if _ , ok := err .( v . ConfigParseError ); ok {
panic ( err )
}
} else {
log . Println ( "Using config file:" , v . ConfigFileUsed ())
}
}