File size: 1,956 Bytes
80e0598
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import os
import requests
import logging
from typing import Optional

logger = logging.getLogger(__name__ )

# Get the secret key from environment variable
RECAPTCHA_SECRET_KEY = os.environ.get("RECAPTCHA_SECRET_KEY")

def verify_recaptcha(response_token: Optional[str]) -> bool:
    # LOGGING: Log the token start
    logger.info(f"Starting reCAPTCHA verification with token: {response_token[:10]}..." if response_token else "None")
    
    # Check if secret key is set
    secret_key = os.environ.get("RECAPTCHA_SECRET_KEY")
    if not secret_key:
        logger.warning("RECAPTCHA_SECRET_KEY not set, bypassing verification")
        return True
    else:
        # LOGGING: Log that secret key is set
        logger.info("RECAPTCHA_SECRET_KEY is set (not showing for security)")
        
    # If no token provided, verification fails
    if not response_token:
        logger.warning("No reCAPTCHA response token provided")
        return False
    
    try:
        # LOGGING: Log before making request
        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()
        # LOGGING: Log the complete result from Google
        logger.info(f"reCAPTCHA verification result: {result}")
        
        if result.get("success"):
            logger.info("reCAPTCHA verification successful")
            return True
        else:
            # LOGGING: Log the specific error codes
            logger.warning(f"reCAPTCHA verification failed: {result.get('error-codes', [])}")
            return False
    except Exception as e:
        # LOGGING: Log any exceptions
        logger.error(f"Error verifying reCAPTCHA: {str(e)}")
        return False