email2 = forms.EmailField(label="Repeat email")
captcha = ReCaptchaField()
+ def __init__(self, remoteip, *args, **kwargs):
+ super(SignupForm, self).__init__(*args, **kwargs)
+ self.fields['captcha'].set_ip(remoteip)
+
def clean_email2(self):
# If the primary email checker had an exception, the data will be gone
# from the cleaned_data structure
class ReCaptchaField(forms.CharField):
def __init__(self, *args, **kwargs):
+ self.remoteip = None
self.widget = ReCaptchaWidget()
self.required = not settings.NOCAPTCHA
super(ReCaptchaField, self).__init__(*args, **kwargs)
+ def set_ip(self, ip):
+ self.remoteip = ip
+
def clean(self, value):
if settings.NOCAPTCHA:
return True
# Validate the recaptcha
c = httplib.HTTPSConnection('www.google.com', strict=True, timeout=5)
- param = urllib.urlencode({
+ param = {
'secret': settings.RECAPTCHA_SECRET_KEY,
'response': value,
- # XXX: include remote ip!
- })
- c.request('POST', '/recaptcha/api/siteverify', param, {
+ }
+ if self.remoteip:
+ param['remoteip'] = self.remoteip
+ c.request('POST', '/recaptcha/api/siteverify', urllib.urlencode(param), {
'Content-type': 'application/x-www-form-urlencoded',
})
c.sock.settimeout(10)
from pgweb.util.decorators import ssl_required
from pgweb.util.contexts import NavContext
-from pgweb.util.misc import send_template_mail, generate_random_token
+from pgweb.util.misc import send_template_mail, generate_random_token, get_client_ip
from pgweb.util.helpers import HttpServerError
from pgweb.news.models import NewsArticle
if request.method == 'POST':
# Attempt to create user then, eh?
- form = SignupForm(data=request.POST)
+ form = SignupForm(get_client_ip(request), data=request.POST)
if form.is_valid():
# Attempt to create the user here
# XXX: Do we need to validate something else?
return HttpResponseRedirect('/account/signup/complete/')
else:
- form = SignupForm()
+ form = SignupForm(get_client_ip(request))
return render_to_response('base/form.html', {
'form': form,