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