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