@@ -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
142158required_env_vars = ['RECAPTCHASITEKEY' , 'RECAPTCHASECRETKEY' , 'SENDGRIDAPIKEY' , 'SENDGRIDFROMEMAIL' ]
143159validate_env_vars (required_env_vars )
@@ -150,8 +166,10 @@ def send_email(message):
150166app = Flask (__name__ )
151167app .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
157175log_file = os .environ .get ('LOG_FILE' , '' )
0 commit comments