Skip to content

Commit 273182a

Browse files
fix rate limit based on forwarded ip
1 parent 440582e commit 273182a

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

server.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,22 @@ def send_email(message):
138138
logging.error('Error sending email via SendGrid: %s', str(e))
139139
raise
140140

141+
142+
def get_forwarded_address():
143+
# Check X-Forwarded-For header first
144+
forwarded_for = request.headers.get('X-Forwarded-For')
145+
if forwarded_for:
146+
# Return the leftmost IP which is the original client IP
147+
return forwarded_for.split(',')[0].strip()
148+
149+
# Fall back to X-Real-IP if available
150+
real_ip = request.headers.get('X-Real-IP')
151+
if real_ip:
152+
return real_ip
153+
154+
# Otherwise use the default function
155+
return get_remote_address()
156+
141157
# Validate required environment variables
142158
required_env_vars = ['RECAPTCHASITEKEY', 'RECAPTCHASECRETKEY', 'SENDGRIDAPIKEY', 'SENDGRIDFROMEMAIL']
143159
validate_env_vars(required_env_vars)
@@ -150,8 +166,10 @@ def send_email(message):
150166
app = Flask(__name__)
151167
app.config.from_object(Config)
152168

169+
170+
153171
# Initialize rate limiting
154-
limiter = Limiter(get_remote_address, app=app, default_limits=["200 per day", "50 per hour"])
172+
limiter = Limiter(get_forwarded_address, app=app, default_limits=["200 per day", "50 per hour"])
155173

156174
# Configure logging
157175
log_file = os.environ.get('LOG_FILE', '')

0 commit comments

Comments
 (0)