50 lines
854 B
Go
50 lines
854 B
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"log"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// K-V struct to store program's config
|
|
type ConfigKV struct {
|
|
gorm.Model
|
|
Key string `gorm:"unique"`
|
|
Value string
|
|
}
|
|
|
|
// init db
|
|
func initconfig(db *gorm.DB) error {
|
|
var err error
|
|
|
|
err = db.AutoMigrate(&ConfigKV{})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// config list and their default values
|
|
configs := make(map[string]string)
|
|
configs["authorization"] = "woshimima"
|
|
configs["policy"] = "main"
|
|
|
|
for key, value := range configs {
|
|
kv := ConfigKV{}
|
|
err = db.Take(&kv, "key = ?", key).Error
|
|
if err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
log.Println("Missing config", key, "creating with value", value)
|
|
kv.Key = key
|
|
kv.Value = value
|
|
if err = db.Create(&kv).Error; err != nil {
|
|
return err
|
|
}
|
|
} else {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|