Exemple #1
0
 def approve(self):
     self.in_moderation_queue = False
     author_name, author_address = parseaddr(self.mime_message['From'])
     self.group.add_email_to_whitelist(author_address)
     from ututi.model.events import ModeratedPostCreated
     event = meta.Session.query(ModeratedPostCreated).filter_by(message_id=self.id).one()
     meta.Session.delete(event)
     meta.Session.commit()
     self.send(self.group.recipients_mailinglist())
Exemple #2
0
 def _ml_event_data(self, evt):
     if evt.event_type in ['mailinglist_post_created', 'moderated_post_created']:
         evt['ml_message'] = email.message_from_string(evt.ml_original, UtutiEmail).getBody()
         if evt.author_id is not None:
             evt['ml_author'] = evt.author_id
             evt['ml_author_logo_link'] = url(controller='user', action='logo', width=50, id=evt.author_id)
         else:
             mimemsg = mimetools.Message(StringIO(evt.ml_original))
             u_name, u_email = parseaddr(decode_and_join_header(mimemsg['From']))
             evt['ml_author'] = AnonymousUser(u_name, u_email)
             evt['ml_author_logo_link'] = evt.ml_author.url(action='logo', width=50)
Exemple #3
0
    def fromMessageText(cls, message_text, force=False):
        message = cls.parseMessage(message_text)
        message_id = message.getMessageId()
        g = message.getGroup()

        #use the numerical group id
        if g is None:
            return

        group_id = g.id

        if cls.get(message_id, group_id):
            raise MessageAlreadyExists(message_id, group_id)

        mime_message = mimetools.Message(StringIO(message_text))
        author_name, author_address = parseaddr(mime_message['From'])
        author = User.get_global(author_address)
        in_moderation_queue = False

        whitelist = [i.email for i in g.whitelist] + [
            config.get('ututi_email_from', '*****@*****.**')]
        if not (author_address in whitelist or
                author is not None and g.is_member(author)
                or force):
            if g.mailinglist_moderated:
                in_moderation_queue = True
            else:
                return # Bounce

        reply_to_message_id = message.getHeader('in-reply-to')
        reply_to = cls.get(reply_to_message_id, group_id)

        # XXX Hacky way to find messages this message might be a reply to
        if not reply_to:
            sbj = message.getSubject()
            parts = sbj.split(':')
            if len(parts) > 1:
                real_sbj = parts[-1].strip()
                reply_to = meta.Session.query(cls).filter_by(subject=real_sbj,
                                                             group_id=group_id).first()
        return cls(message_text,
                   message_id,
                   group_id,
                   message.getSubject(),
                   message.getDate(),
                   reply_to,
                   in_moderation_queue)
Exemple #4
0
 def getAuthor(self):
     author_name, author_address = parseaddr(self.getHeader("from"))
     return User.get_global(author_address)
Exemple #5
0
 def getAuthor(self):
     author_name, author_address = parseaddr(self.mime_message['From'])
     return User.get_global(author_address)
Exemple #6
0
 def author_or_anonymous(self):
     if self.author:
         return self.author
     else:
         name, email = parseaddr(decode_and_join_header(self.mime_message['From']))
         return AnonymousUser(name, email)