mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-08-15 08:15:29 -04:00
Merge remote-tracking branch 'upstream/release-v1.70'
This commit is contained in:
commit
cf5f60f87e
8 changed files with 98 additions and 18 deletions
|
@ -343,6 +343,7 @@ class RequestRatelimiter:
|
|||
requester: Requester,
|
||||
update: bool = True,
|
||||
is_admin_redaction: bool = False,
|
||||
n_actions: int = 1,
|
||||
) -> None:
|
||||
"""Ratelimits requests.
|
||||
|
||||
|
@ -355,6 +356,8 @@ class RequestRatelimiter:
|
|||
is_admin_redaction: Whether this is a room admin/moderator
|
||||
redacting an event. If so then we may apply different
|
||||
ratelimits depending on config.
|
||||
n_actions: Multiplier for the number of actions to apply to the
|
||||
rate limiter at once.
|
||||
|
||||
Raises:
|
||||
LimitExceededError if the request should be ratelimited
|
||||
|
@ -383,7 +386,9 @@ class RequestRatelimiter:
|
|||
if is_admin_redaction and self.admin_redaction_ratelimiter:
|
||||
# If we have separate config for admin redactions, use a separate
|
||||
# ratelimiter as to not have user_ids clash
|
||||
await self.admin_redaction_ratelimiter.ratelimit(requester, update=update)
|
||||
await self.admin_redaction_ratelimiter.ratelimit(
|
||||
requester, update=update, n_actions=n_actions
|
||||
)
|
||||
else:
|
||||
# Override rate and burst count per-user
|
||||
await self.request_ratelimiter.ratelimit(
|
||||
|
@ -391,4 +396,5 @@ class RequestRatelimiter:
|
|||
rate_hz=messages_per_second,
|
||||
burst_count=burst_count,
|
||||
update=update,
|
||||
n_actions=n_actions,
|
||||
)
|
||||
|
|
|
@ -123,7 +123,7 @@ class ApplicationServiceApi(SimpleHttpClient):
|
|||
response = await self.get_json(
|
||||
uri,
|
||||
{"access_token": service.hs_token},
|
||||
headers={"Authorization": f"Bearer {service.hs_token}"},
|
||||
headers={"Authorization": [f"Bearer {service.hs_token}"]},
|
||||
)
|
||||
if response is not None: # just an empty json object
|
||||
return True
|
||||
|
@ -147,7 +147,7 @@ class ApplicationServiceApi(SimpleHttpClient):
|
|||
response = await self.get_json(
|
||||
uri,
|
||||
{"access_token": service.hs_token},
|
||||
headers={"Authorization": f"Bearer {service.hs_token}"},
|
||||
headers={"Authorization": [f"Bearer {service.hs_token}"]},
|
||||
)
|
||||
if response is not None: # just an empty json object
|
||||
return True
|
||||
|
@ -190,7 +190,9 @@ class ApplicationServiceApi(SimpleHttpClient):
|
|||
b"access_token": service.hs_token,
|
||||
}
|
||||
response = await self.get_json(
|
||||
uri, args=args, headers={"Authorization": f"Bearer {service.hs_token}"}
|
||||
uri,
|
||||
args=args,
|
||||
headers={"Authorization": [f"Bearer {service.hs_token}"]},
|
||||
)
|
||||
if not isinstance(response, list):
|
||||
logger.warning(
|
||||
|
@ -230,7 +232,7 @@ class ApplicationServiceApi(SimpleHttpClient):
|
|||
info = await self.get_json(
|
||||
uri,
|
||||
{"access_token": service.hs_token},
|
||||
headers={"Authorization": f"Bearer {service.hs_token}"},
|
||||
headers={"Authorization": [f"Bearer {service.hs_token}"]},
|
||||
)
|
||||
|
||||
if not _is_valid_3pe_metadata(info):
|
||||
|
@ -327,7 +329,7 @@ class ApplicationServiceApi(SimpleHttpClient):
|
|||
uri=uri,
|
||||
json_body=body,
|
||||
args={"access_token": service.hs_token},
|
||||
headers={"Authorization": f"Bearer {service.hs_token}"},
|
||||
headers={"Authorization": [f"Bearer {service.hs_token}"]},
|
||||
)
|
||||
if logger.isEnabledFor(logging.DEBUG):
|
||||
logger.debug(
|
||||
|
|
|
@ -559,7 +559,6 @@ class RoomCreationHandler:
|
|||
invite_list=[],
|
||||
initial_state=initial_state,
|
||||
creation_content=creation_content,
|
||||
ratelimit=False,
|
||||
)
|
||||
|
||||
# Transfer membership events
|
||||
|
@ -753,6 +752,10 @@ class RoomCreationHandler:
|
|||
)
|
||||
|
||||
if ratelimit:
|
||||
# Rate limit once in advance, but don't rate limit the individual
|
||||
# events in the room — room creation isn't atomic and it's very
|
||||
# janky if half the events in the initial state don't make it because
|
||||
# of rate limiting.
|
||||
await self.request_ratelimiter.ratelimit(requester)
|
||||
|
||||
room_version_id = config.get(
|
||||
|
@ -925,7 +928,6 @@ class RoomCreationHandler:
|
|||
room_alias=room_alias,
|
||||
power_level_content_override=power_level_content_override,
|
||||
creator_join_profile=creator_join_profile,
|
||||
ratelimit=ratelimit,
|
||||
)
|
||||
|
||||
if "name" in config:
|
||||
|
@ -1049,7 +1051,6 @@ class RoomCreationHandler:
|
|||
room_alias: Optional[RoomAlias] = None,
|
||||
power_level_content_override: Optional[JsonDict] = None,
|
||||
creator_join_profile: Optional[JsonDict] = None,
|
||||
ratelimit: bool = True,
|
||||
) -> Tuple[int, str, int]:
|
||||
"""Sends the initial events into a new room. Sends the room creation, membership,
|
||||
and power level events into the room sequentially, then creates and batches up the
|
||||
|
@ -1058,6 +1059,8 @@ class RoomCreationHandler:
|
|||
`power_level_content_override` doesn't apply when initial state has
|
||||
power level state event content.
|
||||
|
||||
Rate limiting should already have been applied by this point.
|
||||
|
||||
Returns:
|
||||
A tuple containing the stream ID, event ID and depth of the last
|
||||
event sent to the room.
|
||||
|
@ -1156,7 +1159,7 @@ class RoomCreationHandler:
|
|||
creator.user,
|
||||
room_id,
|
||||
"join",
|
||||
ratelimit=ratelimit,
|
||||
ratelimit=False,
|
||||
content=creator_join_profile,
|
||||
new_room=True,
|
||||
prev_event_ids=[last_sent_event_id],
|
||||
|
@ -1281,7 +1284,10 @@ class RoomCreationHandler:
|
|||
events_to_send.append((encryption_event, encryption_context))
|
||||
|
||||
last_event = await self.event_creation_handler.handle_new_client_event(
|
||||
creator, events_to_send, ignore_shadow_ban=True
|
||||
creator,
|
||||
events_to_send,
|
||||
ignore_shadow_ban=True,
|
||||
ratelimit=False,
|
||||
)
|
||||
assert last_event.internal_metadata.stream_ordering is not None
|
||||
return last_event.internal_metadata.stream_ordering, last_event.event_id, depth
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue