import logging import requests from django.conf import settings from .base import BaseCaptcha logger = logging.getLogger(__name__) class Captcha(BaseCaptcha): """ Ref: https://developers.google.com/recaptcha/docs/verify """ def __init__(self, *args, **kwargs): self.secret = getattr(settings, 'CAPTCHA_RE_SECRET_KEY', None) self.validate_url = 'https://www.recaptcha.net/recaptcha/api/siteverify' return super(Captcha, self).__init__(*args, **kwargs) def generate(self, *args, **kwargs): # Generated by google. pass def verify(self, user, ip, re_token): if not re_token and user: if not self._active_for_user(user): return True else: return False validate_data = { 'secret': self.secret, 'response': re_token, # 'remoteip': ip } try: res = requests.post( self.validate_url, data=validate_data, timeout=1 ) if res.json().get('success'): return True else: return False except Exception as e: # For better user experience, assume captcha valid. logger.warning(e) return True