Author: rob
Date: 2007-07-31 21:12:29 -0400 (Tue, 31 Jul 2007)
New Revision: 7920

Modified:
   opencore/trunk/Products/OpenPlans/Extensions/Install.py
   opencore/trunk/opencore/content/member.py
   opencore/trunk/opencore/nui/setup.py
Log:
* override verifyCredentials on the member object to support case insensitive
  authentication


Modified: opencore/trunk/Products/OpenPlans/Extensions/Install.py
===================================================================
--- opencore/trunk/Products/OpenPlans/Extensions/Install.py     2007-07-31 
23:54:55 UTC (rev 7919)
+++ opencore/trunk/Products/OpenPlans/Extensions/Install.py     2007-08-01 
01:12:29 UTC (rev 7920)
@@ -17,6 +17,7 @@
 from Products.Archetypes.public import listTypes
 from Products.Archetypes.config import REFERENCE_CATALOG
 from Products.Archetypes.Extensions.utils import installTypes#, install_subskin
+from Products.membrane.config import TOOLNAME as MBTOOLNAME
 from Products.remember.Extensions.workflow import addWorkflowScripts
 from Products.remember.utils import getAdderUtility
 from Products.CMFPlacefulWorkflow.PlacefulWorkflowTool import \
@@ -371,7 +372,7 @@
     if mtype not in allowed:
         allowed += (mtype,)
         mdc_fti.allowed_content_types = allowed
-    mbtool = getToolByName(portal, 'membrane_tool')
+    mbtool = getToolByName(portal, MBTOOLNAME)
     mbtool.registerMembraneType(mtype)
 
     print >> out, '-> specifying %s as default member type' % mtype
@@ -389,6 +390,10 @@
     print >> out, '-> allow users to choose their own password'
     portal.manage_changeProperties(validate_email=0)
 
+def setCaseInsensitiveLogins(portal, out):
+    mbtool = getToolByName(portal, MBTOOLNAME)
+    mbtool.case_sensitive_auth = False
+
 def setTeamType(portal, out):
     tmtool = getToolByName(portal, 'portal_teams')
     teamtype = OpenTeam.portal_type
@@ -692,6 +697,7 @@
     securityTweaks(portal, out)
     uiTweaks(portal, out)
     setMemberType(portal, out)
+    setCaseInsensitiveLogins(portal, out)
     setTeamType(portal, out)
     addProjectsFolder(portal, out)
     setProjectFolderPermissions(portal, out)

Modified: opencore/trunk/opencore/content/member.py
===================================================================
--- opencore/trunk/opencore/content/member.py   2007-07-31 23:54:55 UTC (rev 
7919)
+++ opencore/trunk/opencore/content/member.py   2007-08-01 01:12:29 UTC (rev 
7920)
@@ -1,20 +1,25 @@
+import re
+from types import TupleType, ListType, UnicodeType
+
 from AccessControl import ClassSecurityInfo
 
+from zope.component import getAdapter
+
 from Products.CMFCore.utils import getToolByName
 from Products.CMFCore.CMFCorePermissions import *
-
 import Products.Archetypes.public as atapi
 from Products.Archetypes.ExtensibleMetadata import ExtensibleMetadata
 from Products.Archetypes.ArchetypeTool import base_factory_type_information as 
bfti
-
-from types import TupleType, ListType, UnicodeType
 from Products.Archetypes.Field import STRING_TYPES
+from Products.Archetypes.public import Schema, StringField, StringWidget
 from Products.validation.validators.BaseValidators import EMAIL_RE
 
+from Products.membrane.config import TOOLNAME as MBTOOLNAME
 from Products.remember.content.member_schema \
      import id_schema, contact_schema, plone_schema, \
      security_schema, login_info_schema
 from Products.remember.content.member import FolderishMember
+from Products.remember.interfaces import IHashPW
 from Products.remember.config import ALLOWED_MEMBER_ID_PATTERN
 
 from Products.TeamSpace.security import TeamSecurity
@@ -22,10 +27,6 @@
 from Products.OpenPlans.config import PROJECTNAME
 from Products.OpenPlans.config import PROHIBITED_MEMBER_PREFIXES
 
-from Products.Archetypes.public import Schema, StringField, StringWidget
-import re
-
-
 member_schema = id_schema + contact_schema + plone_schema + \
                 security_schema + login_info_schema
 content_schema = member_schema.copy() # copy before editing
@@ -183,7 +184,8 @@
     security.declareProtected(ManagePortal, 'getUserConfirmationCode')
     def getUserConfirmationCode(self):
         """
-        Return the user's unique confirmation code to complete registration 
manually
+        Return the user's unique confirmation code to complete
+        registration manually
         """
         return self.UID()
 
@@ -337,5 +339,29 @@
 
         return FolderishMember.__bobo_traverse__(self, REQUEST, name)
 
+    def verifyCredentials(self, credentials):
+        """
+        We override the base member's verifyCredentials method to be
+        able to support case insensitive login.
+        """
+        mbtool = getToolByName(self, MBTOOLNAME)
+        login = credentials.get('login')
+        if not mbtool.case_sensitive_auth:
+            login = login.lower()
+        password = credentials.get('password')
+        try:
+            hash_type, hashed = self.getPassword().split(':', 1)
+        except ValueError:
+            raise ValueError('Error parsing hash type. '
+                             'Please run migration')
+        hasher = getAdapter(self, IHashPW, hash_type)
+        username = self.getUserName()
+        if not mbtool.case_sensitive_auth:
+            username = username.lower()
+        if login == username and hasher.validate(hashed, password):
+            return True
+        else:
+            return False
+        
 
 atapi.registerType(OpenMember, package=PROJECTNAME)

Modified: opencore/trunk/opencore/nui/setup.py
===================================================================
--- opencore/trunk/opencore/nui/setup.py        2007-07-31 23:54:55 UTC (rev 
7919)
+++ opencore/trunk/opencore/nui/setup.py        2007-08-01 01:12:29 UTC (rev 
7920)
@@ -19,6 +19,7 @@
 from Products.OpenPlans.Extensions.Install import createMemIndexes, \
      installColumns, createValidationMember, \
      install_local_transient_message_utility, install_email_invites_utility
+from Products.OpenPlans.Extensions.Install import setCaseInsensitiveLogins
 from Products.OpenPlans.Extensions.utils import reinstallSubskins
 from Products.OpenPlans import config as op_config
 from indexing import createIndexes
@@ -206,6 +207,7 @@
 nui_functions['Migrate memberships to new workflow'] = 
migrate_mship_workflow_states
 nui_functions['Update team active states'] = update_team_active_states
 nui_functions['Add made_active_date attribute to memberships'] = 
migrate_mships_made_active_date
+nui_functions['Set case insensitive logins'] = 
convertFunc(setCaseInsensitiveLogins)
 
 def run_nui_setup(portal):
     pm = portal.portal_migration



--
Archive: 
http://www.openplans.org/projects/opencore/lists/openplans-svn/archive/2007/07/1185930751829
To unsubscribe send an email with subject unsubscribe to [EMAIL PROTECTED]  
Please contact [EMAIL PROTECTED] for questions.

Reply via email to