package user import ( "context" "fmt" "log" "gitea.local/admin/hspguard/internal/config" "gitea.local/admin/hspguard/internal/repository" "gitea.local/admin/hspguard/internal/util" "github.com/google/uuid" ) func EnsureAdminUser(ctx context.Context, cfg *config.AppConfig, repo *repository.Queries) { _, err := repo.FindUserEmail(ctx, cfg.Admin.Email) if err != nil { if cfg.Admin.Password == "" { log.Fatalln("ERR: ADMIN_PASSWORD env variable is required") } if _, err := createAdmin(ctx, cfg.Admin.Name, cfg.Admin.Email, cfg.Admin.Password, repo); err != nil { log.Fatalln("ERR: Failed to create admin account:", err) } } } func createAdmin(ctx context.Context, name, email, password string, repo *repository.Queries) (uuid.UUID, error) { hash, err := util.HashPassword(password) if err != nil { var id uuid.UUID return id, fmt.Errorf("failed to hash the admin password") } return repo.InsertUser(ctx, repository.InsertUserParams{ FullName: name, Email: email, PasswordHash: hash, IsAdmin: true, }) }