~mailman-coders/mailman/2.1

« back to all changes in this revision

Viewing changes to Mailman/MailList.py

  • Committer: Mark Sapiro
  • Date: 2020-01-10 01:00:40 UTC
  • Revision ID: mark@msapiro.net-20200110010040-h4hg0p7arb4k3m17
Implement REFUSE_SECOND_PENDING setting to prevent multiple pending subscribes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
833
833
    #
834
834
    # Membership management front-ends and assertion checks
835
835
    #
 
836
    def CheckPending(self, email):
 
837
        """Check if there is already an unexpired pending subscription for
 
838
        this email.
 
839
        """
 
840
        if not mm_cfg.REFUSE_SECOND_PENDING:
 
841
            return False
 
842
        pends = self._Pending__load()
 
843
        # Save and reload the db to evict expired pendings.
 
844
        self._Pending__save(pends)
 
845
        pends = self._Pending__load()
 
846
        for k, v in pends.items():
 
847
            if k in ('evictions', 'version'):
 
848
                continue
 
849
            op, data = v
 
850
            if (op == Pending.SUBSCRIPTION and
 
851
                    data.address.lower() == email.lower()):
 
852
                return True
 
853
        return False
 
854
 
836
855
    def InviteNewMember(self, userdesc, text=''):
837
856
        """Invite a new member to the list.
838
857
 
919
938
        Utils.ValidateEmail(email)
920
939
        if self.isMember(email):
921
940
            raise Errors.MMAlreadyAMember, email
 
941
        if self.CheckPending(email):
 
942
            raise Errors.MMAlreadyPending, email
922
943
        if email.lower() == self.GetListEmail().lower():
923
944
            # Trying to subscribe the list to itself!
924
945
            raise Errors.MMBadEmailError