summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAurélien Bompard2016-01-20 10:24:19 +0100
committerAurélien Bompard2016-01-20 10:24:19 +0100
commitcd5607de2a4377d22953788e6c07152d9519b154 (patch)
treeebc9d63c79e3ed3cfc0641d289850d89f87f7d38
parent29ad7d4a658081a442c6cb120943f7014d36dade (diff)
downloadmailman-cd5607de2a4377d22953788e6c07152d9519b154.tar.gz
mailman-cd5607de2a4377d22953788e6c07152d9519b154.tar.zst
mailman-cd5607de2a4377d22953788e6c07152d9519b154.zip
-rw-r--r--src/mailman/rest/members.py3
-rw-r--r--src/mailman/rest/tests/test_membership.py13
2 files changed, 16 insertions, 0 deletions
diff --git a/src/mailman/rest/members.py b/src/mailman/rest/members.py
index ad027b119..f673cfaa5 100644
--- 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
diff --git a/src/mailman/rest/tests/test_membership.py b/src/mailman/rest/tests/test_membership.py
index 6df10fbd1..af8da3ee0 100644
--- 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,18 @@ 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('anne@example.com')
+ with self.assertRaises(HTTPError) as cm:
+ call_api('http://localhost:9001/3.0/members', {
+ 'list_id': 'test.example.com',
+ 'subscriber': 'anne@example.com',
+ })
+ self.assertEqual(cm.exception.code, 400)
+ self.assertEqual(cm.exception.reason, b'Membership is banned')
+
class CustomLayer(ConfigLayer):