69 lines
1.2 KiB
Go
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()
|
|
}
|