| 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 |
|
|
|
|