]> Sergey Matveev's repositories - sgblog.git/commitdiff
Simplify config read and arguments parsing
authorSergey Matveev <stargrave@stargrave.org>
Sat, 1 May 2021 13:11:26 +0000 (16:11 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sat, 1 May 2021 13:11:40 +0000 (16:11 +0300)
cmd/sgblog/gopher.go
cmd/sgblog/http.go
cmd/sgblog/main.go
common.go

index 183914c8c582399b621c2506e5c01c42eb836b2c..b12a2b893e1e1c02e180f70f8368f742d54d157b 100644 (file)
@@ -19,11 +19,9 @@ package main
 
 import (
        "bufio"
-       "encoding/json"
        "errors"
        "fmt"
        "io"
-       "io/ioutil"
        "log"
        "net/url"
        "os"
@@ -34,7 +32,6 @@ import (
        "github.com/go-git/go-git/v5"
        "github.com/go-git/go-git/v5/plumbing"
        "github.com/go-git/go-git/v5/plumbing/object"
-       "github.com/hjson/hjson-go"
        "go.stargrave.org/sgblog"
 )
 
@@ -86,24 +83,11 @@ type TableMenuEntry struct {
        Topics      []string
 }
 
-func serveGopher() {
-       cfgPath := os.Args[2]
-       cfgRaw, err := ioutil.ReadFile(cfgPath)
+func serveGopher(cfgPath string) {
+       cfg, err := readCfg(cfgPath)
        if err != nil {
                log.Fatalln(err)
        }
-       var cfgGeneral map[string]interface{}
-       if err = hjson.Unmarshal(cfgRaw, &cfgGeneral); err != nil {
-               log.Fatalln(err)
-       }
-       cfgRaw, err = json.Marshal(cfgGeneral)
-       if err != nil {
-               log.Fatalln(err)
-       }
-       var cfg *Cfg
-       if err = json.Unmarshal(cfgRaw, &cfg); err != nil {
-               log.Fatalln(err)
-       }
        if cfg.GopherDomain == "" {
                log.Fatalln("GopherDomain is not configured")
        }
index bad1cb8688e38a0342d6580c4cb30028330ef413..d039ed38ec6b27b2964cc8811ac7904a6fce895f 100644 (file)
@@ -22,14 +22,12 @@ import (
        "compress/gzip"
        "crypto/sha1"
        "encoding/hex"
-       "encoding/json"
        "encoding/xml"
        "errors"
        "fmt"
        "hash"
        "html"
        "io"
-       "io/ioutil"
        "log"
        "net/url"
        "os"
@@ -40,7 +38,6 @@ import (
        "github.com/go-git/go-git/v5"
        "github.com/go-git/go-git/v5/plumbing"
        "github.com/go-git/go-git/v5/plumbing/object"
-       "github.com/hjson/hjson-go"
        "go.stargrave.org/sgblog"
        "go.stargrave.org/sgblog/cmd/sgblog/atom"
        "golang.org/x/crypto/blake2b"
@@ -260,22 +257,11 @@ func serveHTTP() {
        if cfgPath == "" {
                log.Fatalln("SGBLOG_CFG is not set")
        }
-       cfgRaw, err := ioutil.ReadFile(cfgPath)
+       cfg, err := readCfg(cfgPath)
        if err != nil {
-               makeErr(err)
-       }
-       var cfgGeneral map[string]interface{}
-       if err = hjson.Unmarshal(cfgRaw, &cfgGeneral); err != nil {
-               makeErr(err)
-       }
-       cfgRaw, err = json.Marshal(cfgGeneral)
-       if err != nil {
-               makeErr(err)
-       }
-       var cfg *Cfg
-       if err = json.Unmarshal(cfgRaw, &cfg); err != nil {
-               makeErr(err)
+               log.Fatalln(err)
        }
+
        pathInfo, exists := os.LookupEnv("PATH_INFO")
        if !exists {
                pathInfo = "/"
index 7603d125b80d5b45f7ca1b0bc3b0506761aea93b..b373564cbcd6dd31d14efeb17720862af395a392 100644 (file)
@@ -21,9 +21,10 @@ package main
 import (
        "bytes"
        "crypto/sha1"
+       "encoding/json"
+       "flag"
        "fmt"
        "io/ioutil"
-       "os"
        "regexp"
        "sort"
        "strings"
@@ -32,6 +33,7 @@ import (
        "github.com/go-git/go-git/v5"
        "github.com/go-git/go-git/v5/plumbing"
        "github.com/go-git/go-git/v5/plumbing/object"
+       "github.com/hjson/hjson-go"
        "go.cypherpunks.ru/recfile"
 )
 
@@ -195,9 +197,37 @@ func initRepo(cfg *Cfg) (*plumbing.Hash, error) {
        return &headHash, nil
 }
 
+func readCfg(cfgPath string) (*Cfg, error) {
+       cfgRaw, err := ioutil.ReadFile(cfgPath)
+       if err != nil {
+               return nil, err
+       }
+       var cfgGeneral map[string]interface{}
+       if err = hjson.Unmarshal(cfgRaw, &cfgGeneral); err != nil {
+               return nil, err
+       }
+       cfgRaw, err = json.Marshal(cfgGeneral)
+       if err != nil {
+               return nil, err
+       }
+       var cfg *Cfg
+       if err = json.Unmarshal(cfgRaw, &cfg); err != nil {
+               return nil, err
+       }
+       return cfg, nil
+}
+
 func main() {
-       if len(os.Args) == 3 && os.Args[1] == "-gopher" {
-               serveGopher()
+       gopherCfgPath := flag.String("gopher", "", "Path to gopher-related configuration file")
+       flag.Usage = func() {
+               fmt.Fprintf(flag.CommandLine.Output(), `Usage of sgblog:
+       sgblog -- run CGI HTTP backend
+       sgblog -gopher /path/to/cfg.hjson -- run UCSPI/inetd Gopher backend
+`)
+       }
+       flag.Parse()
+       if *gopherCfgPath != "" {
+               serveGopher(*gopherCfgPath)
        } else {
                serveHTTP()
        }
index ea1e7db192831f6e7eac0001f12078cc4b3a3e74..ebb5a9d1b7d0f0f93e33af16f09db0c43b475925 100644 (file)
--- a/common.go
+++ b/common.go
@@ -2,6 +2,6 @@
 package sgblog
 
 const (
-       Version = "0.16.0"
+       Version = "0.17.0"
        WhenFmt = "2006-01-02 15:04:05Z07:00"
 )