Design notes for the Captcha plugin architecture added.
svn path=/plone.app.discussion/trunk/; revision=36993
This commit is contained in:
		
							parent
							
								
									3bda1a12f1
								
							
						
					
					
						commit
						7f28f2773a
					
				@ -4,6 +4,9 @@ Changelog
 | 
				
			|||||||
1.0b5 (unreleased)
 | 
					1.0b5 (unreleased)
 | 
				
			||||||
------------------
 | 
					------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Design notes for the Captcha plugin architecture added.
 | 
				
			||||||
 | 
					  [timo]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Make IDiscussionLayer inherit from Interface again. Remove IDefaultPloneLayer,
 | 
					* Make IDiscussionLayer inherit from Interface again. Remove IDefaultPloneLayer,
 | 
				
			||||||
  since Plone 4.0b1 and plone.theme 2.0b1 are out now.
 | 
					  since Plone 4.0b1 and plone.theme 2.0b1 are out now.
 | 
				
			||||||
  [timo]
 | 
					  [timo]
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,7 @@
 | 
				
			|||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Captcha validator, see captcha.txt for design notes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from persistent import Persistent
 | 
					from persistent import Persistent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from Products.CMFCore.utils import getToolByName
 | 
					from Products.CMFCore.utils import getToolByName
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										67
									
								
								plone/app/discussion/browser/captcha.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								plone/app/discussion/browser/captcha.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					====================
 | 
				
			||||||
 | 
					Captcha Design Notes
 | 
				
			||||||
 | 
					====================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This document contains design notes for the plone.app.discussion Captcha plugin
 | 
				
			||||||
 | 
					architecture.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Introduction
 | 
				
			||||||
 | 
					------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					When a Captcha plugin (e.g. plone.formwidget.captcha or 
 | 
				
			||||||
 | 
					plone.formwidget.recaptcha) is installed, plone.app.discussion 
 | 
				
			||||||
 | 
					extends the comment form with a Captcha field/widget and a Captcha validator.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The form extender and validator are only registered if there is a plugin 
 | 
				
			||||||
 | 
					installed that claims to provide the "plone.app.discussion-captcha" feature in 
 | 
				
			||||||
 | 
					its configure.zcml file::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <configure ...
 | 
				
			||||||
 | 
					        xmlns:meta="http://namespaces.zope.org/meta">
 | 
				
			||||||
 | 
					        <!-- Declare that plone.formwidget.captcha provides a Captcha field that 
 | 
				
			||||||
 | 
					             can be used by plone.app.discussion to add a Captcha field to comment 
 | 
				
			||||||
 | 
					             forms. -->
 | 
				
			||||||
 | 
					        <meta:provides feature="plone.app.discussion-captcha" />
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        ...
 | 
				
			||||||
 | 
					    </configure>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For an example see:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					https://svn.plone.org/svn/plone/plone.formwidget.captcha/trunk/plone/formwidget/captcha/configure.zcml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Currently plone.formwidget.captcha and plone.formwidget.recaptcha provide such a
 | 
				
			||||||
 | 
					feature. If you want to write your own Captcha plugin, it has to provide this 
 | 
				
			||||||
 | 
					feature as well.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					CaptchaExtender
 | 
				
			||||||
 | 
					---------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The CaptchaExtender class extends the comment form with a Captcha field and
 | 
				
			||||||
 | 
					widget. The CaptchaExtender currently uses either the CaptchaFieldWidget from
 | 
				
			||||||
 | 
					plone.formwidget.captcha or the ReCaptchaFieldWidget from 
 | 
				
			||||||
 | 
					plone.formwidget.recaptcha. If you want to write your own Captcha solution, you
 | 
				
			||||||
 | 
					have to override the update() method of the CaptchaExtender or write your own
 | 
				
			||||||
 | 
					CaptchaExtender class.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CaptchaValidator
 | 
				
			||||||
 | 
					----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The CaptchaValidator class provides custom versions of the 
 | 
				
			||||||
 | 
					plone.formwidget.captcha and the plone.formwidget.recaptcha validators. It does 
 | 
				
			||||||
 | 
					this, because we want to be able to have more than one Captcha solution 
 | 
				
			||||||
 | 
					installed in one Plone instance. We also want to be able to easily switch 
 | 
				
			||||||
 | 
					between different Captcha implementations inside a single Plone instance. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Therefore we have to check which Captcha solution is enabled in the discussion 
 | 
				
			||||||
 | 
					control panel and use only the selected Captcha validator. It is not enough to 
 | 
				
			||||||
 | 
					check if a Captcha plugin is just installed, because there could be more than 
 | 
				
			||||||
 | 
					one.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					We do two checks. First we check for a suitable Captcha solution (check for the 
 | 
				
			||||||
 | 
					plone.app.discussion-captcha feature, see notes above). Second, we check which 
 | 
				
			||||||
 | 
					Captcha solution is enabled in the discussion control panel and apply the 
 | 
				
			||||||
 | 
					corresponding field validator.
 | 
				
			||||||
@ -1,5 +1,7 @@
 | 
				
			|||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Captcha validator, see captcha.txt for design notes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from Acquisition import aq_inner
 | 
					from Acquisition import aq_inner
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from z3c.form import validator
 | 
					from z3c.form import validator
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user