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)
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
* Design notes for the Captcha plugin architecture added.
 | 
			
		||||
  [timo]
 | 
			
		||||
 | 
			
		||||
* Make IDiscussionLayer inherit from Interface again. Remove IDefaultPloneLayer,
 | 
			
		||||
  since Plone 4.0b1 and plone.theme 2.0b1 are out now.
 | 
			
		||||
  [timo]
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,7 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
# Captcha validator, see captcha.txt for design notes.
 | 
			
		||||
 | 
			
		||||
from persistent import Persistent
 | 
			
		||||
 | 
			
		||||
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 -*-
 | 
			
		||||
 | 
			
		||||
# Captcha validator, see captcha.txt for design notes.
 | 
			
		||||
 | 
			
		||||
from Acquisition import aq_inner
 | 
			
		||||
 | 
			
		||||
from z3c.form import validator
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user