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, ip, re_token, hostname=None): validate_data = { 'secret': self.secret, 'response': re_token, # 'remoteip': ip } is_passed = False google_res = None try: google_res = requests.post( self.validate_url, data=validate_data, timeout=2 ).json() if google_res.get('success') and google_res.get('score') > self._socre_threshold: is_passed = True except Exception as e: logger.error(e) is_passed = True google_res = str(e) logger.info('Google reCAPTCHA result: {}, passed: {}'.format(google_res, is_passed)) return is_passed @property def _socre_threshold(self): return getattr(settings, 'GOOGLE_RE_THRESHOLD', 0.5)