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