1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /*
- Copyright © 2022 Tone
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- package cmd
- import (
- "os"
- "github.com/rs/zerolog"
- "github.com/spf13/cobra"
- "github.com/spf13/viper"
- )
- var cfgFile string
- var log zerolog.Logger
- // rootCmd represents the base command when called without any subcommands
- var rootCmd = &cobra.Command{
- Use: "sakuin",
- Short: "Simple but effective fileserver",
- Long: `An HTTP fileserver in golang with a simple WebUI`,
- }
- // 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() {
- err := rootCmd.Execute()
- if err != nil {
- os.Exit(1)
- }
- }
- func init() {
- cobra.OnInitialize(initConfig)
- rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.sakuin.yaml)")
- host, _ := os.Hostname()
- log = zerolog.New(os.Stdout).With().
- Timestamp().
- Str("role", "sakuin").
- Str("host", host).
- Logger()
- }
- // initConfig reads in config file and ENV variables if set.
- func initConfig() {
- if cfgFile != "" {
- // Use config file from the flag.
- viper.SetConfigFile(cfgFile)
- } else {
- // Find home directory.
- home, err := os.UserHomeDir()
- cobra.CheckErr(err)
- // Search config in home directory with name ".sakuin" (without extension).
- viper.AddConfigPath(home)
- viper.SetConfigType("yaml")
- viper.SetConfigName(".sakuin")
- }
- viper.SetEnvPrefix("sakuin")
- viper.AutomaticEnv() // read in environment variables that match
- // If a config file is found, read it in.
- if err := viper.ReadInConfig(); err == nil {
- log.Info().Msgf("Using config file: %s", viper.ConfigFileUsed())
- }
- }
|