package main import ( "context" "log/slog" "os" "time" "calllinesystem/server/internal/config" "calllinesystem/server/internal/database" "calllinesystem/server/internal/model" "calllinesystem/server/internal/security" "gorm.io/gorm" ) func main() { logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelInfo})) cfg, err := config.Load() if err != nil { logger.Error("invalid configuration", "error", err) os.Exit(1) } password := os.Getenv("SUPER_ADMIN_PASSWORD") passwordHash, err := security.HashPassword(password) if err != nil { logger.Error("invalid super administrator password", "error", err) os.Exit(1) } ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() db, err := database.Open(ctx, cfg.DatabaseURL, logger, database.OpenOptions{ MaxOpenConns: cfg.DBMaxOpenConns, MaxIdleConns: cfg.DBMaxIdleConns, ConnMaxIdleTime: cfg.DBConnMaxIdleTime, ConnMaxLifetime: cfg.DBConnMaxLifetime, }) if err != nil { logger.Error("database startup failed", "error", err) os.Exit(1) } defer database.Close(db) var user model.User if err := db.WithContext(ctx).Where("username = ?", model.SuperAdminUsername).First(&user).Error; err != nil { if err == gorm.ErrRecordNotFound { logger.Error("protected super administrator is missing", "username", model.SuperAdminUsername) } else { logger.Error("load protected super administrator failed", "error", err) } os.Exit(1) } if err := db.WithContext(ctx).Model(&user).Updates(map[string]any{ "password_hash": passwordHash, "updated_at": time.Now().UTC(), }).Error; err != nil { logger.Error("rotate protected super administrator password failed", "error", err) os.Exit(1) } logger.Info("protected super administrator password rotated", "username", model.SuperAdminUsername) }