mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-04 05:24:55 -04:00
Stop shadow-banned users from sending invites. (#8095)
This commit is contained in:
parent
318f4e738e
commit
e259d63f73
7 changed files with 226 additions and 31 deletions
|
@ -27,6 +27,7 @@ from synapse.api.errors import (
|
|||
Codes,
|
||||
HttpResponseException,
|
||||
InvalidClientCredentialsError,
|
||||
ShadowBanError,
|
||||
SynapseError,
|
||||
)
|
||||
from synapse.api.filtering import Filter
|
||||
|
@ -45,6 +46,7 @@ from synapse.storage.state import StateFilter
|
|||
from synapse.streams.config import PaginationConfig
|
||||
from synapse.types import RoomAlias, RoomID, StreamToken, ThirdPartyInstanceID, UserID
|
||||
from synapse.util import json_decoder
|
||||
from synapse.util.stringutils import random_string
|
||||
|
||||
MYPY = False
|
||||
if MYPY:
|
||||
|
@ -200,14 +202,17 @@ class RoomStateEventRestServlet(TransactionRestServlet):
|
|||
event_dict["state_key"] = state_key
|
||||
|
||||
if event_type == EventTypes.Member:
|
||||
membership = content.get("membership", None)
|
||||
event_id, _ = await self.room_member_handler.update_membership(
|
||||
requester,
|
||||
target=UserID.from_string(state_key),
|
||||
room_id=room_id,
|
||||
action=membership,
|
||||
content=content,
|
||||
)
|
||||
try:
|
||||
membership = content.get("membership", None)
|
||||
event_id, _ = await self.room_member_handler.update_membership(
|
||||
requester,
|
||||
target=UserID.from_string(state_key),
|
||||
room_id=room_id,
|
||||
action=membership,
|
||||
content=content,
|
||||
)
|
||||
except ShadowBanError:
|
||||
event_id = "$" + random_string(43)
|
||||
else:
|
||||
(
|
||||
event,
|
||||
|
@ -719,16 +724,20 @@ class RoomMembershipRestServlet(TransactionRestServlet):
|
|||
content = {}
|
||||
|
||||
if membership_action == "invite" and self._has_3pid_invite_keys(content):
|
||||
await self.room_member_handler.do_3pid_invite(
|
||||
room_id,
|
||||
requester.user,
|
||||
content["medium"],
|
||||
content["address"],
|
||||
content["id_server"],
|
||||
requester,
|
||||
txn_id,
|
||||
content.get("id_access_token"),
|
||||
)
|
||||
try:
|
||||
await self.room_member_handler.do_3pid_invite(
|
||||
room_id,
|
||||
requester.user,
|
||||
content["medium"],
|
||||
content["address"],
|
||||
content["id_server"],
|
||||
requester,
|
||||
txn_id,
|
||||
content.get("id_access_token"),
|
||||
)
|
||||
except ShadowBanError:
|
||||
# Pretend the request succeeded.
|
||||
pass
|
||||
return 200, {}
|
||||
|
||||
target = requester.user
|
||||
|
@ -740,15 +749,19 @@ class RoomMembershipRestServlet(TransactionRestServlet):
|
|||
if "reason" in content:
|
||||
event_content = {"reason": content["reason"]}
|
||||
|
||||
await self.room_member_handler.update_membership(
|
||||
requester=requester,
|
||||
target=target,
|
||||
room_id=room_id,
|
||||
action=membership_action,
|
||||
txn_id=txn_id,
|
||||
third_party_signed=content.get("third_party_signed", None),
|
||||
content=event_content,
|
||||
)
|
||||
try:
|
||||
await self.room_member_handler.update_membership(
|
||||
requester=requester,
|
||||
target=target,
|
||||
room_id=room_id,
|
||||
action=membership_action,
|
||||
txn_id=txn_id,
|
||||
third_party_signed=content.get("third_party_signed", None),
|
||||
content=event_content,
|
||||
)
|
||||
except ShadowBanError:
|
||||
# Pretend the request succeeded.
|
||||
pass
|
||||
|
||||
return_value = {}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue