diff --git a/backend/handlers/admin/custom_services.go b/backend/handlers/admin/custom_services.go index 2cc9791..a6a5ae8 100644 --- a/backend/handlers/admin/custom_services.go +++ b/backend/handlers/admin/custom_services.go @@ -207,7 +207,8 @@ func CreateCustomService(w http.ResponseWriter, r *http.Request) { return } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -321,7 +322,8 @@ func UpdateCustomService(w http.ResponseWriter, r *http.Request) { return } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } diff --git a/backend/handlers/admin/discount_campaigns.go b/backend/handlers/admin/discount_campaigns.go index 08a5fb9..69cc411 100644 --- a/backend/handlers/admin/discount_campaigns.go +++ b/backend/handlers/admin/discount_campaigns.go @@ -216,7 +216,8 @@ func CreateDiscountCampaign(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -421,7 +422,8 @@ func UpdateDiscountCampaign(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } diff --git a/backend/handlers/admin/patch_tests.go b/backend/handlers/admin/patch_tests.go index 05fe14b..a46b430 100644 --- a/backend/handlers/admin/patch_tests.go +++ b/backend/handlers/admin/patch_tests.go @@ -5,6 +5,7 @@ import ( "crussell/internal/validators" "database/sql" "encoding/json" + "log" "log/slog" "net/http" "strconv" @@ -86,7 +87,8 @@ func CreatePatchTest(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -138,7 +140,8 @@ func UpdatePatchTest(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } diff --git a/backend/handlers/auth/local.go b/backend/handlers/auth/local.go index 7036582..a88b2fc 100644 --- a/backend/handlers/auth/local.go +++ b/backend/handlers/auth/local.go @@ -79,7 +79,8 @@ func RegisterHandler(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -146,7 +147,8 @@ func RegisterHandler(w http.ResponseWriter, r *http.Request) { // Validate email format if err := validators.ValidateEmail(req.Email); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -316,7 +318,8 @@ func LoginHandler(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -542,7 +545,8 @@ func GenerateVerificationCodeHandler(w http.ResponseWriter, r *http.Request) { return } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -589,7 +593,8 @@ func VerifyCodeHandler(w http.ResponseWriter, r *http.Request) { return } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } diff --git a/backend/handlers/bookings/bookings.go b/backend/handlers/bookings/bookings.go index 258c860..e30f7a2 100644 --- a/backend/handlers/bookings/bookings.go +++ b/backend/handlers/bookings/bookings.go @@ -1336,7 +1336,8 @@ func UpdateBookingServicesHandler(w http.ResponseWriter, r *http.Request) { return } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -2034,7 +2035,8 @@ if err := db.Conn.QueryRow(r.Context(), `SELECT COALESCE(SUM(amount), 0) FROM pa } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -2405,7 +2407,8 @@ func EditBookingHandler(w http.ResponseWriter, r *http.Request) { return } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -2575,7 +2578,8 @@ func ProgressBookingHandler(w http.ResponseWriter, r *http.Request) { return } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -2994,7 +2998,8 @@ func ConfirmBookingHandler(w http.ResponseWriter, r *http.Request) { return } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -3212,7 +3217,8 @@ func DeleteBookingHandler(w http.ResponseWriter, r *http.Request) { return } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } allowed := map[string]bool{ @@ -4149,7 +4155,8 @@ func AdminRescheduleBookingHandler(w http.ResponseWriter, r *http.Request) { return } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } diff --git a/backend/handlers/bookings/manage.go b/backend/handlers/bookings/manage.go index 15a2d8e..7ec463a 100644 --- a/backend/handlers/bookings/manage.go +++ b/backend/handlers/bookings/manage.go @@ -359,7 +359,8 @@ func AdminCreateBookingForUserHandler(w http.ResponseWriter, r *http.Request) { return } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -1287,7 +1288,8 @@ func RequestEditHandler(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } diff --git a/backend/handlers/bookings/reserve.go b/backend/handlers/bookings/reserve.go index daed57d..330e33e 100644 --- a/backend/handlers/bookings/reserve.go +++ b/backend/handlers/bookings/reserve.go @@ -45,7 +45,8 @@ func ReserveSlotHandler(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } diff --git a/backend/handlers/payments/giftcards.go b/backend/handlers/payments/giftcards.go index b67fb32..5902674 100644 --- a/backend/handlers/payments/giftcards.go +++ b/backend/handlers/payments/giftcards.go @@ -866,7 +866,8 @@ func BuyGiftCard(w http.ResponseWriter, r *http.Request) { } if err := ValidateCardInfo(req.CardID, req.NewCardToken); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } diff --git a/backend/handlers/payments/handlers.go b/backend/handlers/payments/handlers.go index f767495..9c61a0d 100644 --- a/backend/handlers/payments/handlers.go +++ b/backend/handlers/payments/handlers.go @@ -322,7 +322,8 @@ func CreateTerminalPayment(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -330,12 +331,14 @@ func CreateTerminalPayment(w http.ResponseWriter, r *http.Request) { // L5 if err := ValidateAmount(req.Amount); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } if err := ValidatePaymentType(req.PaymentType); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -733,7 +736,8 @@ func CreateBookingPayment(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -741,17 +745,20 @@ func CreateBookingPayment(w http.ResponseWriter, r *http.Request) { // L5 if err := ValidateAmount(req.Amount); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } if err := ValidatePaymentType(req.PaymentType); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } if err := ValidateCardInfo(req.CardID, req.NewCardToken); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -765,7 +772,8 @@ func CreateBookingPayment(w http.ResponseWriter, r *http.Request) { return } if err := ValidatePartialAmount(req.Amount, remainingCents); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } } @@ -1528,7 +1536,8 @@ func CreatePaymentMethod(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -1544,7 +1553,8 @@ func CreatePaymentMethod(w http.ResponseWriter, r *http.Request) { card, err := service.CreatePaymentMethodFromDetails(r.Context(), userID, req.CardNumber, req.Expiry, req.CVC) if err != nil { if strings.Contains(err.Error(), "invalid") || strings.Contains(err.Error(), "expired") { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } log.Printf("Failed to create payment method: %v", err) @@ -1576,12 +1586,14 @@ func RefundPayment(w http.ResponseWriter, r *http.Request) { } if err := ValidateAmount(req.Amount); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } if err := ValidateRefundReason(req.Reason); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -1709,7 +1721,8 @@ func CreateTipPayment(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -1717,7 +1730,8 @@ func CreateTipPayment(w http.ResponseWriter, r *http.Request) { // L5 if err := ValidateAmount(req.Amount); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } diff --git a/backend/handlers/payments/till.go b/backend/handlers/payments/till.go index 059b65c..af6cbd7 100644 --- a/backend/handlers/payments/till.go +++ b/backend/handlers/payments/till.go @@ -55,7 +55,8 @@ func CreateTillSale(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } diff --git a/backend/handlers/portfolio/images.go b/backend/handlers/portfolio/images.go index 6f42bc8..bef3ae7 100644 --- a/backend/handlers/portfolio/images.go +++ b/backend/handlers/portfolio/images.go @@ -135,13 +135,15 @@ func ListImages(w http.ResponseWriter, r *http.Request) { // Validate input length if tagFilter != "" { if err := validateInputLength(tagFilter); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } } if tagsFilter != "" { if err := validateInputLength(tagsFilter); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } } @@ -184,7 +186,8 @@ func ListImages(w http.ResponseWriter, r *http.Request) { // Validate input length if err := validateInputLength(category + ":" + value); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -1075,7 +1078,8 @@ func GetImage(w http.ResponseWriter, r *http.Request) { // Validate input length if err := validateInputLength(imageID); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } diff --git a/backend/handlers/scheduling/default-hours.go b/backend/handlers/scheduling/default-hours.go index e7c952b..ee5c1a6 100644 --- a/backend/handlers/scheduling/default-hours.go +++ b/backend/handlers/scheduling/default-hours.go @@ -70,7 +70,8 @@ func UpdateDefaultHours(w http.ResponseWriter, r *http.Request) { for _, h := range hours { if err := validators.Validate.Struct(&h); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } } diff --git a/backend/handlers/scheduling/exceptional-hours.go b/backend/handlers/scheduling/exceptional-hours.go index 98655e1..a3805a3 100644 --- a/backend/handlers/scheduling/exceptional-hours.go +++ b/backend/handlers/scheduling/exceptional-hours.go @@ -2,6 +2,7 @@ package scheduling import ( "encoding/json" + "log" "log/slog" "net/http" "strconv" @@ -131,7 +132,8 @@ func CreateExceptionalGroup(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&g); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -302,7 +304,8 @@ func UpdateExceptionalApplications(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } diff --git a/backend/handlers/scheduling/time-blockers.go b/backend/handlers/scheduling/time-blockers.go index 57d08cd..92ce014 100644 --- a/backend/handlers/scheduling/time-blockers.go +++ b/backend/handlers/scheduling/time-blockers.go @@ -126,7 +126,8 @@ func CreateTimeBlocker(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } diff --git a/backend/handlers/services/services.go b/backend/handlers/services/services.go index 9df2d49..47fc124 100644 --- a/backend/handlers/services/services.go +++ b/backend/handlers/services/services.go @@ -10,6 +10,7 @@ import ( "encoding/json" "errors" "github.com/jackc/pgx/v5" + "log" "log/slog" "net/http" "time" @@ -104,7 +105,8 @@ func CreateServiceHandler(w http.ResponseWriter, r *http.Request) { return } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } diff --git a/backend/handlers/user/gdpr_export.go b/backend/handlers/user/gdpr_export.go index 8ac5d0f..f7413ed 100644 --- a/backend/handlers/user/gdpr_export.go +++ b/backend/handlers/user/gdpr_export.go @@ -73,7 +73,9 @@ func GetGDPRExportHandler(w http.ResponseWriter, r *http.Request) { } }() var result json.RawMessage - err := db.Conn.QueryRow(context.Background(), `SELECT export_all_user_data($1)`, userID).Scan(&result) + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + err := db.Conn.QueryRow(ctx, `SELECT export_all_user_data($1)`, userID).Scan(&result) if err != nil { log.Printf("GDPR export failed for user %s: %v", userID, err) gdprExportCacheMu.Lock() diff --git a/backend/handlers/user/guest.go b/backend/handlers/user/guest.go index 901c354..8c9b710 100644 --- a/backend/handlers/user/guest.go +++ b/backend/handlers/user/guest.go @@ -36,7 +36,8 @@ func CreateGuestUserHandler(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -71,7 +72,8 @@ func CreateGuestUserHandler(w http.ResponseWriter, r *http.Request) { // Validate email format if err := validators.ValidateEmail(req.Email); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -157,7 +159,8 @@ func CheckEmailHandler(w http.ResponseWriter, r *http.Request) { } if err := validators.ValidateEmail(email); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } diff --git a/backend/handlers/user/profile.go b/backend/handlers/user/profile.go index 265ad61..e750d99 100644 --- a/backend/handlers/user/profile.go +++ b/backend/handlers/user/profile.go @@ -243,7 +243,8 @@ func UpdateProfileHandler(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -673,7 +674,8 @@ func ChangePasswordHandler(w http.ResponseWriter, r *http.Request) { } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -835,7 +837,8 @@ func AddPatchTestHandler(w http.ResponseWriter, r *http.Request) { return } if err := validators.Validate.Struct(&req); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return } @@ -1031,7 +1034,8 @@ func UploadProfilePictureHandler(w http.ResponseWriter, r *http.Request) { } if _, err := images.ValidateImageBytes(fileBytes); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) + log.Printf("Failed to process request: %v", err) + http.Error(w, "Invalid request", http.StatusBadRequest) return }