Example #1
0
    def handleChange(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        flash = IStatusMessage(self.request).addStatusMessage
        pas = getToolByName(self.context, "acl_users")
        ppr = getToolByName(self.context, "portal_password_reset")
        user = pas.getUser(data["login"])
        if user is None:
            flash(
                _(
                    "user_name_wrong",
                    u"The login name you have provided does not match the username from the password-reset email. Please check your spelling."  # noqa: E501
                ), "error"
            )
            return
        try:
            ppr.resetPassword(
                user.getId(), self.randomstring, data["password"]
            )
        except InvalidRequestError:
            flash(
                _(
                    "user_name_wrong",
                    u"The login name you have provided does not match the username from the password-reset email. Please check your spelling."  # noqa: E501
                ), "error"
            )
            return

        flash(_("password_reset", u"Your password has been reset."), "success")
        portal_url = aq_inner(self.context).absolute_url()
        self.request.response.redirect("%s/@@login" % portal_url)
Example #2
0
    def handleSend(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        appconfig = queryUtility(IAppConfig) or {}
        siteconfig = appconfig.get("site", {})

        subject=_("contact_mail_subject", default="Contact request: ${subject}", mapping=data)
        subject=translate(subject, context=self.request)

        email=createEmailTo(data["name"], data["email"],
                            siteconfig.get("contact.name", self.context.email_from_name),
                            siteconfig.get("contact.email", self.context.email_from_address),
                            subject,
                            data["message"])
        mh=getToolByName(self.context, "MailHost")
        flash=IStatusMessage(self.request).addStatusMessage
        try:
            mh.send(email)
        except MailHostError as e:
            log.error("MailHost error sending contact form for %s: %s", data["email"], e)
            flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error")
            return
        except socket.error as e:
            log.error("Socket error sending contact form for %s: %s", data["email"], e[1])
            flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error")
            return

        flash(_("Message sent"), "success")
        self.request.response.redirect(aq_inner(self.context).absolute_url())
Example #3
0
    def handleSend(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        appconfig = queryUtility(IAppConfig) or {}
        siteconfig = appconfig.get("site", {})

        subject=_(u"contact_mail_subject", default=u"Contact request: ${subject}", mapping=data)
        subject=translate(subject, context=self.request)

        email=createEmailTo(data["name"], data["email"],
                            siteconfig.get("contact.name", self.context.email_from_name),
                            siteconfig.get("contact.email", self.context.email_from_address),
                            subject,
                            data["message"])
        mh=getToolByName(self.context, "MailHost")
        flash=IStatusMessage(self.request).addStatusMessage
        try:
            mh.send(email)
        except MailHostError, e:
            log.error("MailHost error sending contact form for %s: %s", data["email"], e)
            flash(_(u"error_contactmail", u"An error occured while processing your contact request. Please try again later."), "error")
            return
Example #4
0
    def organise(self):
        """Helper method to generate the menu items for organising content
        (copy/paste/etc.).

        If no organising actions are available None is returned.
        """
        context = aq_inner(self.context)
        context_url = context.absolute_url()
        is_root = ISiteRoot.providedBy(context)
        pa = getToolByName(context, "portal_actions")
        actions = pa.listActions(object=context, categories=("folder_buttons",), ignore_categories=None)
        ec = pa._getExprContext(context)
        actions = [ActionInfo(action, ec) for action in actions]

        menu = {"title": _("menu_organise", default=u"Organise")}
        children = menu["children"] = []
        for a in actions:
            if a["visible"] and a["allowed"] and a["available"] and not is_root:

                if a["id"] == "copy" and context.cb_isCopyable():
                    children.append({"title": _("menu_copy", default=u"Copy"), "url": "%s/@@copy" % context_url})

                elif a["id"] == "cut" and context.cb_isMoveable():
                    children.append({"title": _("menu_cut", default=u"Cut"), "url": "%s/@@cut" % context_url})

                elif a["id"] == "paste" and ICopyContainer.providedBy(context):
                    children.append({"title": _("menu_paste", default=u"Paste"), "url": "%s/@@paste" % context_url})
                elif a["id"] == "delete":
                    children.append({"title": _("menu_delete", default=u"Delete"), "url": "%s/@@delete" % context_url})
        if children:
            return menu
Example #5
0
    def handleChange(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        flash = IStatusMessage(self.request).addStatusMessage
        pas = getToolByName(self.context, "acl_users")
        ppr = getToolByName(self.context, "portal_password_reset")
        user = pas.getUser(data["login"])
        if user is None:
            flash(
                _(
                    "user_name_wrong",
                    "The login name you have provided does not match the username from the password-reset email. Please check your spelling.",  # noqa: E501
                ),
                "error",
            )
            return
        try:
            ppr.resetPassword(user.getId(), self.randomstring,
                              data["password"])
        except InvalidRequestError:
            flash(
                _(
                    "user_name_wrong",
                    "The login name you have provided does not match the username from the password-reset email. Please check your spelling.",  # noqa: E501
                ),
                "error",
            )
            return

        flash(_("password_reset", "Your password has been reset."), "success")
        portal_url = aq_inner(self.context).absolute_url()
        self.request.response.redirect("%s/@@login" % portal_url)
Example #6
0
class ExternalLinkSchema(model.Schema):
    URL = schema.URI(title=_("label_url", default="URL"), required=True)

    title = schema.TextLine(title=_("label_title", default="Title"), required=False)

    new_window = schema.Bool(
        title=_("label_new_window", default="Open link in new window"), default=True
    )
Example #7
0
class IPasswordReset(form.Schema):
    login = schema.TextLine(
            title=_("label_login", default="Login"),
            required=True)

    password = schema.Password(
            title = _("label_password", default="Password"),
            required = True)
Example #8
0
 def render(self):
     flash=IStatusMessage(self.request).addStatusMessage
     if not isAnonymous():
         mt=getToolByName(self.context, "portal_membership")
         mt.logoutUser(self.request)
         flash(_(u"message_logged_out", default=u"You have been logged out."), "success")
     else:
         flash(_(u"message_already_logged_out", default=u"You were already logged out."), "notice")
     return self.request.response.redirect(aq_inner(self.context).absolute_url())
Example #9
0
class ISettings(model.Schema):
    fullname = schema.TextLine(title=_("label_fullname", default="Full name"),
                               required=True)

    email = schema.ASCIILine(title=_("label_email", default="Email address"),
                             required=True)

    password = schema.Password(title=_("label_password", default="Password"),
                               required=True)
Example #10
0
def formatDatetime(request, timestamp, length="long"):
    """Wrapper aound the zope.i18n datetime formatter which does not abort on
    pre-1900 dates.
    """
    if timestamp.year<1900:
        return _("date_to_early", default=u"<pre-1900-date>")
    if length=="long":
        return _("format_datetime", default="${date} at ${time}",
                mapping=dict(date=formatDate(request, timestamp, "long"),
                             time=formatTime(request, timestamp, "short")))
    return request.locale.dates.getFormatter("dateTime", length).format(timestamp)
Example #11
0
    def render(self):
        context=aq_inner(self.context)
        container=aq_parent(context)
        flash=IStatusMessage(self.request).addStatusMessage

        try:
            container.manage_cutObjects(context.getId(), self.request)
            flash(_("message_cut_success", default=u"Cut."), "notice")
        except CopyError:
            flash(_("message_cut_invalid", default=u"It is not possible to move this object."), "error")

        self.request.response.redirect(context.absolute_url())
Example #12
0
    def render(self):
        context=aq_inner(self.context)
        container=aq_parent(context)
        flash=IStatusMessage(self.request).addStatusMessage

        try:
            container.manage_cutObjects(context.getId(), self.request)
            flash(_("message_cut_success", default="Cut."), "notice")
        except CopyError:
            flash(_("message_cut_invalid", default="It is not possible to move this object."), "error")

        self.request.response.redirect(context.absolute_url())
Example #13
0
class PasswordReset(form.SchemaForm):
    grok.context(ISiteRoot)
    grok.name("reset-password")
    grok.require("zope2.Public")

    randomstring = None

    ignoreContext = True
    schema = IPasswordReset
    label = _("header_password_reset", default="Reset password")
    description = _("intro_password_reset",
            default="Please fill out the form below to set your password.")
    default_fieldset_label = None

    def publishTraverse(self, request, name):
        if self.randomstring is not None:
            raise KeyError(name)

        ppr=getToolByName(self.context, "portal_password_reset")
        try:
            ppr.verifyKey(name)
        except (InvalidRequestError, ExpiredRequestError):
            raise KeyError(name)

        self.randomstring=name
        return self


    @buttonAndHandler(_("button_change", default="Change"), name="change")
    def handleChange(self, action):
        data, errors=self.extractData()
        if errors:
            self.status=self.formErrorsMessage
            return
        
        flash=IStatusMessage(self.request).addStatusMessage
        pas=getToolByName(self.context, "acl_users")
        ppr=getToolByName(self.context, "portal_password_reset")
        user=pas.getUser(data["login"])
        if user is None:
            flash(_("user_name_wrong", "The login name you have provided does not match the username from the password-reset email. Please check your spelling."), "error")
            return
        try:
            ppr.resetPassword(user.getId(), self.randomstring, data["password"])
        except InvalidRequestError:
            flash(_("user_name_wrong", "The login name you have provided does not match the username from the password-reset email. Please check your spelling."), "error")
            return


        flash(_("password_reset", "Your password has been reset."), "success")
        portal_url=aq_inner(self.context).absolute_url()
        self.request.response.redirect("%s/@@login" % portal_url)
Example #14
0
def formatDatetime(request, timestamp, length="long"):
    """Wrapper aound the zope.i18n datetime formatter which does not abort on
    pre-1900 dates.
    """
    if timestamp.year < 1900:
        return _("date_to_early", default="<pre-1900-date>")
    if length == "long":
        return _("format_datetime",
                 default="${date} at ${time}",
                 mapping=dict(date=formatDate(request, timestamp, "long"),
                              time=formatTime(request, timestamp, "short")))
    return request.locale.dates.getFormatter("dateTime",
                                             length).format(timestamp)
Example #15
0
    def set(self, value):
        if value is None:
            return IStatusMessage(getRequest()).add(
                _("Password not updated, none was specified."), type="error")

        try:
            mt = getToolByName(self.user, "portal_membership")
        except AttributeError:
            return IStatusMessage(getRequest()).add(
                _("Cannot change password for Zope users, only Plone"),
                type="error")
        else:
            mt.setPassword(value)
Example #16
0
 def render(self):
     flash = IStatusMessage(self.request).addStatusMessage
     if not isAnonymous():
         mt = getToolByName(self.context, "portal_membership")
         mt.logoutUser(self.request)
         flash(_("message_logged_out", default="You have been logged out."),
               "success")
     else:
         flash(
             _("message_already_logged_out",
               default="You were already logged out."), "notice")
     return self.request.response.redirect(
         aq_inner(self.context).absolute_url())
Example #17
0
    def set(self, value):
        if value is None:
            return IStatusMessage(getRequest()).add(
                _('Password not updated, none was specified.'),
                type='error')

        try:
            mt = getToolByName(self.user, "portal_membership")
        except AttributeError:
            return IStatusMessage(getRequest()).add(
                _('Cannot change password for Zope users, only Plone'),
                type='error')
        else:
            mt.setPassword(value)
Example #18
0
def formatDate(request, date, length="long"):
    """Wrapper aound the zope.i18n date formatter which does not abort on
    pre-1900 dates.
    """
    if date.year<1900:
        return _("date_to_early", default=u"<pre-1900-date>")
    return request.locale.dates.getFormatter("date", length).format(date)
Example #19
0
    def update(self):
        user=getSecurityManager().getUser()

        if "came_from" in self.request:
            self.came_from=self.request.came_from
        else:
            self.came_from=self.request.environ.get("HTTP_REFERER")
        if self.came_from:
            if ":" not in self.came_from:
                # Mostly for mechanize/testbrowser which starts with a bogus 'localhost' as referer.
                self.came_from=None
            else:
                put=getToolByName(self.context, "portal_url")
                if not put.isURLInPortal(self.came_from):
                    self.came_from=None

        self.anonymous=isAnonymous(user)
        self.action="%s/@@login" % aq_inner(self.context).absolute_url()

        if not self.anonymous and "login_attempt" in self.request:
            flash=IStatusMessage(self.request).addStatusMessage
            flash(_(u"message_logged_in", default=u"You have been logged in."), "success")
            mt=getToolByName(self.context, "portal_membership")
            mt.loginUser(self.request)
            next=self.came_from or self.homeUrl(user)
            self.request.response.redirect(next)

        self.failed=self.anonymous and "login_attempt" in self.request
Example #20
0
 def site_title(self):
     config = self.appConfig
     title = config.get("site", {}).get("title")
     if title:
         return title
     else:
         return _("default_site_title", default="Plone")
Example #21
0
 def site_title(self):
     config=self.appConfig
     title=config.get("site", {}).get("title")
     if title:
         return title
     else:
         return _("default_site_title", default=u"Plone")
Example #22
0
def formatDate(request, date, length="long"):
    """Wrapper aound the zope.i18n date formatter which does not abort on
    pre-1900 dates.
    """
    if date.year < 1900:
        return _("date_to_early", default="<pre-1900-date>")
    return request.locale.dates.getFormatter("date", length).format(date)
Example #23
0
    def update(self):
        user = getSecurityManager().getUser()
        self.came_from = self.request.get('came_from')
        if not self.came_from:
            self.came_from = self.request.environ.get("HTTP_REFERER")
        elif '@@reset-password' in self.came_from:
            self.came_from = None

        if self.came_from:
            if ":" not in self.came_from:
                # Mostly for mechanize/testbrowser which starts with a bogus 'localhost' as referer.
                self.came_from = None
            else:
                put = getToolByName(self.context, "portal_url")
                if not put.isURLInPortal(self.came_from):
                    self.came_from = None

        self.anonymous = isAnonymous(user)
        self.action = "%s/@@login" % aq_inner(self.context).absolute_url()

        if not self.anonymous and "login_attempt" in self.request:
            flash = IStatusMessage(self.request).addStatusMessage
            flash(_("message_logged_in", default="You have been logged in."),
                  "success")
            mt = getToolByName(self.context, "portal_membership")
            mt.loginUser(self.request)
            next = self.came_from or self.homeUrl(user)
            self.request.response.redirect(next)

        self.failed = self.anonymous and "login_attempt" in self.request
Example #24
0
    def post(self):
        action=self.request.form.get("action", "cancel")
        context=aq_inner(self.context)
        flash=IStatusMessage(self.request).addStatusMessage

        if action=="cancel":
            flash(_("message_delete_cancel", default="Deletion cancelled"), "notice")
            self.request.response.redirect(context.absolute_url())
        elif action=="delete":
            authenticator=getMultiAdapter((self.context, self.request), name="authenticator")
            if not authenticator.verify():
                raise zExceptions.Unauthorized

            container=aq_parent(context)
            container.manage_delObjects([context.getId()])
            flash(_("message_delete_success", default="Object removed"), "success")
            self.request.response.redirect(container.absolute_url())
Example #25
0
    def render(self):
        flash = IStatusMessage(self.request).addStatusMessage
        if setLanguage(self.request, self.context):
            flash(_('message_switch_language',
                default=u'Language updated'), 'success')
        else:
            flash(_('message_switch_language_error',
                default=u'Failed to switch language'), 'error')

        next_url = self.request.get('came_from')
        if not next_url:
            next_url = self.request.environ.get('HTTP_REFERER')
        if not next_url or not \
                next_url.startswith(getPortal(self.context).absolute_url()):
            next_url = aq_inner(self.context).absolute_url()

        self.request.response.redirect(next_url)
Example #26
0
    def render(self):
        flash = IStatusMessage(self.request).addStatusMessage
        if setLanguage(self.request, self.context):
            flash(_('message_switch_language',
                default='Language updated'), 'success')
        else:
            flash(_('message_switch_language_error',
                default='Failed to switch language'), 'error')

        next_url = self.request.get('came_from')
        if not next_url:
            next_url = self.request.environ.get('HTTP_REFERER')
        if not next_url or not \
                next_url.startswith(getPortal(self.context).absolute_url()):
            next_url = aq_inner(self.context).absolute_url()

        self.request.response.redirect(next_url)
Example #27
0
    def organise(self):
        """Helper method to generate the menu items for organising content
        (copy/paste/etc.).

        If no organising actions are available None is returned.
        """
        context = aq_inner(self.context)
        context_url = context.absolute_url()
        is_root = ISiteRoot.providedBy(context)
        pa = getToolByName(context, 'portal_actions')
        actions = pa.listActions(object=context,
                                 categories=('folder_buttons', ),
                                 ignore_categories=None)
        ec = pa._getExprContext(context)
        actions = [ActionInfo(action, ec) for action in actions]

        menu = {"title": _("menu_organise", default="Organise")}
        children = menu["children"] = []
        for a in actions:
            if a['visible'] and a['allowed'] \
                    and a['available'] and not is_root:

                if a['id'] == 'copy' and context.cb_isCopyable():
                    children.append({
                        "title": _("menu_copy", default="Copy"),
                        "url": "%s/@@copy" % context_url
                    })

                elif a['id'] == 'cut' and context.cb_isMoveable():
                    children.append({
                        "title": _("menu_cut", default="Cut"),
                        "url": "%s/@@cut" % context_url
                    })

                elif a['id'] == 'paste' and ICopyContainer.providedBy(context):
                    children.append({
                        "title": _("menu_paste", default="Paste"),
                        "url": "%s/@@paste" % context_url
                    })
                elif a['id'] == 'delete':
                    children.append({
                        "title": _("menu_delete", default="Delete"),
                        "url": "%s/@@delete" % context_url
                    })
        if children:
            return menu
Example #28
0
    def post(self):
        action=self.request.form.get("action", "cancel")
        context=aq_inner(self.context)
        flash=IStatusMessage(self.request).addStatusMessage

        if action=="cancel":
            flash(_("message_delete_cancel", default=u"Deletion cancelled"), "notice")
            self.request.response.redirect(context.absolute_url())
        elif action=="delete":
            authenticator=getMultiAdapter((self.context, self.request), name=u"authenticator")
            if not authenticator.verify():
                raise zExceptions.Unauthorized

            container=aq_parent(context)
            container.manage_delObjects([context.getId()])
            flash(_("message_delete_success", default=u"Object removed"), "success")
            self.request.response.redirect(container.absolute_url())
Example #29
0
class IContact(model.Schema):
    name = schema.TextLine(title=_("label_your_name", default="Your name"),
                           required=True)
    directives.widget(name="plonetheme.nuplone.browser.contact.TextSpan7")

    email = schema.ASCIILine(title=_("label_email", default="Email address"),
                             required=True)
    directives.widget(email="plonetheme.nuplone.browser.contact.TextSpan7")

    subject = schema.TextLine(title=_("label_subject", default="Subject"),
                              required=True)
    directives.widget(subject="plonetheme.nuplone.browser.contact.TextSpan7")

    message = schema.Text(title=_("label_contact_text",
                                  default="Your message"),
                          required=True)
    directives.widget(
        message="plonetheme.nuplone.browser.contact.TextLines4Rows")
Example #30
0
    def render(self):
        context=aq_inner(self.context)
        container=aq_parent(context)
        if not context.cb_isCopyable():
            raise zExceptions.Unauthorized

        container.manage_copyObjects(context.getId(), self.request)
        flash=IStatusMessage(self.request).addStatusMessage
        flash(_(u"message_copy_sucess", default=u"Copied"), "notice")
        self.request.response.redirect(context.absolute_url())
Example #31
0
    def handleSend(self, action):
        flash=IStatusMessage(self.request).addStatusMessage
        data, errors=self.extractData()
        if errors:
            self.status=self.formErrorsMessage
            return

        pas=getToolByName(self.context, "acl_users")
        mt=getToolByName(self.context, "portal_membership")
        user=pas.getUser(data["login"])
        if user is None:
            log.info("Password reset request for unknown user %s" % data["login"])
            flash(_("error_pwreset_unknown_user", default=u"Unknown username."), "error")
            return

        member=mt.getMemberById(user.getId())
        email_address=member.getProperty("email")
        if not email_address:
            flash(_("error_pwreset_no_email", default=u"No known email address for this user."), "error")
            return

        ppr=getToolByName(self.context, "portal_password_reset")
        reset=ppr.requestReset(user.getId())
        portal_url=aq_inner(self.context).absolute_url()
        reset_url="%s/@@reset-password/%s" % (portal_url, reset["randomstring"])

        data["site"]=self.context.title
        subject=_(u"password_reset_subject", default=u"Password reset for ${site}", mapping=data)
        subject=translate(subject, context=self.request)
        body=self.email_template(reset_url=reset_url, login=data["login"], site=self.context.title)

        email=createEmailTo(self.context.email_from_name,
                            self.context.email_from_address,
                            None, email_address,
                            subject, body)

        mh=getToolByName(self.context, "MailHost")
        try:
            mh.send(email)
        except MailHostError, e:
            log.error("MailHost error sending password reset form to %s: %s", email_address, e)
            flash(_(u"error_contactmail", u"An error occured while processing your contact request. Please try again later."), "error")
            return
Example #32
0
    def render(self):
        context=aq_inner(self.context)
        flash=IStatusMessage(self.request).addStatusMessage
        if not context.cb_dataValid():
            raise zExceptions.Unauthorized

        try:
            context.manage_pasteObjects(REQUEST=self.request)
            flash(_("message_paste_succes", default=u"Pasted"), "success")
        except ConflictError:
            raise
        except ValueError:
            flash(_("message_paste_valueerror", default=u"You can not paste the copied data here."), "error")
        except zExceptions.Unauthorized:
            flash(_("message_paste_unauthorized", default=u"You are not allowed to paste here."), "error")
        except CopyError, e:
            if "Insufficient Privileges" in e.message:
                raise zExceptions.Unauthorized
            flash(_("message_paste_generic", default=u"No valid data found in the clipboard."), "error")
Example #33
0
class ContactForm(form.SchemaForm):
    grok.context(ISiteRoot)
    grok.name("contact")
    grok.require("zope2.Public")

    ignoreContext = True
    schema = IContact
    label = _("header_contact", default="Contact")
    default_fieldset_label = None

    @buttonAndHandler(_("button_send", default="Send"), name="send")
    def handleSend(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        appconfig = queryUtility(IAppConfig) or {}
        siteconfig = appconfig.get("site", {})

        subject=_("contact_mail_subject", default="Contact request: ${subject}", mapping=data)
        subject=translate(subject, context=self.request)

        email=createEmailTo(data["name"], data["email"],
                            siteconfig.get("contact.name", self.context.email_from_name),
                            siteconfig.get("contact.email", self.context.email_from_address),
                            subject,
                            data["message"])
        mh=getToolByName(self.context, "MailHost")
        flash=IStatusMessage(self.request).addStatusMessage
        try:
            mh.send(email)
        except MailHostError as e:
            log.error("MailHost error sending contact form for %s: %s", data["email"], e)
            flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error")
            return
        except socket.error as e:
            log.error("Socket error sending contact form for %s: %s", data["email"], e[1])
            flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error")
            return

        flash(_("Message sent"), "success")
        self.request.response.redirect(aq_inner(self.context).absolute_url())
Example #34
0
    def __call__(self):
        context = aq_inner(self.context)
        container = aq_parent(context)
        if not context.cb_isCopyable():
            raise zExceptions.Unauthorized

        container.manage_copyObjects(context.getId(), self.request)
        flash = IStatusMessage(self.request).addStatusMessage
        flash(_("message_copy_sucess", default="Copied"), "notice")
        self.request.response.redirect(context.absolute_url())
Example #35
0
    def render(self):
        context=aq_inner(self.context)
        flash=IStatusMessage(self.request).addStatusMessage
        if not context.cb_dataValid():
            raise zExceptions.Unauthorized

        try:
            context.manage_pasteObjects(REQUEST=self.request)
            flash(_("message_paste_succes", default="Pasted"), "success")
        except ConflictError:
            raise
        except ValueError:
            flash(_("message_paste_valueerror", default="You can not paste the copied data here."), "error")
        except zExceptions.Unauthorized:
            flash(_("message_paste_unauthorized", default="You are not allowed to paste here."), "error")
        except CopyError as e:
            if "Insufficient Privileges" in e.message:
                raise zExceptions.Unauthorized
            flash(_("message_paste_generic", default="No valid data found in the clipboard."), "error")

        self.request.response.redirect(context.absolute_url())
Example #36
0
    def __call__(self):
        flash = IStatusMessage(self.request).addStatusMessage
        if setLanguage(self.request, self.context):
            flash(_("message_switch_language", default="Language updated"),
                  "success")
        else:
            flash(
                _(
                    "message_switch_language_error",
                    default="Failed to switch language",
                ),
                "error",
            )

        next_url = self.request.get("came_from")
        if not next_url:
            next_url = self.request.environ.get("HTTP_REFERER")
        put = getToolByName(self.context, "portal_url")
        if not next_url or not put.isURLInPortal(next_url):
            next_url = aq_inner(self.context).absolute_url()

        self.request.response.redirect(next_url)
Example #37
0
 def factories(self):
     """Helper method to generate the menu items for creating new content.
     If no content can be created None is returned.
     """
     menu = {"title": _("menu_add_new", default=u"Add new")}
     children = menu["children"] = []
     actions = getFactoriesInContext(self.context)
     actions.sort(key=lambda x: x.title)
     for action in actions:
         children.append({"title": action.title, "description": action.description, "url": action.url})
     if children:
         return menu
     else:
         return None
Example #38
0
    def actions(self):
        """Helper method to generate the contents for the actions menu."""
        menu = {"title": _("menu_actions", default="Actions")}
        children = menu["children"] = []
        submenu = self.factories()
        if submenu:
            children.append(submenu)
        submenu = self.organise()
        if submenu:
            children.append(submenu)

        if children:
            return menu
        else:
            return None
Example #39
0
    def handleChange(self, action):
        data, errors=self.extractData()
        if errors:
            self.status=self.formErrorsMessage
            return
        
        flash=IStatusMessage(self.request).addStatusMessage
        pas=getToolByName(self.context, "acl_users")
        ppr=getToolByName(self.context, "portal_password_reset")
        user=pas.getUser(data["login"])
        ppr.resetPassword(user.getId(), self.randomstring, data["password"])

        flash(_("password_reset", u"Your password has been reset."), "success")
        portal_url=aq_inner(self.context).absolute_url()
        self.request.response.redirect("%s/@@login" % portal_url)
Example #40
0
    def actions(self):
        """Helper method to generate the contents for the actions menu.
        """
        menu = {"title": _("menu_actions", default=u"Actions")}
        children = menu["children"] = []
        submenu = self.factories()
        if submenu:
            children.append(submenu)
        submenu = self.organise()
        if submenu:
            children.append(submenu)

        if children:
            return menu
        else:
            return None
Example #41
0
    def handleSend(self, action):
        flash=IStatusMessage(self.request).addStatusMessage
        data, errors=self.extractData()
        if errors:
            self.status=self.formErrorsMessage
            return

        pas=getToolByName(self.context, "acl_users")
        mt=getToolByName(self.context, "portal_membership")
        user=pas.getUser(data["login"])
        if user is None:
            log.info("Password reset request for unknown user %s" % data["login"])
            flash(_("error_pwreset_unknown_user", default="Unknown username."), "error")
            return

        member=mt.getMemberById(user.getId())
        email_address=member.getProperty("email")
        if not email_address:
            flash(_("error_pwreset_no_email", default="No known email address for this user."), "error")
            return

        ppr=getToolByName(self.context, "portal_password_reset")
        reset=ppr.requestReset(user.getId())
        portal_url=aq_inner(self.context).absolute_url()
        reset_url="%s/@@reset-password/%s" % (portal_url, reset["randomstring"])

        data["site"]=self.context.title
        subject=_("password_reset_subject", default="Password reset for ${site}", mapping=data)
        subject=translate(subject, context=self.request)
        body=self.email_template(reset_url=reset_url, login=data["login"], site=self.context.title)

        email=createEmailTo(self.context.email_from_name,
                            self.context.email_from_address,
                            None, email_address,
                            subject, body)

        mh=getToolByName(self.context, "MailHost")
        try:
            mh.send(email)
        except MailHostError as e:
            log.error("MailHost error sending password reset form to %s: %s", email_address, e)
            flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error")
            return
        except socket.error as e:
            log.error("Socket error sending password reset form to: %s", email_address, e[1])
            flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error")
            return

        flash(_("info_pwrest_mail_sent",
            default="An email with instructions for resetting your password has been sent."),
            "success")
        self.request.response.redirect(portal_url)
Example #42
0
 def factories(self):
     """Helper method to generate the menu items for creating new content.
     If no content can be created None is returned.
     """
     menu = {"title": _("menu_add_new", default="Add new")}
     children = menu["children"] = []
     actions = getFactoriesInContext(self.context)
     actions.sort(key=lambda x: x.title)
     for action in actions:
         children.append({
             "title": action.title,
             "description": action.description,
             "url": action.url,
         })
     if children:
         return menu
     else:
         return None
Example #43
0
            self.status = self.formErrorsMessage
            return

        appconfig = queryUtility(IAppConfig) or {}
        siteconfig = appconfig.get("site", {})

        subject=_(u"contact_mail_subject", default=u"Contact request: ${subject}", mapping=data)
        subject=translate(subject, context=self.request)

        email=createEmailTo(data["name"], data["email"],
                            siteconfig.get("contact.name", self.context.email_from_name),
                            siteconfig.get("contact.email", self.context.email_from_address),
                            subject,
                            data["message"])
        mh=getToolByName(self.context, "MailHost")
        flash=IStatusMessage(self.request).addStatusMessage
        try:
            mh.send(email)
        except MailHostError, e:
            log.error("MailHost error sending contact form for %s: %s", data["email"], e)
            flash(_(u"error_contactmail", u"An error occured while processing your contact request. Please try again later."), "error")
            return
        except socket.error, e:
            log.error("Socket error sending contact form for %s: %s", data["email"], e[1])
            flash(_(u"error_contactmail", u"An error occured while processing your contact request. Please try again later."), "error")
            return

        flash(_(u"Message sent"), "success")
        self.request.response.redirect(aq_inner(self.context).absolute_url())

Example #44
0
class IRequestPasswordReset(form.Schema):
    login = schema.TextLine(
            title=_("label_login", default="Login"),
            required=True)
Example #45
0
                            None, email_address,
                            subject, body)

        mh=getToolByName(self.context, "MailHost")
        try:
            mh.send(email)
        except MailHostError, e:
            log.error("MailHost error sending password reset form to %s: %s", email_address, e)
            flash(_(u"error_contactmail", u"An error occured while processing your contact request. Please try again later."), "error")
            return
        except socket.error, e:
            log.error("Socket error sending password reset form to: %s", email_address, e[1])
            flash(_(u"error_contactmail", u"An error occured while processing your contact request. Please try again later."), "error")
            return

        flash(_("info_pwrest_mail_sent",
            default=u"An email with instructions for resetting your password has been sent."),
            "success")
        self.request.response.redirect(portal_url)



class PasswordReset(form.SchemaForm):
    grok.context(ISiteRoot)
    grok.name("reset-password")
    grok.require("zope2.Public")

    randomstring = None

    ignoreContext = True
    schema = IPasswordReset
    label = _(u"header_password_reset", default=u"Reset password")
Example #46
0
class RequestPasswordForm(form.SchemaForm):
    grok.context(ISiteRoot)
    grok.name("request-password-reset")
    grok.require("zope2.Public")

    email_template = ViewPageTemplateFile("templates/pwreset-email.pt")

    ignoreContext = True
    schema = IRequestPasswordReset
    label = _("header_password_reset_request", default="Reset password")
    default_fieldset_label = None
    description = _("intro_password_reset_request",
            default="For security reasons, we store your password encrypted, "
                    "and cannot mail it to you. If you would like to reset "
                    "your password, fill out the form below and we will send "
                    "you an email at the address you gave when you registered "
                    "to start the process of resetting your password.")


    @buttonAndHandler(_("button_send", default="Send"), name="send")
    def handleSend(self, action):
        flash=IStatusMessage(self.request).addStatusMessage
        data, errors=self.extractData()
        if errors:
            self.status=self.formErrorsMessage
            return

        pas=getToolByName(self.context, "acl_users")
        mt=getToolByName(self.context, "portal_membership")
        user=pas.getUser(data["login"])
        if user is None:
            log.info("Password reset request for unknown user %s" % data["login"])
            flash(_("error_pwreset_unknown_user", default="Unknown username."), "error")
            return

        member=mt.getMemberById(user.getId())
        email_address=member.getProperty("email")
        if not email_address:
            flash(_("error_pwreset_no_email", default="No known email address for this user."), "error")
            return

        ppr=getToolByName(self.context, "portal_password_reset")
        reset=ppr.requestReset(user.getId())
        portal_url=aq_inner(self.context).absolute_url()
        reset_url="%s/@@reset-password/%s" % (portal_url, reset["randomstring"])

        data["site"]=self.context.title
        subject=_("password_reset_subject", default="Password reset for ${site}", mapping=data)
        subject=translate(subject, context=self.request)
        body=self.email_template(reset_url=reset_url, login=data["login"], site=self.context.title)

        email=createEmailTo(self.context.email_from_name,
                            self.context.email_from_address,
                            None, email_address,
                            subject, body)

        mh=getToolByName(self.context, "MailHost")
        try:
            mh.send(email)
        except MailHostError as e:
            log.error("MailHost error sending password reset form to %s: %s", email_address, e)
            flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error")
            return
        except socket.error as e:
            log.error("Socket error sending password reset form to: %s", email_address, e[1])
            flash(_("error_contactmail", "An error occured while processing your contact request. Please try again later."), "error")
            return

        flash(_("info_pwrest_mail_sent",
            default="An email with instructions for resetting your password has been sent."),
            "success")
        self.request.response.redirect(portal_url)
Example #47
0
class ContactForm(AutoExtensibleForm, form.Form):

    ignoreContext = True
    schema = IContact
    label = _("header_contact", default="Contact")
    default_fieldset_label = None

    @property
    def email_from_name(self):
        return api.portal.get_registry_record("plone.email_from_name")

    @property
    def email_from_address(self):
        return api.portal.get_registry_record("plone.email_from_address")

    @buttonAndHandler(_("button_send", default="Send"), name="send")
    def handleSend(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        subject = _(
            "contact_mail_subject",
            default="Contact request: ${subject}",
            mapping=data,
        )
        subject = translate(subject, context=self.request)

        email = createEmailTo(
            data["name"],
            data["email"],
            self.email_from_name,
            self.email_from_address,
            subject,
            data["message"],
        )
        mh = getToolByName(self.context, "MailHost")
        flash = IStatusMessage(self.request).addStatusMessage
        try:
            mh.send(email)
        except MailHostError as e:
            log.error("MailHost error sending contact form for %s: %s",
                      data["email"], e)
            flash(
                _(
                    "error_contactmail",
                    "An error occured while processing your contact request. Please try again later.",  # noqa: E501
                ),
                "error",
            )
            return
        except socket.error as e:
            log.error("Socket error sending contact form for %s: %s",
                      data["email"], e[1])
            flash(
                _(
                    "error_contactmail",
                    "An error occured while processing your contact request. Please try again later.",  # noqa: E501
                ),
                "error",
            )
            return

        flash(_("Message sent"), "success")
        self.request.response.redirect(aq_inner(self.context).absolute_url())