added support for config files, openbsd, pledge and unveil
This commit is contained in:
parent
62543e44da
commit
375933c7bc
14 changed files with 138 additions and 49 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue