| import os
|
| import requests
|
| import logging
|
| from typing import Optional
|
|
|
| logger = logging.getLogger(__name__ )
|
|
|
|
|
| RECAPTCHA_SECRET_KEY = os.environ.get("RECAPTCHA_SECRET_KEY")
|
|
|
| def verify_recaptcha(response_token: Optional[str]) -> bool:
|
|
|
| logger.info(f"Starting reCAPTCHA verification with token: {response_token[:10]}..." if response_token else "None")
|
|
|
|
|
| secret_key = os.environ.get("RECAPTCHA_SECRET_KEY")
|
| if not secret_key:
|
| logger.warning("RECAPTCHA_SECRET_KEY not set, bypassing verification")
|
| return True
|
| else:
|
|
|
| logger.info("RECAPTCHA_SECRET_KEY is set (not showing for security)")
|
|
|
|
|
| if not response_token:
|
| logger.warning("No reCAPTCHA response token provided")
|
| return False
|
|
|
| try:
|
|
|
| logger.info("Sending verification request to Google reCAPTCHA API")
|
| verification_response = requests.post(
|
| "https://www.google.com/recaptcha/api/siteverify",
|
| data={
|
| "secret": secret_key,
|
| "response": response_token
|
| }
|
| )
|
|
|
| result = verification_response.json()
|
|
|
| logger.info(f"reCAPTCHA verification result: {result}")
|
|
|
| if result.get("success"):
|
| logger.info("reCAPTCHA verification successful")
|
| return True
|
| else:
|
|
|
| logger.warning(f"reCAPTCHA verification failed: {result.get('error-codes', [])}")
|
| return False
|
| except Exception as e:
|
|
|
| logger.error(f"Error verifying reCAPTCHA: {str(e)}")
|
| return False
|
|
|
|
|