Files
darroyo de5f7ca4ee
CI / test (push) Failing after 12m28s
Cleanup: remove dead auth middleware and fix security log leak
- Remove dead AdminOnly() and AdminTokenAuth() middleware (unused since JWT switch)
- Remove dead RequireScope() middleware (also unused)
- Fix seed.go: only log password when auto-generated (was logging every time)
- Fix seed.go: use admin.Username (normalized) instead of raw username in log
- Simplify generateRandomPassword: 12 bytes (24 hex chars) instead of 24 bytes then truncate
- Me handler: use claims.Subject (UUID) for lookup instead of username
- Remove unused /logout endpoint (stateless JWT)
2026-07-31 17:26:31 -04:00

63 lines
1.2 KiB
Go

package db
import (
"crypto/rand"
"encoding/hex"
"log/slog"
"strings"
"golang.org/x/crypto/bcrypt"
"github.com/google/uuid"
"gorm.io/gorm"
)
func generateRandomPassword(length int) (string, error) {
bytes := make([]byte, length)
if _, err := rand.Read(bytes); err != nil {
return "", err
}
return hex.EncodeToString(bytes), nil
}
func SeedAdminUser(db *gorm.DB, username, password string) error {
var count int64
db.Model(&AdminUser{}).Count(&count)
if count > 0 {
slog.Info("admin user already exists, skipping seed")
return nil
}
pwd := password
autoGenerated := false
if pwd == "" {
var err error
pwd, err = generateRandomPassword(12)
if err != nil {
return err
}
autoGenerated = true
}
hash, err := bcrypt.GenerateFromPassword([]byte(pwd), bcrypt.DefaultCost)
if err != nil {
return err
}
admin := AdminUser{
ID: uuid.New(),
Username: strings.ToLower(username),
PasswordHash: string(hash),
IsActive: true,
}
if err := db.Create(&admin).Error; err != nil {
return err
}
slog.Info("admin user seeded", "username", admin.Username)
if autoGenerated {
slog.Warn("ADMIN USER: username=" + admin.Username + " password=" + pwd + " (save this, it won't be shown again)")
}
return nil
}