major changes
This commit is contained in:
parent
a3270f399d
commit
2b56832843
83 changed files with 7760 additions and 1244 deletions
154
main.go
154
main.go
|
|
@ -4,154 +4,14 @@
|
|||
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"flag"
|
||||
logger "log"
|
||||
"net"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
import "github.com/urfave/cli"
|
||||
|
||||
"git.giftfish.de/ston1th/godrop"
|
||||
"github.com/blevesearch/bleve"
|
||||
)
|
||||
|
||||
const (
|
||||
bleveStore = "."
|
||||
|
||||
defDataDir = "/var/lib/gowiki"
|
||||
defListen = "127.0.0.1:8090"
|
||||
defLog = "gowiki.log"
|
||||
|
||||
defUser = "admin"
|
||||
defPassword = "gowiki"
|
||||
|
||||
defRunUser = "wiki"
|
||||
defRunGroup = "wiki"
|
||||
|
||||
welcome = `# Welcome to GoWiki
|
||||
This is the [Index](/wiki/Index) page.
|
||||
You can customize it how you like.`
|
||||
indexName = "Index"
|
||||
)
|
||||
|
||||
var (
|
||||
datadir string
|
||||
listen string
|
||||
secureCookie bool
|
||||
user string
|
||||
group string
|
||||
logfile string
|
||||
|
||||
engine *Engine
|
||||
db *BoltStore
|
||||
|
||||
dump bool
|
||||
restore bool
|
||||
verbose bool
|
||||
)
|
||||
var version string
|
||||
|
||||
func main() {
|
||||
flag.StringVar(&datadir, "d", defDataDir, "data directory")
|
||||
flag.StringVar(&user, "u", defRunUser, "drop privileges to user")
|
||||
flag.StringVar(&group, "g", defRunGroup, "drop privileges to group")
|
||||
flag.StringVar(&listen, "l", defListen, "listening <address>:<port>")
|
||||
flag.StringVar(&logfile, "log", defLog, "log file")
|
||||
flag.BoolVar(&secureCookie, "s", false, "enable secure cookie")
|
||||
flag.BoolVar(&dump, "dump", false, "create a json dump of all articles in the data directory (dump is written to stdout)")
|
||||
flag.BoolVar(&restore, "restore", false, "restore a json dump to the data directory (dump is read from stdin)")
|
||||
flag.BoolVar(&verbose, "v", false, "enable verbose dump/restore mode")
|
||||
flag.Parse()
|
||||
|
||||
err := os.Chdir(datadir)
|
||||
if err != nil {
|
||||
logger.Fatal("main: ", err)
|
||||
}
|
||||
|
||||
if dump {
|
||||
err = dumpWiki()
|
||||
if err != nil {
|
||||
logger.Fatal("dump: ", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if restore {
|
||||
err = restoreWiki()
|
||||
if err != nil {
|
||||
logger.Fatal("restore: ", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
cfg := godrop.Config{
|
||||
User: user,
|
||||
Group: group,
|
||||
}
|
||||
err = godrop.Drop(cfg, func() (net.Listener, error) {
|
||||
return net.Listen("tcp", listen)
|
||||
})
|
||||
if err != nil {
|
||||
logger.Fatal("main: ", err)
|
||||
}
|
||||
newLogger(logfile)
|
||||
l, err := godrop.GetListener()
|
||||
if err != nil {
|
||||
log.Fatal("main: ", err)
|
||||
}
|
||||
|
||||
db, err = NewBoltStore("users")
|
||||
if err != nil {
|
||||
log.Fatal("main: ", err)
|
||||
}
|
||||
if !db.UserExists(defUser) {
|
||||
err = db.CreateUser(defUser, defPassword, true)
|
||||
if err != nil {
|
||||
log.Fatal("main: ", err)
|
||||
}
|
||||
}
|
||||
|
||||
if _, err := os.Stat(bleveStore); os.IsNotExist(err) {
|
||||
mapping := bleve.NewIndexMapping()
|
||||
index, err := bleve.New(bleveStore, mapping)
|
||||
if err != nil {
|
||||
log.Fatal("main: ", err)
|
||||
}
|
||||
engine = NewEngine(index)
|
||||
_, err = engine.Index(indexName, welcome, defUser, true)
|
||||
if err != nil {
|
||||
log.Fatal("main: ", err)
|
||||
}
|
||||
} else {
|
||||
index, err := bleve.Open(bleveStore)
|
||||
if err != nil {
|
||||
log.Fatal("main: ", err)
|
||||
}
|
||||
engine = NewEngine(index)
|
||||
}
|
||||
|
||||
go webserver(l)
|
||||
log.Println("gowiki started")
|
||||
sigs := make(chan os.Signal)
|
||||
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
||||
sig := <-sigs
|
||||
log.Println("caught " + sig.String())
|
||||
go func() {
|
||||
time.Sleep(time.Second * 20)
|
||||
log.Fatal(errors.New("stop timed out: killing"))
|
||||
}()
|
||||
err = l.Close()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
err = db.Close()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
err = engine.Close()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
app := cli.NewApp()
|
||||
app.Name = "gowiki"
|
||||
app.Usage = "a simple wiki engine"
|
||||
app.Version = version
|
||||
run(app)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue