Whitelist blacklist logic

02 November 2005   7 comments   Python


Powered by Fusion×

Tonight I need a little function that let me define a list of whitelisted email address and a list of blacklisted email address. This is then "merged" in a function called acceptOriginatorEmail(emailaddress) which is used to see if a particular email address is acceptable.

I've never written something like this before so I had to reinvent the wheel and guess my way towards a solution. My assumptions are that you start with whitelist and return True on a match on the blacklist, then you check against the blacklist and return False on a match and default to True if no match is made.

This makes it possible to define which email addresses should be accepted and which ones should be rejected like this:

whitelist = ('*@peterbe.com', 'bill.gates@microsoft.com')
blacklist = ('*@microsoft.com')

Here's the code which does the crucial stuff:

def acceptOriginatorEmail(self, email, default_accept=True):
    """ return true if this email is either whitelisted or 
    not blacklisted """
    whitelist = self.getWhitelistEmails()
    blacklist = self.getBlacklistEmails()

    # note the order 
    for reject, emaillist in ([False, whitelist], [True, blacklist]):
        for okpattern in emaillist:
            if re.findall(okpattern.replace('*','\S+'), email, re.I):
                # match!
                if reject:
                    return False
                    return True

    # default is to accept all
    return default_accept

Download whiteblack_list_example.py to see it in action.

What do you think people? Does it make any sense?


Suggestion: this is a function for white/blacklisting strings - there's nothing email address-specific in here. I'd rename it to match the more general case.
Peter Bengtsson
Very good point. I was too simpleminded at that late hour. The function is extracted from a class which deals with email addresses and stuff so over there it made sense.
Sylvain Hellegouarch
Interesting but then it depends on you email adresses are entered to your system.

If one can enter whatever adress, what's the point? :)

I could have put bill.gates@microsoft.com into this comment email adress. How could you have prevented me from it?
Peter Bengtsson
The point? If you don't like the default behaviour set the default_accept parameter to False or look at my second example in the .py file.
Peter - if you set default_accept to FALSE, do you need the blacklist at all any more?
Peter Bengtsson
Again a very good point. No, if you set default_accept to false, then the blacklist is useless.
may you Assist me Please

Your email will never ever be published

Related posts

www aliases set up 01 November 2005
Screencasting test 05 November 2005
Related by keywords:
People's reactions to Gates and Buffet's $600 billion challenge 17 June 2010