Changeset 3160 in products for quintagroup.plonecaptchas/branches
- Timestamp:
- Apr 20, 2011 10:44:02 AM (13 years ago)
- Location:
- quintagroup.plonecaptchas/branches/plone4
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
quintagroup.plonecaptchas/branches/plone4/quintagroup/plonecaptchas/Extensions/Install.py
r2041 r3160 2 2 from Products.CMFCore.utils import getToolByName 3 3 REQUIRED = 'quintagroup.captcha.core' 4 4 5 5 6 def install(self): … … 13 14 # install plonecaptchas 14 15 gs = getToolByName(self, 'portal_setup') 15 gs.runAllImportStepsFromProfile('profile-quintagroup.plonecaptchas:default') 16 profile = 'profile-quintagroup.plonecaptchas:default' 17 gs.runAllImportStepsFromProfile(profile) 16 18 transaction.savepoint() 19 17 20 18 21 def uninstall(self): 19 22 portal_setup = getToolByName(self, 'portal_setup') 20 portal_setup.runAllImportStepsFromProfile('profile-quintagroup.plonecaptchas:uninstall', purge_old=False) 23 profile = 'profile-quintagroup.plonecaptchas:uninstall' 24 portal_setup.runAllImportStepsFromProfile(profile, purge_old=False) 21 25 transaction.savepoint() -
quintagroup.plonecaptchas/branches/plone4/quintagroup/plonecaptchas/__init__.py
r3157 r3160 3 3 from AccessControl import ModuleSecurityInfo 4 4 5 ProductMessageFactory = MessageFactory('quintagroup.plonecaptchas') 6 ModuleSecurityInfo('quintagroup.plonecaptchas').declarePublic("ProductMessageFactory") 5 product = 'quintagroup.plonecaptchas' 6 ProductMessageFactory = MessageFactory(product) 7 ModuleSecurityInfo(product).declarePublic("ProductMessageFactory") 7 8 8 9 #from quintagroup.plonecaptchas import config 9 10 #allow_module('quintagroup.plonecaptchas.config') 10 11 12 11 13 def initialize(context): 12 14 pass -
quintagroup.plonecaptchas/branches/plone4/quintagroup/plonecaptchas/browser/register.py
r2505 r3160 8 8 from quintagroup.plonecaptchas import ProductMessageFactory as _ 9 9 10 10 11 class CaptchaSchema(Interface): 11 12 captcha = Captcha( 12 13 title=_(u'Type the code'), 13 14 description=_(u'Type the code from the picture shown below.')) 15 14 16 15 17 class CaptchaRegistrationForm(RegistrationForm): … … 27 29 ffields["captcha"].custom_widget = CaptchaWidget 28 30 return ffields 29 -
quintagroup.plonecaptchas/branches/plone4/quintagroup/plonecaptchas/interfaces.py
r3157 r3160 1 1 from plone.theme.interfaces import IDefaultPloneLayer 2 2 3 3 4 class IQGPloneCaptchas(IDefaultPloneLayer): -
quintagroup.plonecaptchas/branches/plone4/quintagroup/plonecaptchas/setuphandlers.py
r3157 r3160 3 3 4 4 logger = logging.getLogger('quintagroup.plonecaptchas') 5 5 6 6 7 def removeBrowserLayer(site): … … 10 11 from plone.browserlayer.interfaces import ILocalBrowserLayerType 11 12 12 name ="quintagroup.plonecaptchas"13 name = "quintagroup.plonecaptchas" 13 14 site = getSiteManager(site) 14 15 registeredLayers = [r.name for r in site.registeredUtilities() … … 17 18 unregister_layer(name, site_manager=site) 18 19 logger.log(logging.INFO, "Unregistered \"%s\" browser layer." % name) 20 19 21 20 22 def uninstall(context): -
quintagroup.plonecaptchas/branches/plone4/quintagroup/plonecaptchas/tests/base.py
r3154 r3160 15 15 CAPTCHA_KEY = 'captcha_key' 16 16 CAPTCHAS_COUNT = 165 17 LAYERS = ['captchas_discussion', 'captchas_sendto_form', "captchas_contact_info"] 17 LAYERS = ['captchas_discussion', 'captchas_sendto_form', 18 'captchas_contact_info'] 18 19 19 20 TOOL_ICON = 'skins/plone_captchas/tool.gif' … … 26 27 27 28 ptc.setupPloneSite() 29 28 30 29 31 class NotInstalled(PloneSite): … … 71 73 layer = Installed 72 74 75 73 76 class TestCaseNotInstalled(ptc.PloneTestCase): 74 77 layer = NotInstalled … … 78 81 layer = Installed 79 82 83 80 84 class FunctionalTestCaseNotInstalled(ptc.FunctionalTestCase): 81 85 layer = NotInstalled -
quintagroup.plonecaptchas/branches/plone4/quintagroup/plonecaptchas/tests/testForms.py
r3154 r3160 17 17 from plone.app.controlpanel.security import ISecuritySchema 18 18 19 # BBB for plone v<3.1, where plone.protect not used yet 19 # BBB for plone v<3.1, where plone.protect not used yet 20 20 PROTECT_SUPPORT = True 21 21 try: … … 30 30 testPatch() 31 31 32 32 33 class TestFormMixin(FunctionalTestCase): 33 34 … … 41 42 addTestLayer(self) 42 43 # Prepare form data 43 self.basic_auth = ':'.join((portal_owner, default_password))44 self.basic_auth = ':'.join((portal_owner, default_password)) 44 45 self.form_url = '' 45 46 self.form_method = "POST" … … 55 56 raise NotImplementedError( 56 57 "getFormData not implemented") 57 58 58 59 def publishForm(self): 59 60 stdin_data = None … … 82 83 open("/tmp/test.%s.html" % name, "w").write(response) 83 84 logs = self.portal.error_log.getLogEntries() 84 if len(logs) >0:85 if len(logs) > 0: 85 86 i = 0 86 87 while logs: 87 88 l = logs.pop() 88 i +=189 open("/tmp/test.%s.error.%d.html" % (l ,i),"w").write(l["tb_html"])90 import pdb;pdb.set_trace()89 i += 1 90 open("/tmp/test.%s.error.%d.html" % (l["id"], i), 91 "w").write(l["tb_html"]) 91 92 92 93 def testImage(self): … … 94 95 self.form_method = "GET" 95 96 response = self.publishForm().getBody() 96 patt = re.compile(IMAGE_PATT 97 patt = re.compile(IMAGE_PATT % self.portal.absolute_url()) 97 98 match_obj = patt.search(response) 98 99 self.elog("image", response) 99 100 img_url = match_obj.group(1) 100 101 101 content_type = self.publish('/plone' + img_url).getHeader('content-type') 102 content_type = self.publish( 103 '/plone' + img_url).getHeader('content-type') 102 104 self.assertTrue(content_type.startswith('image'), 103 105 "Wrong captcha image content type") 104 106 105 107 def testSubmitRightCaptcha(self): 106 key = getWord(int(parseKey(decrypt(self.captcha_key, self.hashkey))['key'])-1) 108 key = getWord(int(parseKey(decrypt(self.captcha_key, 109 self.hashkey))['key']) - 1) 107 110 self.form_data[self.formkey_key] = key 108 111 109 112 response = self.publishForm().getBody() 110 113 self.elog("right", response) … … 118 121 119 122 def testSubmitRightCaptchaTwice(self): 120 key = getWord(int(parseKey(decrypt(self.captcha_key, self.hashkey))['key'])-1) 123 key = getWord(int(parseKey(decrypt(self.captcha_key, 124 self.hashkey))['key']) - 1) 121 125 self.form_data[self.formkey_key] = key 122 126 … … 135 139 self.portal['index_html'].allowDiscussion(True) 136 140 self.form_url = '/index_html/discussion_reply_form' 137 138 def getFormData(self): 139 return {'form.submitted' 141 142 def getFormData(self): 143 return {'form.submitted': '1', 140 144 'subject': 'testing', 141 145 'Creator': portal_owner, 142 146 'body_text': 'Text in Comment', 143 147 'discussion_reply:method': 'Save', 144 'form.button.form_submit' 148 'form.button.form_submit': 'Save'} 145 149 146 150 … … 160 164 161 165 def getFormData(self): 162 return {"form.fullname" 163 "form.username" 164 "form.email" 165 "form.password" 166 "form.password_ctl" 167 'form.actions.register' 166 return {"form.fullname": "Tester", 167 "form.username": "tester", 168 "form.email": "tester@test.com", 169 "form.password": "123456", 170 "form.password_ctl": "123456", 171 'form.actions.register': 'Register'} 168 172 169 173 … … 175 179 self.portal['index_html'].allowDiscussion(True) 176 180 self.form_url = '/index_html/sendto_form' 177 178 def getFormData(self): 179 return {'form.submitted' 180 "send_to_address" 181 "send_from_address" 181 182 def getFormData(self): 183 return {'form.submitted': '1', 184 "send_to_address": "recipient@test.com", 185 "send_from_address": "sender@test.com", 182 186 'comment': 'Text in Comment', 183 'form.button.Send' : 'Save'} 187 'form.button.Send': 'Save'} 188 184 189 185 190 def send_patch(self, *args, **kwargs): 186 191 """This patch prevent breakage on sending.""" 187 192 193 188 194 class TestContactInfo(TestFormMixin): 189 195 … … 191 197 TestFormMixin.afterSetUp(self) 192 198 # preparation to form correct working 193 self.portal._updateProperty('email_from_address', 'manager@test.com')199 self.portal._updateProperty('email_from_address', 'manager@test.com') 194 200 self.logout() 195 201 self.form_url = '/contact-info' … … 201 207 202 208 def getFormData(self): 203 return {'form.submitted' 204 "sender_fullname" 205 "sender_from_address" 209 return {'form.submitted': '1', 210 "sender_fullname": "tester", 211 "sender_from_address": "sender@test.com", 206 212 'subject': 'Subject', 207 213 'message': 'Message', 208 'form.button.Send' 214 'form.button.Send': 'Save'} 209 215 210 216 -
quintagroup.plonecaptchas/branches/plone4/quintagroup/plonecaptchas/tests/testInstallation.py
r3154 r3160 26 26 for layer in LAYERS: 27 27 self.assert_(layer.split('/')[0] in self.skins.objectIds(), 28 '%s directory view not found in portal_skins after installation' % layer) 28 '%s directory view not found in portal_skins '\ 29 'after installation' % layer) 29 30 self.assert_(layer in path, 30 '%s layer not found in %s' % (PRODUCT_NAME, skin))31 '%s layer not found in %s' % (PRODUCT_NAME, skin)) 31 32 32 33 def testBrowserLayerRegistration(self): … … 40 41 # Mark request with IQGPloneCaptchas browser layer interface 41 42 alsoProvides(self.portal.REQUEST, IQGPloneCaptchas) 42 register = queryMultiAdapter((self.portal, self.portal.REQUEST), name="register") 43 register = queryMultiAdapter((self.portal, self.portal.REQUEST), 44 name="register") 43 45 self.assertEqual(isinstance(register, CaptchaRegistrationForm), True) 44 46 … … 60 62 path = map(str.strip, path.split(',')) 61 63 for layer in LAYERS: 62 self.assertTrue(not layer.split('/')[0] in self.skins.objectIds(), 63 '%s directory view found in portal_skins after uninstallation' % layer) 64 self.assertTrue( 65 not layer.split('/')[0] in self.skins.objectIds(), 66 '%s directory view found in portal_skins '\ 67 'after uninstallation' % layer) 64 68 self.assert_(not layer in path, 65 '%s layer found in %s skin after uninstallation' % (layer, skin)) 69 '%s layer found in %s skin after uninstallation' % (layer, 70 skin)) 66 71 67 72 def testBrowserLayerUnregistration(self): … … 70 75 registeredLayers = [r.name for r in site.registeredUtilities() 71 76 if r.provided == ILocalBrowserLayerType] 72 self.assertNotEqual("quintagroup.plonecaptchas" in registeredLayers, True) 77 self.assertNotEqual("quintagroup.plonecaptchas" in registeredLayers, 78 True) 73 79 74 80 def testRegisterFormOverriden(self): 75 81 # Mark request with IQGPloneCaptchas browser layer interface 76 register = queryMultiAdapter((self.portal, self.portal.REQUEST), name="register") 77 self.assertNotEqual(isinstance(register, CaptchaRegistrationForm), True) 82 register = queryMultiAdapter((self.portal, self.portal.REQUEST), 83 name="register") 84 self.assertNotEqual(isinstance(register, CaptchaRegistrationForm), 85 True) 78 86 79 87 -
quintagroup.plonecaptchas/branches/plone4/setup.py
r2509 r3160 6 6 setup(name='quintagroup.plonecaptchas', 7 7 version=version, 8 description="quintagroup.plonecaptchas is simple captchas implementation for Plone, designed for validating human input in insecure forms.", 8 description="quintagroup.plonecaptchas is simple captchas " 9 "implementation for Plone, designed for validating " 10 "human input in insecure forms.", 9 11 long_description=open("README.txt").read() + "\n" + 10 12 open(os.path.join("docs", "HISTORY.txt")).read(), 11 # Get more strings from http://www.python.org/pypi?%3Aaction=list_classifiers12 13 classifiers=[ 13 14 "Framework :: Plone",
Note: See TracChangeset
for help on using the changeset viewer.