#!/bin/bash # Test script for /api/contact rate limiting # Run this after fixing the middleware configuration issue echo "=========================================" echo "API Rate Limiting Test Script" echo "=========================================" echo "" # Configuration API_URL="http://localhost:3000/api/contact" TEST_IP="192.168.1.100" echo "Testing endpoint: $API_URL" echo "Test IP address: $TEST_IP" echo "" # Test function send_request() { local request_num=$1 echo "--- Request #$request_num ---" RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "$API_URL" \ -H "Content-Type: application/json" \ -H "X-Forwarded-For: $TEST_IP" \ -d '{"name":"Test User","email":"test@example.com","message":"This is test message #'$request_num'"}') HTTP_CODE=$(echo "$RESPONSE" | tail -n1) BODY=$(echo "$RESPONSE" | sed '$d') echo "Status Code: $HTTP_CODE" echo "Response Body: $BODY" # Get headers in a separate request HEADERS=$(curl -s -I -X POST "$API_URL" \ -H "Content-Type: application/json" \ -H "X-Forwarded-For: $TEST_IP" \ -d '{"name":"Test User","email":"test@example.com","message":"Test"}' 2>&1 \ | grep -i -E "X-RateLimit-Remaining|Retry-After" || echo "No rate limit headers") echo "Rate Limit Headers: $HEADERS" echo "" sleep 0.5 } # Test 1: First 5 requests should succeed echo "TEST 1: Sending 5 requests (should all succeed)" echo "================================================" for i in {1..5}; do send_request $i done # Test 2: 6th request should be rate limited echo "TEST 2: Sending 6th request (should be rate limited - 429)" echo "===========================================================" send_request 6 # Test 3: 7th request should also be rate limited echo "TEST 3: Sending 7th request (should still be rate limited - 429)" echo "================================================================" send_request 7 echo "" echo "=========================================" echo "Test Summary" echo "=========================================" echo "✓ Requests 1-5 should return HTTP 200" echo "✓ Each successful request should decrease X-RateLimit-Remaining" echo "✓ Requests 6-7 should return HTTP 429" echo "✓ HTTP 429 responses should include Retry-After header" echo "✓ HTTP 429 responses should have X-RateLimit-Remaining: 0" echo "" echo "To verify persistence:" echo "1. Check Supabase rate_limits table for entry with identifier='$TEST_IP'" echo "2. Restart dev server" echo "3. Run this script again - should immediately return 429" echo "4. Wait 1 hour or manually delete DB record" echo "5. Run again - should allow 5 new requests" echo "" echo "=========================================" echo "Testing invalid form data" echo "=========================================" echo "--- Test: Empty name ---" curl -s -w "\nHTTP %{http_code}\n" -X POST "$API_URL" \ -H "Content-Type: application/json" \ -H "X-Forwarded-For: 192.168.1.200" \ -d '{"name":"","email":"test@example.com","message":"Test"}' echo "" echo "--- Test: Invalid email ---" curl -s -w "\nHTTP %{http_code}\n" -X POST "$API_URL" \ -H "Content-Type: application/json" \ -H "X-Forwarded-For: 192.168.1.200" \ -d '{"name":"Test","email":"notanemail","message":"Test"}' echo "" echo "--- Test: Empty message ---" curl -s -w "\nHTTP %{http_code}\n" -X POST "$API_URL" \ -H "Content-Type: application/json" \ -H "X-Forwarded-For: 192.168.1.200" \ -d '{"name":"Test","email":"test@example.com","message":""}' echo "" echo "All tests completed!"