diff options
-rw-r--r-- | init.go | 153 |
1 files changed, 133 insertions, 20 deletions
diff --git a/init.go b/init.go index a7fd4af..349c3f6 100644 --- a/init.go +++ b/init.go @@ -6,6 +6,8 @@ import ( "log" "os" "os/signal" + "path/filepath" + "strings" "time" "github.com/fsnotify/fsnotify" @@ -19,9 +21,9 @@ const getwtxt = "0.1" var ( flagVersion *bool = pflag.BoolP("version", "v", false, "Display version information, then exit.") - flagHelp *bool = pflag.BoolP("help", "h", false, "Display the help screen") - flagConfFile *string = pflag.StringP("config", "c", "getwtxt", "The name of the configuration file without an extension.") - flagConfType *string = pflag.StringP("type", "t", "yml", "The filetype of the configuration file.") + flagHelp *bool = pflag.BoolP("help", "h", false, "Display the quick-help screen.") + flagMan *bool = pflag.BoolP("man", "m", false, "Display the configuration manual.") + flagConfFile *string = pflag.StringP("config", "c", "", "The name/path of the configuration file you wish to use.") ) var confObj = &Configuration{} @@ -72,16 +74,37 @@ func checkFlags() { helpScreen() os.Exit(0) } + if *flagMan { + titleScreen() + helpScreen() + manualScreen() + os.Exit(0) + } } func initConfig() { - viper.SetConfigName(*flagConfFile) - viper.SetConfigType(*flagConfType) - viper.AddConfigPath(".") - viper.AddConfigPath("/usr/local/getwtxt") - viper.AddConfigPath("/etc") - viper.AddConfigPath("/usr/local/etc") + if *flagConfFile == "" { + viper.SetConfigName("getwtxt") + viper.SetConfigType("yml") + viper.AddConfigPath(".") + viper.AddConfigPath("/usr/local/getwtxt") + viper.AddConfigPath("/etc") + viper.AddConfigPath("/usr/local/etc") + + } else { + path, file := filepath.Split(*flagConfFile) + if path == "" { + path = "." + } + if file == "" { + file = *flagConfFile + } + filename := strings.Split(file, ".") + viper.SetConfigName(filename[0]) + viper.SetConfigType(filename[1]) + viper.AddConfigPath(path) + } log.Printf("Loading configuration ...\n") if err := viper.ReadInConfig(); err != nil { @@ -259,7 +282,7 @@ func watchForInterrupt() { func titleScreen() { fmt.Printf(` - + _ _ _ __ _ ___| |___ _| |___ _| |_ / _ |/ _ \ __\ \ /\ / / __\ \/ / __| @@ -268,7 +291,7 @@ func titleScreen() { |___/ version ` + getwtxt + ` github.com/getwtxt/getwtxt - GPL v3 + GPL v3 `) } @@ -276,16 +299,106 @@ func helpScreen() { fmt.Printf(` getwtxt Help -Command line options: +Command Line Options: -h Print this help screen. -v Print the version information and quit. - -c [--config] Name of an alternate configuration file - to use. Do not include the file extention, - such as ".yml". Must be in the expected - locations. - -t [--type] The file type / extension of the config file. - json, yml, etc. - - + -c [--config] Path to an alternate configuration file + to use. May be relative or absolute. +`) +} +func manualScreen() { + fmt.Printf(` +Configuration File: + The default configuration file is in YAML format, chosen for +its clarity and its support of commenting (unlike JSON). It may +be placed in any of the following locations by default: + + The same directory as the getwtxt executable + /usr/local/getwtxt/ + /etc/ + /usr/local/etc/ + + The paths are searched in that order. The first configuration +file found is used by getwtxt, while the locations further down +are ignored. + + Multiple configuration files may be used, however, with the +'-c' command line flag. The path passed to getwtxt via '-c' may +be relative or absolute. For example, both of the following are +allowed: + + ./getwtxt -c myconfig.json + ./getwtxt -c /etc/ExtraConfigsDir/mysecondconfig.toml + +The supported configuration types are: + YAML, TOML, JSON, HCL + + The configuration file contains several options used to +customize your instance of getwtxt. None are required, they will +simply use their default value unless otherwise specified. + + ListenPort: Defines the port getwtxt should bind to. + Default: 9001 + + DatabasePath: The location of the LevelDB structure + used by getwtxt to back up registry data. This + can be a relative or absolute path. + Default: getwtxt.db + + StdoutLogging: Boolean used to determine whether + getwtxt should send logging output to stdout. + This is useful for debugging, but you should + probably save your logs once your instance + is running. + Default: false + + LogFile: The location of getwtxt's log file. This, + like DatabasePath, can be relative or absolute. + Default: getwtxt.log + + DatabasePushInterval: The interval on which getwtxt + will push registry data from the in-memory cache + to the on-disk LevelDB database. The following + time suffixes may be used: + ns, us, ms, s, m, h + Default: 5m + + StatusFetchInterval: The interval on which getwtxt + will crawl all users' twtxt files to retrieve + new statuses. The same time suffixes as + DatabasePushInterval may be used. + Default: 1h + + Instance: Signifies the start of instance-specific + meta information. The following are used only + for the summary and use information displayed + by the default web page for getwtxt. If desired, + the assets/tmpl/index.html file may be + customized. Keep in mind that in YAML, the + following options must be preceded by two spaces + so that they are interpreted as sub-options. + + SiteName: The name of your getwtxt instance. + Default: getwtxt + + URL: The publicly-accessible URL of your + getwtxt instance. + Default: https://twtxt.example.com + + OwnerName: Your name. + Default: Anonymous Microblogger + + Email: Your email address. + Default: nobody@knows + + Description: A short description of your getwtxt + instance or your site. As this likely includes + whitespace, it should be in double-quotes. + This can include XHTML or HTML line breaks if + desired: + <br /> + <br> + Default: "A fast, resilient twtxt registry + server written in Go!" `) } |