diff -r 3e436a494ce3 -r 7778a2bbdf9d web/captcha.py --- a/web/captcha.py Fri Mar 26 13:21:25 2010 +0100 +++ b/web/captcha.py Fri Mar 26 13:23:25 2010 +0100 @@ -17,7 +17,7 @@ from time import time from cubicweb import tags -from cubicweb.web import formwidgets as fw +from cubicweb.web import ProcessFormError, formwidgets as fw def pil_captcha(text, fontfile, fontsize): @@ -63,7 +63,22 @@ class CaptchaWidget(fw.TextInput): def render(self, form, field, renderer=None): # t=int(time()*100) to make sure img is not cached - src = form._cw.build_url('view', vid='captcha', t=int(time()*100)) + src = form._cw.build_url('view', vid='captcha', t=int(time()*100), + captchakey=field.input_name(form)) img = tags.img(src=src, alt=u'captcha') img = u'
%s
' % img return img + super(CaptchaWidget, self).render(form, field, renderer) + + def process_field_data(self, form, field): + captcha = form._cw.get_session_data(field.input_name(form), None, + pop=True) + val = super(CaptchaWidget, self).process_field_data(form, field) + if val is None: + return val # required will be checked by field + if captcha is None: + msg = form._cw._('unable to check captcha, please try again') + raise ProcessFormError(msg) + elif val.lower() != captcha.lower(): + msg = form._cw._('incorrect captcha value') + raise ProcessFormError(msg) + return val