summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorBen Morrison <ben@gbmor.dev>2019-05-28 00:55:07 -0400
committerBen Morrison <ben@gbmor.dev>2019-05-28 01:17:30 -0400
commitcf6c8491063db9f96aac139beb3dbb296ae795c3 (patch)
tree734bf98261bce25f164c5431f20579fa565deda4
parent3aaa9f3d3c5d5b59b6629897111b43c5caeadccc (diff)
downloadgetwtxt-cf6c8491063db9f96aac139beb3dbb296ae795c3.tar.gz
configuration via flags is more flexible.
expanded help/manual
-rw-r--r--init.go153
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!"
 `)
 }