37 lines
803 B
Go
37 lines
803 B
Go
package seed
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"0451meishiditu/backend/internal/config"
|
|
"0451meishiditu/backend/internal/models"
|
|
|
|
"golang.org/x/crypto/bcrypt"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func EnsureInitialAdmin(db *gorm.DB, cfg config.Config) error {
|
|
var cnt int64
|
|
if err := db.Model(&models.AdminUser{}).Count(&cnt).Error; err != nil {
|
|
return err
|
|
}
|
|
if cnt > 0 {
|
|
return nil
|
|
}
|
|
if cfg.AdminInitUsername == "" || cfg.AdminInitPassword == "" {
|
|
return errors.New("ADMIN_INIT_USERNAME and ADMIN_INIT_PASSWORD are required for initial seed")
|
|
}
|
|
|
|
hash, err := bcrypt.GenerateFromPassword([]byte(cfg.AdminInitPassword), bcrypt.DefaultCost)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return db.Create(&models.AdminUser{
|
|
Username: cfg.AdminInitUsername,
|
|
PasswordHash: string(hash),
|
|
Role: "admin",
|
|
}).Error
|
|
}
|
|
|