goacc/pkg/db/db.go
2022-07-10 01:10:31 +02:00

69 lines
1.2 KiB
Go

// Copyright (C) 2022 Marius Schellenberger
package db
import (
"io"
"path/filepath"
"git.giftfish.de/ston1th/goacc/pkg/core"
"git.giftfish.de/ston1th/goacc/pkg/store"
"github.com/go-logr/logr"
)
const (
defUser = "admin"
defEmail = "admin@goacc"
defPassword = "goacc"
storeFile = "store.db"
bcryptCost = 13
)
type DB struct {
log logr.Logger
admin bool
store store.Store
}
func NewPlain(log logr.Logger, cfg *core.Config) (db *DB, err error) {
db = &DB{log: log, admin: cfg.Admin}
dbFile := filepath.Join(cfg.DataDir, storeFile)
//err = godrop.Unveil(dbFile, "rwc")
//if err != nil {
// return
//}
db.store, err = store.NewBoltStore(dbFile, nil)
return
}
func New(log logr.Logger, cfg *core.Config) (db *DB, err error) {
db, err = NewPlain(log, cfg)
if err != nil {
return
}
if db.UserExists(defUser) != nil {
err = db.CreateUser(defUser, defEmail, defPassword, true)
if err != nil {
return
}
}
err = db.UnlockUser(defUser)
if err != nil {
return
}
err = db.RunMigrations()
return
}
func (db *DB) Dump(w io.Writer) error {
return db.store.Dump(w)
}
func (db *DB) Restore(r io.Reader) error {
return db.store.Restore(r)
}
func (db *DB) Close() error {
return db.store.Close()
}