1 | from Products.CMFCore.utils import getToolByName |
---|
2 | |
---|
3 | from quintagroup.plonecaptchas import ProductMessageFactory as _ |
---|
4 | from quintagroup.plonecaptchas.utils import decrypt, parseKey, \ |
---|
5 | encrypt1, getWord |
---|
6 | from DateTime import DateTime |
---|
7 | |
---|
8 | if state.getStatus()=='failure': |
---|
9 | return state |
---|
10 | request = context.REQUEST |
---|
11 | |
---|
12 | test_key = request.get('key', '') |
---|
13 | hashkey = request.get('hashkey', '') |
---|
14 | decrypted_key = decrypt(context.captcha_key, hashkey) |
---|
15 | parsed_key = parseKey(decrypted_key) |
---|
16 | |
---|
17 | index = parsed_key['key'] |
---|
18 | date = parsed_key['date'] |
---|
19 | |
---|
20 | img = getattr(context, '%s.jpg' % index) |
---|
21 | solution = img.title |
---|
22 | enc = encrypt1(test_key) |
---|
23 | captcha_tool = getToolByName(context, 'portal_captchas') |
---|
24 | if (enc != solution) or (captcha_tool.has_key(decrypted_key)) \ |
---|
25 | or (DateTime().timeTime() - float(date)>3600): |
---|
26 | message = _(u"Please re-enter validation code.") |
---|
27 | context.plone_utils.addPortalMessage(message, 'error') |
---|
28 | state.setError('key', message, 'key_required') |
---|
29 | return state.set(status="failure") |
---|
30 | else: |
---|
31 | captcha_tool.addExpiredKey(decrypted_key) |
---|
32 | return state.set(status="success") |
---|