source: products/quintagroup.z3cform.captcha/trunk/quintagroup/z3cform/captcha/validator.py @ 3257

Last change on this file since 3257 was 2215, checked in by mylan, 14 years ago

Merged all changes from branches/captchas-refactoring into trunk.

Merged revisions 3005,3095,3110-3117 via svnmerge from
http://svn.quintagroup.com/products/quintagroup.z3cform.captcha/branches/captchas-refactoring

........

r3005 | liebster | 2010-03-22 16:19:33 +0200 (Mon, 22 Mar 2010) | 1 line


Add depending quintagroup.captcha.core

........

r3095 | mylan | 2010-04-01 17:31:59 +0300 (Thu, 01 Apr 2010) | 1 line


#173: Fix wrong import, update package description, update dependencies list in quintagroup.z3cform.captcha package

........

r3110 | mylan | 2010-04-07 16:56:33 +0300 (Wed, 07 Apr 2010) | 1 line


#185: Add default captcha widget factory adapter registration

........

r3111 | mylan | 2010-04-07 16:59:19 +0300 (Wed, 07 Apr 2010) | 1 line


#185: force package autoregistration with z3c.autoinclude

........

r3112 | mylan | 2010-04-07 17:00:00 +0300 (Wed, 07 Apr 2010) | 1 line


#185: Add default imports into package init module

........

r3113 | mylan | 2010-04-07 17:03:13 +0300 (Wed, 07 Apr 2010) | 1 line


#185: Add tests infrastructure

........

r3114 | mylan | 2010-04-07 17:04:51 +0300 (Wed, 07 Apr 2010) | 1 line


#185: Add registration tests

........

r3115 | mylan | 2010-04-07 18:07:15 +0300 (Wed, 07 Apr 2010) | 1 line


#185: Add tests for captcha widget

........

r3116 | mylan | 2010-04-07 18:38:19 +0300 (Wed, 07 Apr 2010) | 1 line


#185: Add tests for captcha validator

........

r3117 | mylan | 2010-04-08 16:23:01 +0300 (Thu, 08 Apr 2010) | 1 line


#185: Fixed tests for plone>=3.3

........

File size: 1.7 KB
Line 
1from DateTime import DateTime
2
3from zope.interface import Interface, Invalid
4from zope.component import adapts
5from zope.i18n import MessageFactory
6
7from Products.CMFCore.utils import getToolByName
8
9from quintagroup.captcha.core.utils import decrypt, parseKey, encrypt1, getWord
10
11from z3c.form.validator import SimpleFieldValidator
12
13from interfaces import ICaptcha
14
15_ = MessageFactory('quintagroup.z3cform.captcha')
16
17class CaptchaValidator(SimpleFieldValidator):
18    """Captcha validator"""
19
20    adapts(Interface, Interface, Interface, ICaptcha, Interface)
21
22    def validate(self, value):
23        # Verify the user input against the captcha
24        errors = ()
25        context = self.context
26        request = self.request
27        value = value or ''
28        captcha_type = context.getCaptchaType()
29        if captcha_type in ['static', 'dynamic']:
30            hashkey = request.get('%shashkey' % self.widget.form.prefix, '')
31            decrypted_key = decrypt(context.captcha_key, hashkey)
32            parsed_key = parseKey(decrypted_key)
33           
34            index = parsed_key['key']
35            date = parsed_key['date']
36           
37            if captcha_type == 'static':
38                img = getattr(context, '%s.jpg' % index)
39                solution = img.title
40                enc = encrypt1(value)
41            else:
42                enc = value
43                solution = getWord(int(index))
44           
45            captcha_tool = getToolByName(context, 'portal_captchas')
46            if (enc != solution) or (captcha_tool.has_key(decrypted_key)) or (DateTime().timeTime() - float(date) > 3600):
47                raise ValueError(_(u'Please re-enter validation code.'))
48            else:
49                captcha_tool.addExpiredKey(decrypted_key)
Note: See TracBrowser for help on using the repository browser.