From d14190e99c1ee1d5531d5e5d0efe1d5eddf66504 Mon Sep 17 00:00:00 2001
From: nd <git@notandy.de>
Date: Sun, 21 Mar 2021 15:05:46 +0100
Subject: [PATCH] handle multiple mail addresses and cancle any subscription
 requests for addresses we try to subscribe

---
 .../commands/syncldapmemberships.py           | 33 +++++++++++--------
 1 file changed, 19 insertions(+), 14 deletions(-)

diff --git a/postorius_ldap_membership_management/management/commands/syncldapmemberships.py b/postorius_ldap_membership_management/management/commands/syncldapmemberships.py
index a07d952..013f453 100644
--- a/postorius_ldap_membership_management/management/commands/syncldapmemberships.py
+++ b/postorius_ldap_membership_management/management/commands/syncldapmemberships.py
@@ -83,20 +83,25 @@ class Command(BaseCommand):
 							# user might not be subscribed but should be subscribed -> subscribe
 							# we do not test if he is subscibed already because the mailman api is inconsistent and reports wrong state information for this...
 							# instead we always try to subscribe and catch the error if we are subscribed already
-							user_mail = mm_user.addresses[0].email
-							if membership_type == 'member':
-								mm_list.subscribe(user_mail,
-										display_name=displayname,
-										pre_verified=True,
-										pre_confirmed=True,
-										pre_approved=True)
-							elif membership_type == 'moderator':
-								mm_list.add_moderator(user_mail,
-										display_name=displayname)
-							elif membership_type == 'owner':
-								mm_list.add_moderator(user_mail,
-										display_name=displayname)
-							logger.warning("subscribe {} ( {} ) as {} on {}".format(username, user_mail, membership_type, list_name))
+							for address in mm_user.addresses[0]:
+								user_mail = address.email
+								if membership_type == 'member':
+									# discard a subscription request before trying to subscribe else it will fail
+									for request in mm_list.requests:
+										if request['email'] == user_mail:
+											mm_list.discard_request(request['token'])
+									mm_list.subscribe(user_mail,
+											display_name=displayname,
+											pre_verified=True,
+											pre_confirmed=True,
+											pre_approved=True)
+								elif membership_type == 'moderator':
+									mm_list.add_moderator(user_mail,
+											display_name=displayname)
+								elif membership_type == 'owner':
+									mm_list.add_moderator(user_mail,
+											display_name=displayname)
+								logger.warning("subscribe {} ( {} ) as {} on {}".format(username, user_mail, membership_type, list_name))
 						except HTTPError as e:
 							# We get a http error if the user is already subscribed.
 							# It is silently ignored
-- 
GitLab