[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/ Change password view.
Charlie Clark
charlie at begeistert.org
Thu Jul 1 06:37:38 EDT 2010
Log message for revision 114042:
Change password view.
Changed:
U Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/configure.zcml
A Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.pt
A Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.py
A Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.txt
-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/configure.zcml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/configure.zcml 2010-07-01 10:37:00 UTC (rev 114041)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/configure.zcml 2010-07-01 10:37:37 UTC (rev 114042)
@@ -59,11 +59,17 @@
/>
<utility
- component=".preferences.portal_skins"
- provides="zope.schema.interfaces.IVocabularyFactory"
- name="cmf.portal_skins"
+ component=".preferences.portal_skins"
+ provides="zope.schema.interfaces.IVocabularyFactory"
+ name="cmf.portal_skins"
/>
-
-
+ <browser:page
+ for="Products.CMFCore.interfaces.ISiteRoot"
+ layer="Products.CMFDefault.interfaces.ICMFDefaultSkin"
+ name="password.html"
+ class=".password.Password"
+ permission="cmf.SetOwnPassword"
+ />
+
</configure>
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.pt (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.pt 2010-07-01 10:37:37 UTC (rev 114042)
@@ -0,0 +1,24 @@
+<html metal:use-macro="context/@@standard_macros/page">
+<body>
+
+<h1 tal:content="view/title">Title</h1>
+
+<metal:slot metal:fill-slot="body" i18n:domain="cmf_default">
+
+<tal:case tal:condition="view/is_first_login">
+<p i18n:translate="">This is the first time that you've logged in to
+ <tal:span tal:content="context/title"
+ i18n:name="portal_title">Here</tal:span>.
+ Before you start exploring you need to change your original password. This
+ will ensure that the password we sent you via email cannot be used in a
+ malicious manner.</p>
+
+<p i18n:translate="">Please use the form below to change your password.</p>
+</tal:case>
+
+<metal:macro metal:use-macro="view/base_template/macros/form" />
+
+</metal:slot>
+
+</body>
+</html>
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.py (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.py 2010-07-01 10:37:37 UTC (rev 114042)
@@ -0,0 +1,101 @@
+"""
+Change password form
+"""
+
+from DateTime import DateTime
+
+from zope.formlib import form
+from zope.interface import Interface, invariant
+from zope.schema import ASCIILine, Password, List, TextLine
+
+from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
+
+from Products.CMFCore.utils import getToolByName
+from Products.CMFDefault.utils import Message as _
+from Products.CMFDefault.formlib.form import EditFormBase
+
+def check_domain(value):
+ if " " in value:
+ return False
+ return True
+
+
+class IPasswordSchema(Interface):
+
+ password = Password(
+ title=_(u"New password"),
+ min_length=5,
+ required=False
+ )
+
+ confirmation = Password(
+ title=_(u"Confirm new password"),
+ required=False
+ )
+
+ domains = List(
+ title=_("Domains"),
+ description=_(u"""If you do not know what this field is
+ for, leave it blank."""),
+ value_type=ASCIILine(
+ title=_(u"Domain name"),
+ constraint=check_domain
+ ),
+ required = False
+ )
+
+ @invariant
+ def check_passwords_match(schema):
+ """Password and confirmation must match"""
+ if schema.password != schema.confirmation:
+ raise Invalid(_(u"Passwords do not match"))
+
+
+class Password(EditFormBase):
+
+ form_fields = form.FormFields(IPasswordSchema)
+
+ actions = form.Actions(
+ form.Action(
+ name="change",
+ label=_(u"Change password"),
+ success="handle_success",
+ failure="handle_failure"
+ )
+ )
+
+ template = ViewPageTemplateFile("password.pt")
+ base_template = EditFormBase.template
+
+ def __init__(self, context, request):
+ super(Password, self).__init__(context, request)
+ self.mtool = getToolByName(self.context, 'portal_membership')
+ self.rtool = getToolByName(self.context, 'portal_registration')
+ if self.member.getProperty('last_login_time') == DateTime('1999/01/01'):
+ self.member.setProperties(last_login_time='2000/01/01')
+
+ def setUpWidgets(self, ignore_request=False):
+ """Populate form with user domains"""
+ data = {}
+ data['domains'] = " ".join(self.member.getDomains())
+ self.widgets = form.setUpDataWidgets(
+ self.form_fields,
+ self.prefix,
+ self.context,
+ self.request,
+ data=data,
+ ignore_request=ignore_request)
+
+ @property
+ def member(self):
+ return self.mtool.getAuthenticatedMember()
+
+ @property
+ def is_first_login(self):
+ return self.member.getProperty('last_login_time') == DateTime('1999/01/01')
+
+ def handle_success(self, action, data):
+ data.pop("confirmation")
+ self.member.setSecurityProfile(**data)
+ self.status = _(u'Your password has been changed.')
+ self._setRedirect("portal_actions", "user/login")
Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.py
___________________________________________________________________
Added: svn:keywords
+ Id
Added: svn:eol-style
+ native
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.txt (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.txt 2010-07-01 10:37:37 UTC (rev 114042)
@@ -0,0 +1,7 @@
+Password change form
+--------------------
+
+Apply same constraints as when joining
+Uses that have been sent a password must change it using this form the first time they log in
+
+Once the password has been changed the user must login again
\ No newline at end of file
More information about the checkins
mailing list