Переглянути джерело

check requesting_members on failed accept/reject

Malte E 3 роки тому
батько
коміт
faffdf54ad
1 змінених файлів з 11 додано та 7 видалено
  1. 11 7
      mautrix_signal/portal.py

+ 11 - 7
mautrix_signal/portal.py

@@ -1067,7 +1067,7 @@ class Portal(DBPortal, BasePortal):
             self.log.exception(f"Failed to update Signal link access control: {e}")
             await self._update_join_rules(
                 await self.signal.get_group(sender.username, self.chat_id)
-                )
+            )
 
     async def matrix_accept_knock(self, sender: u.User, user: p.Puppet | u.User) -> None:
         try:
@@ -1077,7 +1077,9 @@ class Portal(DBPortal, BasePortal):
             if isinstance(user, p.Puppet):
                 await user.intent_for(self).ensure_joined(self.mxid)
         except RPCError as e:
-            raise RejectMatrixInvite(str(e)) from e
+            info = await self.signal.get_group(sender.username, self.chat_id)
+            if user.address in info.requesting_members:
+                raise RejectMatrixInvite(str(e)) from e
         power_levels = await self.main_intent.get_power_levels(self.mxid)
         invitee_pl = power_levels.get_user_level(user.mxid)
         if invitee_pl >= 50:
@@ -1099,11 +1101,13 @@ class Portal(DBPortal, BasePortal):
                 sender.username, self.chat_id, members=[user.address]
             )
         except RPCError as e:
-            await user.intent_for(self).knock(
-                self.mxid,
-                reason=f"refusing membership failed: {e}",
-                servers=[self.config["homeserver.domain"]],
-            )
+            info = await self.signal.get_group(sender.username, self.chat_id)
+            if user.address in info.requesting_members:
+                await user.intent_for(self).knock(
+                    self.mxid,
+                    reason=f"refusing membership failed: {e}",
+                    servers=[self.config["homeserver.domain"]],
+                )
 
     # endregion
     # region Signal event handling