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)
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)
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))
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)
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.')
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.')
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())
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))
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))
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) == "")
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)
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 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))
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")
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)
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")
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)]