@@ -138,6 +138,22 @@ def send_email(message):
138
138
logging .error ('Error sending email via SendGrid: %s' , str (e ))
139
139
raise
140
140
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
+
141
157
# Validate required environment variables
142
158
required_env_vars = ['RECAPTCHASITEKEY' , 'RECAPTCHASECRETKEY' , 'SENDGRIDAPIKEY' , 'SENDGRIDFROMEMAIL' ]
143
159
validate_env_vars (required_env_vars )
@@ -150,8 +166,10 @@ def send_email(message):
150
166
app = Flask (__name__ )
151
167
app .config .from_object (Config )
152
168
169
+
170
+
153
171
# 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" ])
155
173
156
174
# Configure logging
157
175
log_file = os .environ .get ('LOG_FILE' , '' )
0 commit comments