Exemple #1
0
    def validate(self, value):
        # Verify the user input against the captcha

        # Captcha validation is one-time process to prevent hacking
        # This is the reason for in-line validation to be disabled.
        if detectInlineValidation(inline_validation):
            return

        context = self.context
        request = self.request
        value = value or ''
        captcha_type = context.getCaptchaType()
        if captcha_type in ['static', 'dynamic']:
            hashkey = request.get('%shashkey' % self.widget.form.prefix, '')
            decrypted_key = decrypt(context.captcha_key, hashkey)
            parsed_key = parseKey(decrypted_key)

            index = parsed_key['key']
            date = parsed_key['date']

            if captcha_type == 'static':
                img = getattr(context, '%s.jpg' % index)
                solution = img.title
                enc = encrypt1(value)
            else:
                enc = value
                solution = getWord(int(index))

            captcha_tool = getToolByName(context, 'portal_captchas')
            captcha_tool_has_key = captcha_tool.has_key
            if (enc != solution) or (captcha_tool_has_key(decrypted_key)) or \
               (DateTime().timeTime() - float(date) > 3600):
                raise ValueError(_(u'Please re-enter validation code.'))
            else:
                captcha_tool.addExpiredKey(decrypted_key)
Exemple #2
0
 def validate(self, value):
     # Verify the user input against the captcha
     errors = ()
     context = self.context
     request = self.request
     value = value or ''
     captcha_type = context.getCaptchaType()
     if captcha_type in ['static', 'dynamic']:
         hashkey = request.get('%shashkey' % self.widget.form.prefix, '')
         decrypted_key = decrypt(context.captcha_key, hashkey)
         parsed_key = parseKey(decrypted_key)
         
         index = parsed_key['key']
         date = parsed_key['date']
         
         if captcha_type == 'static':
             img = getattr(context, '%s.jpg' % index)
             solution = img.title
             enc = encrypt1(value)
         else:
             enc = value
             solution = getWord(int(index))
         
         captcha_tool = getToolByName(context, 'portal_captchas')
         if (enc != solution) or (captcha_tool.has_key(decrypted_key)) or (DateTime().timeTime() - float(date) > 3600):
             raise ValueError(_(u'Please re-enter validation code.'))
         else:
             captcha_tool.addExpiredKey(decrypted_key)
Exemple #3
0
    def testSubmitRightCaptcha(self):
        key = getWord(int(parseKey(decrypt(self.captcha_key,
                                           self.hashkey))['key']) - 1)
        self.form_data['key'] = key

        response = self.publishForm().getBody()
        self.assertFalse(NOT_VALID.search(response))
Exemple #4
0
 def testSubmitRightCaptcha(self):
     decrypted = decrypt(self.captcha_key, self.hashkey)
     key = getWord(int(parseKey(decrypted)['key']) - 1)
     try:
         self.validator.validate(key)
     except ConversionError, e:
         self.fail("Rised unexpected %s error on right captcha submit" % e)
Exemple #5
0
 def testSubmitRightCaptchaTwice(self):
     decrypted = decrypt(self.captcha_key, self.hashkey)
     key = getWord(int(parseKey(decrypted)['key']) - 1)
     self.validator.validate(key)
     try:
         self.validator.validate(key)
     except ValueError, e:
         self.assertEqual(str(e), u'Please re-enter validation code.')
Exemple #6
0
 def testSubmitRightCaptchaTwice(self):
     decrypted = decrypt(self.captcha_key, self.hashkey)
     key = getWord(int(parseKey(decrypted)['key']) - 1)
     self.widget._toFieldValue(key)
     try:
         self.widget._toFieldValue(key)
     except ConversionError, e:
         self.assertEqual(e.doc(), u'Please re-enter validation code.')
Exemple #7
0
 def testSubmitRightCaptcha(self):
     decrypted = decrypt(self.captcha_key, self.hashkey)
     key = getWord(int(parseKey(decrypted)['key']) - 1)
     try:
         res = self.widget._toFieldValue(key)
     except ConversionError, e:
         self.fail("Rised unexpected %s error on right captcha submit" %
                   e.doc())
Exemple #8
0
 def testSubmitRightCaptcha(self):
     decrypted = decrypt(self.captcha_key, self.hashkey)
     key = getWord(int(parseKey(decrypted)['key']) - 1)
     try:
         res = self.widget._toFieldValue(key)
     except ConversionError, e:
         self.fail("Rised unexpected %s error on right captcha submit" %
                   e.doc())
Exemple #9
0
 def testSubmitRightCaptchaTwice(self):
     decrypted = decrypt(self.captcha_key, self.hashkey)
     key = getWord(int(parseKey(decrypted)['key']) - 1)
     self.widget._toFieldValue(key)
     try:
         self.widget._toFieldValue(key)
     except ConversionError, e:
         self.assertEqual(e.doc(), u'Please re-enter validation code.')
Exemple #10
0
    def testSubmitRightCaptchaTwice(self):
        key = getWord(int(parseKey(decrypt(self.captcha_key,
                                           self.hashkey))['key']) - 1)
        self.form_data[self.formkey_key] = key

        response1 = self.publishForm().getBody()
        self.elog("right1", response1)
        response2 = self.publishForm().getBody()
        self.elog("right2", response2)
        self.assertTrue(NOT_VALID.search(response2))
Exemple #11
0
 def afterSetUp(self):
     # prepare context
     self.loginAsPortalOwner()
     testPatch()
     addTestLayer(self)
     # prepare captcha data
     captcha_key = self.portal.captcha_key
     self.hashkey = self.portal.getCaptcha()
     decrypted = decrypt(captcha_key, self.hashkey)
     self.captcha_word = getWord(int(parseKey(decrypted)['key']) - 1)
Exemple #12
0
 def afterSetUp(self):
     # prepare context
     self.loginAsPortalOwner()
     testPatch()
     addTestLayer(self)
     # prepare captcha data
     captcha_key = self.portal.captcha_key
     self.hashkey = self.portal.getCaptcha()
     decrypted = decrypt(captcha_key, self.hashkey)
     self.captcha_word = getWord(int(parseKey(decrypted)['key']) - 1)
    def testSubmitRightCaptchaTwice(self):
        hashkey = self.portal.getCaptcha()
        decrypted_key = decrypt(self.captcha_key, hashkey)
        key = getWord(int(parseKey(decrypted_key)["key"]) - 1)
        parameters = "form.submitted=1&key=%s" % key
        path = "%s/test_form?%s" % (self.absolute_url, parameters)
        extra = {"hashkey": hashkey, "form.button.Save": "Save"}
        self.publish(path, self.basic_auth, extra=extra, request_method="GET")
        response = self.publish(path, self.basic_auth, extra=extra, request_method="GET").getBody()

        self.assert_(NOT_VALID.search(response))
Exemple #14
0
 def test_GetCaptcha_Key(self):
     decrypted_key = decrypt(self.captcha_key, self.hashkey)
     parsed_key = parseKey(decrypted_key)
     # *key* must present after parsing decrypted key
     self.assertTrue('key' in parsed_key.keys())
     # index start from 0 and lower or equals to captchas count
     index = int(parsed_key['key'])
     words = utils.basic_english.words.split()
     self.assertTrue(index >= 0 and index <= len(words))
     # encrypted key must be equals to word from the dictionary,
     # under index position and must be not empty string
     self.assertFalse(getWord(index) == "")
Exemple #15
0
 def test_GetCaptcha_Key(self):
     decrypted_key = decrypt(self.captcha_key, self.hashkey)
     parsed_key = parseKey(decrypted_key)
     # *key* must present after parsing decrypted key
     self.assertTrue('key' in parsed_key.keys())
     # index start from 1 and lower or equals to CAPTCHAS_COUNT
     index = int(parsed_key['key'])
     self.assertTrue(index >= 1 and index <= CAPTCHAS_COUNT)
     # encrypted key must be equals to title of the image
     key = getWord(index - 1)
     img = getattr(self.portal, '%s.jpg' % index)
     self.assertTrue(encrypt1(key) == img.title)
Exemple #16
0
    def testGoodData(self):
        hashkey = self.portal.getCaptcha()
        decrypted_key = decrypt(self.captcha_key, hashkey)
        key = getWord(int(parseKey(decrypted_key)['key']) - 1)
        self.req.form['hashkey'] = hashkey
        self.req.form['key'] = key + '1'

        cstate = self.pfc.validate(self.dummycs, self.req,
                                   ['captcha_validator', ])
        error_msg = 'Please re-enter validation code.'
        self.assertTrue(cstate.getErrors()['key'] == error_msg,
                        "Static captcha validator validate wrong key")
Exemple #17
0
 def test_GetCaptcha_Key(self):
     decrypted_key = decrypt(self.captcha_key, self.hashkey)
     parsed_key = parseKey(decrypted_key)
     # *key* must present after parsing decrypted key
     self.assertTrue('key' in parsed_key.keys())
     # index start from 1 and lower or equals to CAPTCHAS_COUNT
     index = int(parsed_key['key'])
     self.assertTrue(index >= 1 and index <= CAPTCHAS_COUNT)
     # encrypted key must be equals to title of the image
     key = getWord(index - 1)
     img = getattr(self.portal, '%s.jpg' % index)
     self.assertTrue(encrypt1(key) == img.title)
Exemple #18
0
 def test_GetCaptcha_Key(self):
     decrypted_key = decrypt(self.captcha_key, self.hashkey)
     parsed_key = parseKey(decrypted_key)
     # *key* must present after parsing decrypted key
     self.assertTrue('key' in parsed_key.keys())
     # index start from 0 and lower or equals to captchas count
     index = int(parsed_key['key'])
     words = utils.basic_english.words.split()
     self.assertTrue(index >= 0 and index <= len(words))
     # encrypted key must be equals to word from the dictionary,
     # under index position and must be not empty string
     self.assertFalse(getWord(index) == "")
Exemple #19
0
    def testGoodData(self):
        hashkey = self.portal.getCaptcha()
        decrypted_key = decrypt(self.captcha_key, hashkey)
        key = getWord(int(parseKey(decrypted_key)['key']) - 1)
        self.req.form['hashkey'] = hashkey
        self.req.form['key'] = key + '1'

        cstate = self.pfc.validate(self.dummycs, self.req, [
            'captcha_validator',
        ])
        error_msg = 'Please re-enter validation code.'
        self.assertTrue(cstate.getErrors()['key'] == error_msg,
                        "Static captcha validator validate wrong key")
    def testSubmitRightCaptchaTwice(self):
        hashkey = self.portal.getCaptcha()
        decrypted_key = decrypt(self.captcha_key, hashkey)
        key = getWord(int(parseKey(decrypted_key)['key']) - 1)
        parameters = 'form.submitted=1&key=%s' % key
        path = '%s/test_form?%s' % (self.absolute_url, parameters)
        extra = {'hashkey': hashkey, 'form.button.Save': 'Save'}
        self.publish(path, self.basic_auth, extra=extra, request_method='GET')
        response = self.publish(path,
                                self.basic_auth,
                                extra=extra,
                                request_method='GET').getBody()

        self.assert_(NOT_VALID.search(response))
Exemple #21
0
    def testBadDate(self):
        # First path DateTime to get old dated hash
        origDTTT = DateTime.timeTime
        now = DateTime().timeTime()
        DateTime.timeTime = lambda s: now - float(3601)

        hashkey = self.portal.getCaptcha()

        decrypted_key = decrypt(self.captcha_key, hashkey)
        key = getWord(int(parseKey(decrypted_key)['key']) - 1)
        self.req.form['hashkey'] = hashkey
        self.req.form['key'] = key
        # Return original Date
        DateTime.timeTime = origDTTT
        cstate = self.pfc.validate(self.dummycs, self.req,
                                   ['captcha_validator', ])
        error_msg = 'Please re-enter validation code.'
        self.assertTrue(cstate.getErrors()['key'] == error_msg,
                        "Static captcha validator validate wrong key")
Exemple #22
0
    def _toFieldValue(self, input):
        # Captcha validation is one-time process to prevent hacking
        # This is the reason for in-line validation to be disabled.
        if inline_validation and detectInlineValidation(inline_validation):
            return super(CaptchaWidget, self)._toFieldValue(input)

        # Verify the user input against the captcha.
        # Get captcha type (static or dynamic)
        site = self.get_site()
        captcha_type = site.getCaptchaType()

        # validate captcha input
        if input and captcha_type in ['static', 'dynamic']:
            # make up form prefix
            if self._prefix:
                prefix = '%s.' % self._prefix
            else:
                prefix = ''

            hashkey = self.request.get('%shashkey' % prefix, '')
            decrypted_key = decrypt(site.captcha_key, hashkey)
            parsed_key = parseKey(decrypted_key)

            index = parsed_key['key']
            date = parsed_key['date']

            if captcha_type == 'static':
                img = getattr(site, '%s.jpg' % index)
                solution = img.title
                enc = encrypt1(input)
            else:
                enc = input
                solution = getWord(int(index))

            captcha_tool = getToolByName(site, 'portal_captchas')
            if (enc != solution) or (decrypted_key in captcha_tool.keys()) or \
               (DateTime().timeTime() - float(date) > 3600):
                raise ConversionError(_(u'Please re-enter validation code.'))
            else:
                captcha_tool.addExpiredKey(decrypted_key)

        return super(CaptchaWidget, self)._toFieldValue(input)
Exemple #23
0
    def testBadDate(self):
        # First path DateTime to get old dated hash
        origDTTT = DateTime.timeTime
        now = DateTime().timeTime()
        DateTime.timeTime = lambda s: now - float(3601)

        hashkey = self.portal.getCaptcha()

        decrypted_key = decrypt(self.captcha_key, hashkey)
        key = getWord(int(parseKey(decrypted_key)['key']) - 1)
        self.req.form['hashkey'] = hashkey
        self.req.form['key'] = key
        # Return original Date
        DateTime.timeTime = origDTTT
        cstate = self.pfc.validate(self.dummycs, self.req, [
            'captcha_validator',
        ])
        error_msg = 'Please re-enter validation code.'
        self.assertTrue(cstate.getErrors()['key'] == error_msg,
                        "Static captcha validator validate wrong key")
Exemple #24
0
 def _toFieldValue(self, input):
     # Verify the user input against the captcha
     context = self.context.context
     request = context.REQUEST
     
     # get captcha type (static or dynamic)
     captcha_type = context.getCaptchaType()
     
     # validate captcha input
     if input and captcha_type in ['static', 'dynamic']:
         # make up form prefix
         if self._prefix:
             prefix = '%s.' % self._prefix
         else:
             prefix = ''
         
         hashkey = request.get('%shashkey' % prefix, '')
         decrypted_key = decrypt(context.captcha_key, hashkey)
         parsed_key = parseKey(decrypted_key)
         
         index = parsed_key['key']
         date = parsed_key['date']
         
         if captcha_type == 'static':
             img = getattr(context, '%s.jpg' % index)
             solution = img.title
             enc = encrypt1(input)
         else:
             enc = input
             solution = getWord(int(index))
         
         captcha_tool = getToolByName(context, 'portal_captchas')
         if (enc != solution) or (captcha_tool.has_key(decrypted_key)) or (DateTime().timeTime() - float(date) > 3600):
             raise ConversionError(_(u'Please re-enter validation code.'))
         else:
             captcha_tool.addExpiredKey(decrypted_key)
     
     return super(CaptchaWidget, self)._toFieldValue(input)
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
from quintagroup.captcha.core.utils import gen_captcha, decrypt, getWord, parseKey
from Products.CMFCore.utils import getToolByName
import random
propTool = getToolByName(context, 'portal_properties')
captchaProps = propTool['qPloneCaptchas']

hk = context.REQUEST.traverse_subpath[0]
dk = decrypt(context.captcha_key, hk)
key = parseKey(dk)['key']

text = getWord(int(key))
size = captchaProps.getProperty('image_size')
bkground = captchaProps.getProperty('background')
font_color = captchaProps.getProperty('font_color')
kwargs = {
    'text': text,
    'size': size,
    'bkground': bkground,
    'font_color': font_color
}
if captchaProps.getProperty('random_params', 'False'):
    period = random.uniform(0.05, 0.12)
    amplitude = random.uniform(3.0, 6.5)
else:
    period = captchaProps.getProperty('period')
    amplitude = captchaProps.getProperty('amplitude')
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
from quintagroup.captcha.core.utils import gen_captcha, decrypt, getWord, parseKey
from Products.CMFCore.utils import getToolByName
import random
propTool = getToolByName(context, 'portal_properties')
captchaProps = propTool['qPloneCaptchas']

hk = context.REQUEST.traverse_subpath[0]
dk = decrypt(context.captcha_key, hk)
key = parseKey(dk)['key']

text = getWord(int(key))
size = captchaProps.getProperty('image_size')
bkground = captchaProps.getProperty('background')
font_color = captchaProps.getProperty('font_color')
kwargs = {'text': text,
          'size': size,
          'bkground': bkground,
          'font_color': font_color}
if captchaProps.getProperty('random_params', 'False'):
    period = random.uniform(0.05, 0.12)
    amplitude = random.uniform(3.0, 6.5)
else:
    period = captchaProps.getProperty('period')
    amplitude = captchaProps.getProperty('amplitude')

kwargs['distortion'] = [period, amplitude, (0.0, 0.0)]