def check(self, mlist, msg, msgdata):
     """See `IRule`."""
     # The MemberModeration rule misses unconditionally if any of the
     # senders are banned.
     ban_manager = IBanManager(mlist)
     for sender in msg.senders:
         if ban_manager.is_banned(sender):
             return False
     member = _find_sender_member(mlist, msg)
     if member is None:
         return False
     action = (mlist.default_member_action
               if member.moderation_action is None else
               member.moderation_action)
     if action is Action.defer:
         # The regular moderation rules apply.
         return False
     elif action is not None:
         # We must stringify the moderation action so that it can be
         # stored in the pending request table.
         msgdata['moderation_action'] = action.name
         msgdata['moderation_sender'] = sender
         msgdata.setdefault('moderation_reasons', []).append(
             # This will get translated at the point of use.
             'The message comes from a moderated member')
         return True
     # The sender is not a member so this rule does not match.
     return False
 def check(self, mlist, msg, msgdata):
     """See `IRule`."""
     ban_manager = IBanManager(mlist)
     user_manager = getUtility(IUserManager)
     # The NonmemberModeration rule misses unconditionally if any of the
     # senders are banned.
     for sender in msg.senders:
         if ban_manager.is_banned(sender):
             return False
     # Every sender email must be a member or nonmember directly.  If it is
     # neither, make the email a nonmembers.
     for sender in msg.senders:
         if (mlist.members.get_member(sender) is None
                 and mlist.nonmembers.get_member(sender) is None):  # noqa
             # The email must already be registered, since this happens in
             # the incoming runner itself.
             address = user_manager.get_address(sender)
             assert address is not None, (
                 'Posting address is not registered: {}'.format(sender))
             mlist.subscribe(address, MemberRole.nonmember)
     # Check to see if any of the sender emails is already a member.  If
     # so, then this rule misses.
     member = _find_sender_member(mlist, msg)
     if member is not None:
         return False
     # Do nonmember moderation check.
     for sender in msg.senders:
         nonmember = mlist.nonmembers.get_member(sender)
         assert nonmember is not None, (
             "sender didn't get subscribed as a nonmember".format(sender))
         # Check the '*_these_nonmembers' properties first.  XXX These are
         # legacy attributes from MM2.1; their database type is 'pickle' and
         # they should eventually get replaced.
         for action in ('accept', 'hold', 'reject', 'discard'):
             legacy_attribute_name = '{}_these_nonmembers'.format(action)
             checklist = getattr(mlist, legacy_attribute_name)
             for addr in checklist:
                 if ((addr.startswith('^') and re.match(addr, sender))
                         or addr == sender):  # noqa: W503
                     # The reason will get translated at the point of use.
                     reason = 'The sender is in the nonmember {} list'
                     _record_action(msgdata, action, sender,
                                    reason.format(action))
                     return True
         action = (mlist.default_nonmember_action
                   if nonmember.moderation_action is None else
                   nonmember.moderation_action)
         if action is Action.defer:
             # The regular moderation rules apply.
             return False
         elif action is not None:
             # We must stringify the moderation action so that it can be
             # stored in the pending request table.
             #
             # The reason will get translated at the point of use.
             reason = 'The message is not from a list member'
             _record_action(msgdata, action.name, sender, reason)
             return True
     # The sender must be a member, so this rule does not match.
     return False
Exemple #3
0
 def check(self, mlist, msg, msgdata):
     """See `IRule`."""
     ban_manager = IBanManager(mlist)
     for sender in msg.senders:
         if ban_manager.is_banned(sender):
             return True
     return False
Exemple #4
0
 def check(self, mlist, msg, msgdata):
     """See `IRule`."""
     # The MemberModeration rule misses unconditionally if any of the
     # senders are banned.
     ban_manager = IBanManager(mlist)
     for sender in msg.senders:
         if ban_manager.is_banned(sender):
             return False
     member = _find_sender_member(mlist, msg)
     if member is None:
         return False
     action = (mlist.default_member_action
               if member.moderation_action is None
               else member.moderation_action)
     if action is Action.defer:
         # The regular moderation rules apply.
         return False
     elif action is not None:
         # We must stringify the moderation action so that it can be
         # stored in the pending request table.
         msgdata['moderation_action'] = action.name
         msgdata['moderation_sender'] = sender
         msgdata.setdefault('moderation_reasons', []).append(
             # This will get translated at the point of use.
             'The message comes from a moderated member')
         return True
     # The sender is not a member so this rule does not match.
     return False
Exemple #5
0
 def check(self, mlist, msg, msgdata):
     """See `IRule`."""
     ban_manager = IBanManager(mlist)
     user_manager = getUtility(IUserManager)
     # The NonmemberModeration rule misses unconditionally if any of the
     # senders are banned.
     for sender in msg.senders:
         if ban_manager.is_banned(sender):
             return False
     # Every sender email must be a member or nonmember directly.  If it is
     # neither, make the email a nonmembers.
     for sender in msg.senders:
         if (mlist.members.get_member(sender) is None
                 and mlist.nonmembers.get_member(sender) is None):   # noqa
             # The email must already be registered, since this happens in
             # the incoming runner itself.
             address = user_manager.get_address(sender)
             assert address is not None, (
                 'Posting address is not registered: {}'.format(sender))
             mlist.subscribe(address, MemberRole.nonmember)
     # Check to see if any of the sender emails is already a member.  If
     # so, then this rule misses.
     member = _find_sender_member(mlist, msg)
     if member is not None:
         return False
     # Do nonmember moderation check.
     for sender in msg.senders:
         nonmember = mlist.nonmembers.get_member(sender)
         assert nonmember is not None, (
             "sender didn't get subscribed as a nonmember".format(sender))
         # Check the '*_these_nonmembers' properties first.  XXX These are
         # legacy attributes from MM2.1; their database type is 'pickle' and
         # they should eventually get replaced.
         for action in ('accept', 'hold', 'reject', 'discard'):
             legacy_attribute_name = '{}_these_nonmembers'.format(action)
             checklist = getattr(mlist, legacy_attribute_name)
             for addr in checklist:
                 if ((addr.startswith('^') and re.match(addr, sender))
                         or addr == sender):     # noqa
                     # The reason will get translated at the point of use.
                     reason = 'The sender is in the nonmember {} list'
                     _record_action(msgdata, action, sender,
                                    reason.format(action))
                     return True
         action = (mlist.default_nonmember_action
                   if nonmember.moderation_action is None
                   else nonmember.moderation_action)
         if action is Action.defer:
             # The regular moderation rules apply.
             return False
         elif action is not None:
             # We must stringify the moderation action so that it can be
             # stored in the pending request table.
             #
             # The reason will get translated at the point of use.
             reason = 'The message is not from a list member'
             _record_action(msgdata, action.name, sender, reason)
             return True
     # The sender must be a member, so this rule does not match.
     return False
 def check(self, mlist, msg, msgdata):
     """See `IRule`."""
     ban_manager = IBanManager(mlist)
     for sender in msg.senders:
         if ban_manager.is_banned(sender):
             msgdata['moderation_sender'] = sender
             with _.defer_translation():
                 # This will be translated at the point of use.
                 msgdata.setdefault('moderation_reasons', []).append(
                     (_('Message sender {} is banned from this list'),
                      sender))
             return True
     return False