From d9cb6c41165a0f149182aa7cd7f061497d0a69c6 Mon Sep 17 00:00:00 2001 From: Juan Castro Date: Thu, 28 Dec 2017 19:09:48 -0600 Subject: [PATCH] AN-66 - adding dual aol pattern for verizion.net - Inversing the logic to only filter out verizon.net for aol pattern matching - updating verbiage --- flanker/addresslib/plugins/aol.py | 12 +++++++++ tests/addresslib/validator_test.py | 41 ++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/flanker/addresslib/plugins/aol.py b/flanker/addresslib/plugins/aol.py index 4555e2ac..6a528749 100644 --- a/flanker/addresslib/plugins/aol.py +++ b/flanker/addresslib/plugins/aol.py @@ -41,15 +41,23 @@ \_ ''', re.MULTILINE | re.VERBOSE) +AOL_UNMANAGED = ['verizon.net'] + def validate(email_addr): # Setup for handling EmailAddress type instead of literal string localpart = email_addr.mailbox + unmanaged = unmanaged_email(email_addr.hostname) # check string exists and not empty if not localpart: return False + # Unmanaged is now a list of providers whom patterns/rules are unknown + # thus any hostname part matching will return without rule adherence. + if unmanaged: + return True + # length check l = len(localpart) if l < 3 or l > 32: @@ -90,3 +98,7 @@ def _validate(localpart): return False return True + + +def unmanaged_email(hostname): + return hostname in AOL_UNMANAGED diff --git a/tests/addresslib/validator_test.py b/tests/addresslib/validator_test.py index eaab4c5a..1c3e919a 100644 --- a/tests/addresslib/validator_test.py +++ b/tests/addresslib/validator_test.py @@ -293,3 +293,44 @@ def test_mx_yahoo_manage_flag_toggle(): addr_obj = address.parse(mailbox) managed = validate.yahoo.managed_email(addr_obj.hostname) assert_equal(managed, False) + + +@patch('flanker.addresslib.validate.connect_to_mail_exchanger') +@patch('flanker.addresslib.validate.lookup_domain') +def test_mx_aol_dual_lookup(ld, cmx): + ld.return_value = ['mailin-01.mx.aol.com', 'mailin-02.mx.aol.com'] + cmx.return_value = 'mailin-03.mx.aol.com' + + # Invalidate managed email response out of pattern + mailbox = '1testuser@aol.com' + addr = address.validate_address(mailbox) + assert_equal(type(addr), type(None)) + + # Same test but with validate_list + addr = address.validate_list([mailbox]) + expected = 'flanker.addresslib.address:' + assert_equal(addr, []) + + # Allow AOL MX unmanaged mailboxes to pass remaining patterns + mailbox = '8testuser@verizon.net' + addr = address.validate_address(mailbox) + assert_equal(addr, mailbox) + + # Same test but with validate_list + expected = 'flanker.addresslib.address:' + addr = address.validate_list([mailbox]) + assert_equal(addr, mailbox) + + +def test_mx_aol_manage_flag_toggle(): + # Just checking if the domain provided from the sub is managed + mailbox = '1testuser@aol.com' + addr_obj = address.parse(mailbox) + unmanaged = validate.aol.unmanaged_email(addr_obj.hostname) + assert_equal(unmanaged, False) + + # Same but inversed, unmanaged aol mailbox + mailbox = '1testuser@verizon.net' + addr_obj = address.parse(mailbox) + unmanaged = validate.aol.unmanaged_email(addr_obj.hostname) + assert_equal(unmanaged, True)