initial commit
This commit is contained in:
commit
3f79fc8e6c
527 changed files with 373170 additions and 0 deletions
130
main.go
Normal file
130
main.go
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
//go:generate ./templates.sh
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"flag"
|
||||
logger "log"
|
||||
"net"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"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.`
|
||||
)
|
||||
|
||||
var (
|
||||
datadir string
|
||||
listen string
|
||||
secureCookie bool
|
||||
user string
|
||||
group string
|
||||
logfile string
|
||||
|
||||
engine *Engine
|
||||
db *BoltStore
|
||||
)
|
||||
|
||||
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.Parse()
|
||||
|
||||
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)
|
||||
}
|
||||
err = os.Chdir(datadir)
|
||||
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("Index", 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)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue