from DateTime import DateTime
from types import TupleType, ListType
from uuid import uuid4
from DateTime import DateTime
from types import TupleType, ListType
from uuid import uuid4
manage_options = ({'label' : 'Registration mode', 'action' : 'manage_regmode'}, ) + \
BaseRegistrationTool.manage_options
manage_options = ({'label' : 'Registration mode', 'action' : 'manage_regmode'}, ) + \
BaseRegistrationTool.manage_options
security.declareProtected( ManagePortal, 'manage_regmode' )
manage_regmode = PageTemplateFile('www/configureRegistrationTool', globals(),
__name__='manage_regmode')
security.declareProtected( ManagePortal, 'manage_regmode' )
manage_regmode = PageTemplateFile('www/configureRegistrationTool', globals(),
__name__='manage_regmode')
security.declareProtected(ManagePortal, 'configureTool')
def configureTool(self, registration_mode, chain, REQUEST=None) :
""" """
security.declareProtected(ManagePortal, 'configureTool')
def configureTool(self, registration_mode, chain, REQUEST=None) :
""" """
if registration_mode not in MODES :
raise ValueError, "Unknown mode: " + registration_mode
else :
self._mode = registration_mode
self._updatePortalRoleMappingForMode(registration_mode)
if registration_mode not in MODES :
raise ValueError, "Unknown mode: " + registration_mode
else :
self._mode = registration_mode
self._updatePortalRoleMappingForMode(registration_mode)
wtool = getToolByName(self, 'portal_workflow')
if registration_mode == MODE_REVIEWED :
wtool = getToolByName(self, 'portal_workflow')
if registration_mode == MODE_REVIEWED :
if not wtool.getWorkflowById(wfid) :
raise ValueError, '"%s" is not a workflow ID.' % wfid
wfids.append(wfid)
if not wtool.getWorkflowById(wfid) :
raise ValueError, '"%s" is not a workflow ID.' % wfid
wfids.append(wfid)
wtool._chains_by_type['Member Data'] = tuple(wfids)
self._chain = ', '.join(wfids)
else :
wtool._chains_by_type['Member Data'] = tuple()
wtool._chains_by_type['Member Data'] = tuple(wfids)
self._chain = ', '.join(wfids)
else :
wtool._chains_by_type['Member Data'] = tuple()
if REQUEST :
REQUEST.RESPONSE.redirect(self.absolute_url() + '/manage_regmode?manage_tabs_message=Saved changes.')
def _updatePortalRoleMappingForMode(self, mode) :
if REQUEST :
REQUEST.RESPONSE.redirect(self.absolute_url() + '/manage_regmode?manage_tabs_message=Saved changes.')
def _updatePortalRoleMappingForMode(self, mode) :
urlTool = getToolByName(self, 'portal_url')
portal = urlTool.getPortalObject()
urlTool = getToolByName(self, 'portal_url')
portal = urlTool.getPortalObject()
if mode in [MODE_ANONYMOUS, MODE_PASS_ANONYMOUS, MODE_REVIEWED] :
portal.manage_permission(AddPortalMember, roles = ['Anonymous', 'Manager'], acquire=1)
elif mode == MODE_MANAGER :
portal.manage_permission(AddPortalMember, roles = ['Manager', 'UserManager'], acquire=0)
if mode in [MODE_ANONYMOUS, MODE_PASS_ANONYMOUS, MODE_REVIEWED] :
portal.manage_permission(AddPortalMember, roles = ['Anonymous', 'Manager'], acquire=1)
elif mode == MODE_MANAGER :
portal.manage_permission(AddPortalMember, roles = ['Manager', 'UserManager'], acquire=0)
security.declarePublic('roleMappingMismatch')
def roleMappingMismatch(self) :
# """ test if the role mapping is correct for the currrent mode """
security.declarePublic('roleMappingMismatch')
def roleMappingMismatch(self) :
# """ test if the role mapping is correct for the currrent mode """
mode = self._mode
urlTool = getToolByName(self, 'portal_url')
portal = urlTool.getPortalObject()
mode = self._mode
urlTool = getToolByName(self, 'portal_url')
portal = urlTool.getPortalObject()
def rolesOfAddPortalMemberPerm() :
p=Permission(AddPortalMember, [], portal)
return p.getRoles()
def rolesOfAddPortalMemberPerm() :
p=Permission(AddPortalMember, [], portal)
return p.getRoles()
if mode in [MODE_ANONYMOUS, MODE_PASS_ANONYMOUS, MODE_REVIEWED] :
if 'Anonymous' in rolesOfAddPortalMemberPerm() : return False
if mode in [MODE_ANONYMOUS, MODE_PASS_ANONYMOUS, MODE_REVIEWED] :
if 'Anonymous' in rolesOfAddPortalMemberPerm() : return False
elif mode == MODE_MANAGER :
roles = rolesOfAddPortalMemberPerm()
if 'Manager' in roles or 'UserManager' in roles and len(roles) == 1 and type(roles) == TupleType :
return False
elif mode == MODE_MANAGER :
roles = rolesOfAddPortalMemberPerm()
if 'Manager' in roles or 'UserManager' in roles and len(roles) == 1 and type(roles) == TupleType :
return False
mtool = getToolByName(self, 'portal_membership')
utool = getToolByName(self, 'portal_url')
portal = utool.getPortalObject()
mtool = getToolByName(self, 'portal_membership')
utool = getToolByName(self, 'portal_url')
portal = utool.getPortalObject()
if self.getMode() == MODE_PASS_ANONYMOUS :
private_collections = portal.get('private_collections')
if not private_collections :
raise AccessControl_Unauthorized()
if self.getMode() == MODE_PASS_ANONYMOUS :
private_collections = portal.get('private_collections')
if not private_collections :
raise AccessControl_Unauthorized()
data = private_collections.data
lines = filter(None, [l.strip() for l in data.split('\n')])
assert len(lines) % 3 == 0
data = private_collections.data
lines = filter(None, [l.strip() for l in data.split('\n')])
assert len(lines) % 3 == 0
if not (collecInfos.has_key(properties.get('collection_id')) and \
collecInfos[properties.get('collection_id')]['pw'] == properties.get('collection_password')) :
raise AccessControl_Unauthorized('Wrong primary credentials')
if not (collecInfos.has_key(properties.get('collection_id')) and \
collecInfos[properties.get('collection_id')]['pw'] == properties.get('collection_password')) :
raise AccessControl_Unauthorized('Wrong primary credentials')
BaseRegistrationTool.addMember(self, id, password, roles=roles,
domains=domains, properties=properties)
BaseRegistrationTool.addMember(self, id, password, roles=roles,
domains=domains, properties=properties)
if gid != DEFAULT_MEMBER_GROUP:
raise AccessControl_Unauthorized, 'You are not allowed to join arbitrary group.'
if gid != DEFAULT_MEMBER_GROUP:
raise AccessControl_Unauthorized, 'You are not allowed to join arbitrary group.'
+
+ security.declarePublic('generatePassword')
+ def generatePassword(self):
+ """ This password may not been entered by user.
+ Password generated by this method are typicaly used
+ on a member registration with 'validate_email' option enabled.
+ """
+ return str(uuid4())
- def requestPasswordReset(self, userid):
- """ add uuid / (userid, expiration) pair and return uuid """
+ def requestPasswordReset(self, userid, initial=False):
+ """ add uuid / (userid, expiration) pair
+ if ok: send an email to member. returns error message otherwise.
+ """
self.clearExpiredPasswordResetRequests()
mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
member = mtool.getMemberById(userid)
self.clearExpiredPasswordResetRequests()
mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
member = mtool.getMemberById(userid)
mailhost = portal.MailHost
sender = encodeQuopriEmail(ptool.getProperty('email_from_name'), ptool.getProperty('email_from_address'))
to = encodeQuopriEmail(member.getMemberFullName(nameBefore=0), member.getProperty('email'))
mailhost = portal.MailHost
sender = encodeQuopriEmail(ptool.getProperty('email_from_name'), ptool.getProperty('email_from_address'))
to = encodeQuopriEmail(member.getMemberFullName(nameBefore=0), member.getProperty('email'))
- options = {'fullName' : member.getMemberFullName(nameBefore=0),
+ options = {'initial' : initial,
+ 'fullName' : member.getMemberFullName(nameBefore=0),
+ 'member_id' : member.getId(),
+ 'loginIsNotEmail' : member.getId() != member.getProperty('email'),
'siteName' : ptool.getProperty('title'),
'resetPasswordUrl' : '%s/password_reset_form/%s' % (utool(), uuid)}
body = self.password_reset_mail(options)
'siteName' : ptool.getProperty('title'),
'resetPasswordUrl' : '%s/password_reset_form/%s' % (utool(), uuid)}
body = self.password_reset_mail(options)
security.declarePrivate('clearExpiredPasswordResetRequests')
def clearExpiredPasswordResetRequests(self):
now = DateTime()
security.declarePrivate('clearExpiredPasswordResetRequests')
def clearExpiredPasswordResetRequests(self):
now = DateTime()
security.declarePublic('resetPassword')
def resetPassword(self, uuid, password, confirm) :
record = self._passwordResetRequests.get(uuid)
if not record :
return None, _('Invalid reset password request.')
security.declarePublic('resetPassword')
def resetPassword(self, uuid, password, confirm) :
record = self._passwordResetRequests.get(uuid)
if not record :
return None, _('Invalid reset password request.')
userid, expiration = record
now = DateTime()
if expiration < now :
self.clearExpiredPasswordResetRequests()
return None, _('Your reset password request has expired. You can ask a new one.')
userid, expiration = record
now = DateTime()
if expiration < now :
self.clearExpiredPasswordResetRequests()
return None, _('Your reset password request has expired. You can ask a new one.')
msg = self.testPasswordValidity(password, confirm=confirm)
if not msg : # None if everything ok. Err message otherwise.
mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
msg = self.testPasswordValidity(password, confirm=confirm)
if not msg : # None if everything ok. Err message otherwise.
mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
del self._passwordResetRequests[uuid]
return userid, _('Password successfully updated.')
else :
del self._passwordResetRequests[uuid]
return userid, _('Password successfully updated.')
else :