added support for config files, openbsd, pledge and unveil

This commit is contained in:
ston1th 2018-10-26 17:28:50 +02:00
commit 375933c7bc
14 changed files with 138 additions and 49 deletions

View file

@ -3,6 +3,7 @@
package cmd
import (
"encoding/json"
"git.giftfish.de/ston1th/godrop/v2"
"git.giftfish.de/ston1th/gowiki/pkg/core"
"git.giftfish.de/ston1th/gowiki/pkg/db"
@ -29,10 +30,11 @@ const (
var (
conf core.Config
dumpFile string
config string
)
func initServer(conf core.Config) (err error) {
if err = core.Pledge("stdio rpath wpath cpath inet fattr flock proc exec id", ""); err != nil {
if err = godrop.PledgePromises("stdio rpath wpath cpath inet fattr flock proc exec id unveil"); err != nil {
return
}
dropCfg := godrop.Config{
@ -50,17 +52,17 @@ func initServer(conf core.Config) (err error) {
return
}
if err = core.Pledge("stdio rpath wpath cpath inet fattr flock", ""); err != nil {
if err = godrop.PledgePromises("stdio rpath wpath cpath inet fattr flock unveil"); err != nil {
return
}
log.InitLogger(conf.DataDir, conf.LogFile, conf.Debug)
l, err := godrop.GetListener()
if err != nil {
return
}
log.InitLogger(conf.DataDir, conf.LogFile, conf.Debug)
srv := server.NewHTTPServer(l, conf)
err = srv.Start()
if err != nil {
@ -70,7 +72,7 @@ func initServer(conf core.Config) (err error) {
sigs := make(chan os.Signal)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
sig := <-sigs
log.Println("caught " + sig.String())
log.Println("signal: " + sig.String())
go func() {
time.Sleep(time.Second * 20)
log.Fatal("stop timed out: killing")
@ -83,6 +85,21 @@ func initServer(conf core.Config) (err error) {
return
}
func loadConfig() error {
if config == "" {
return nil
}
file, err := os.Open(config)
if err != nil {
return err
}
err = json.NewDecoder(file).Decode(&conf)
if err != nil {
return err
}
return file.Close()
}
func Run(version string) {
app := cli.NewApp()
app.Name = "gowiki"
@ -94,9 +111,12 @@ func Run(version string) {
Usage: "start gowiki server",
Flags: defaultFlags(serverFlags()),
Action: func(c *cli.Context) error {
if err := loadConfig(); err != nil {
stdlog.Fatal("server: ", err)
}
conf.Version = app.Version
if err := initServer(conf); err != nil {
stdlog.Fatal(err)
stdlog.Fatal("server: ", err)
}
return nil
},
@ -110,15 +130,15 @@ func Run(version string) {
file = os.Stdout
err error
)
if err = loadConfig(); err != nil {
stdlog.Fatal("dump: ", err)
}
if dumpFile != "-" {
file, err = os.OpenFile(dumpFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0640)
if err != nil {
stdlog.Fatal("dump: ", err)
}
}
if err = os.Chdir(conf.DataDir); err != nil {
stdlog.Fatal("dump: ", err)
}
DB, err := db.New(conf.DataDir)
if err != nil {
stdlog.Fatal("dump: ", err)
@ -143,15 +163,15 @@ func Run(version string) {
file = os.Stdin
err error
)
if err = loadConfig(); err != nil {
stdlog.Fatal("restore: ", err)
}
if dumpFile != "-" {
file, err = os.Open(dumpFile)
if err != nil {
stdlog.Fatal("dump: ", err)
stdlog.Fatal("restore: ", err)
}
}
if err = os.Chdir(conf.DataDir); err != nil {
stdlog.Fatal("restore: ", err)
}
DB, err := db.New(conf.DataDir)
if err != nil {
stdlog.Fatal("restore: ", err)
@ -233,6 +253,11 @@ func dumpRestoreFlags() []cli.Flag {
func defaultFlags(f []cli.Flag) []cli.Flag {
return append([]cli.Flag{
cli.StringFlag{
Name: "config, c",
Usage: "config file",
Destination: &config,
},
cli.StringFlag{
Name: "data, d",
Value: defDataDir,