Barry Warsaw pushed to branch master at mailman / Mailman

Commits:
cd5607de by Aurélien Bompard at 2016-01-20T10:24:19+01:00
Give a meaningful message when a banned member tries to join

- - - - -
a33f1c52 by Aurélien Bompard at 2016-01-20T10:33:22+01:00
Also add a test for the global ban list

- - - - -


2 changed files:

- src/mailman/rest/members.py
- src/mailman/rest/tests/test_membership.py


Changes:

=====================================
src/mailman/rest/members.py
=====================================
--- a/src/mailman/rest/members.py
+++ b/src/mailman/rest/members.py
@@ -276,6 +276,9 @@ class AllMembers(_MemberBase):
             except MissingPreferredAddressError:
                 bad_request(response, b'User has no preferred address')
                 return
+            except MembershipIsBannedError:
+                bad_request(response, b'Membership is banned')
+                return
             if token is None:
                 assert token_owner is TokenOwner.no_one, token_owner
                 # The subscription completed.  Let's get the resulting member


=====================================
src/mailman/rest/tests/test_membership.py
=====================================
--- a/src/mailman/rest/tests/test_membership.py
+++ b/src/mailman/rest/tests/test_membership.py
@@ -29,6 +29,7 @@ import unittest
 from mailman.app.lifecycle import create_list
 from mailman.config import config
 from mailman.database.transaction import transaction
+from mailman.interfaces.bans import IBanManager
 from mailman.interfaces.member import DeliveryMode, MemberRole
 from mailman.interfaces.usermanager import IUserManager
 from mailman.testing.helpers import (
@@ -359,6 +360,30 @@ class TestMembership(unittest.TestCase):
         self.assertEqual(headers.status, 204)
         self.assertEqual(len(list(self._mlist.moderators.members)), 0)
 
+    def test_banned_member_tries_to_join(self):
+        # A user tries to join a list they are banned from.
+        with transaction():
+            IBanManager(self._mlist).ban('a...@example.com')
+        with self.assertRaises(HTTPError) as cm:
+            call_api('http://localhost:9001/3.0/members', {
+                'list_id': 'test.example.com',
+                'subscriber': 'a...@example.com',
+                })
+        self.assertEqual(cm.exception.code, 400)
+        self.assertEqual(cm.exception.reason, b'Membership is banned')
+
+    def test_globally_banned_member_tries_to_join(self):
+        # A user tries to join a list they are banned from.
+        with transaction():
+            IBanManager(None).ban('a...@example.com')
+        with self.assertRaises(HTTPError) as cm:
+            call_api('http://localhost:9001/3.0/members', {
+                'list_id': 'test.example.com',
+                'subscriber': 'a...@example.com',
+                })
+        self.assertEqual(cm.exception.code, 400)
+        self.assertEqual(cm.exception.reason, b'Membership is banned')
+
 
 
 class CustomLayer(ConfigLayer):



View it on GitLab: 
https://gitlab.com/mailman/mailman/compare/29ad7d4a658081a442c6cb120943f7014d36dade...a33f1c528f7565beff8c4b3898714adca4dc33d4
_______________________________________________
Mailman-checkins mailing list
Mailman-checkins@python.org
Unsubscribe: 
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org

Reply via email to