toyohime/main.go
kare.nuorteva bf3ebf8d74 Replace config with a map
git-svn-id: file:///srv/svn/repo/toyohime/trunk@46 922d331f-388e-da47-97a9-ad700dc0b8b9
2017-05-07 15:36:23 +00:00

70 lines
1.3 KiB
Go

package main // import "kkn.fi/cmd/vanity"
import (
"bufio"
"errors"
"flag"
"fmt"
"io"
"log"
"net/http"
"os"
"strings"
"kkn.fi/cmd/vanity/internal"
)
var (
domainFlag = flag.String("d", "", "http domain name")
portFlag = flag.Int("p", 80, "http server port")
confFlag = flag.String("c", "", "configuration file")
)
func usage() {
fmt.Fprintf(os.Stderr, "usage: vanity -d domain -c vanity.conf [-p 80]\n")
flag.PrintDefaults()
}
func main() {
flag.Usage = usage
flag.Parse()
log.SetPrefix("vanity: ")
log.SetFlags(0)
if *domainFlag == "" || *confFlag == "" {
usage()
os.Exit(2)
}
c, err := os.Open(*confFlag)
if err != nil {
log.Fatal(err)
}
conf, err := readConfig(c)
if err != nil {
log.Fatal(err)
}
server := internal.NewServer(*domainFlag, conf)
port := fmt.Sprintf(":%v", *portFlag)
log.Fatal(http.ListenAndServe(port, server))
}
func readConfig(r io.Reader) (map[string]*internal.Package, error) {
conf := make(map[string]*internal.Package)
scanner := bufio.NewScanner(r)
for scanner.Scan() {
fields := strings.Fields(scanner.Text())
switch len(fields) {
case 0:
continue
case 3:
path := fields[0]
pack := internal.NewPackage(path, fields[1], fields[2])
conf[path] = pack
default:
return conf, errors.New("configuration error: " + scanner.Text())
}
}
return conf, nil
}