Kung Fu Kung Fu

Fujian White Crane Kung Fu

Zope Zope

What I have and am doing with Zope

Photos Photos

Photoalbum, both old and new.

Receptsamlingen Receptsamlingen

In Swedish only. About my "Collection of Recipes" website.

Contact me Contact me

My contact details and how to contact me.

  Mobile version of this page Mobile version of this page


 

Whitelist blacklist logic

http://www.peterbe.com/plog/whitelis...c/whiteblack_list_example.py

whitelist, blacklist, acceptoriginatoremail, blacklisted, whitelisted, bill gates

2nd of November 2005

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
                 else:
                     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?


Comment

djo - 2nd November 2005  [«« Reply to this]
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 - 2nd November 2005   [«« Reply to this]
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 - 2nd November 2005  [«« Reply to this]
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 - 2nd November 2005   [«« Reply to this]
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.
djo - 2nd November 2005  [«« Reply to this]
Peter - if you set default_accept to FALSE, do you need the blacklist at all any more?
Peter Bengtsson - 2nd November 2005   [«« Reply to this]
Again a very good point. No, if you set default_accept to false, then the blacklist is useless.
Mohamed - 23rd April 2006  [«« Reply to this]
may you Assist me Please
 
Name:
Email:
hide my email address.

Your email address will be encoded to prevent email-extraction spiders from reading it so you won't get spammed if you decide to show your email address.