This commit is contained in:
Erik Johnston
2026-03-18 14:53:26 +00:00
parent 299a7f92cd
commit 1360400b95
23 changed files with 93 additions and 93 deletions
+4 -4
View File
@@ -34,7 +34,7 @@ from synapse.config._base import ConfigError
from synapse.config.homeserver import HomeServerConfig
from synapse.config.logger import setup_logging
from synapse.events import EventBase
from synapse.events.utils import ClientEvent
from synapse.events.utils import FilteredEvent
from synapse.handlers.admin import ExfiltrationWriter
from synapse.server import HomeServer
from synapse.storage.database import DatabasePool, LoggingDatabaseConnection
@@ -151,7 +151,7 @@ class FileExfiltrationWriter(ExfiltrationWriter):
if list(os.listdir(self.base_directory)):
raise Exception("Directory must be empty")
def write_events(self, room_id: str, events: list[ClientEvent]) -> None:
def write_events(self, room_id: str, events: list[FilteredEvent]) -> None:
room_directory = os.path.join(self.base_directory, "rooms", room_id)
os.makedirs(room_directory, exist_ok=True)
events_file = os.path.join(room_directory, "events")
@@ -176,7 +176,7 @@ class FileExfiltrationWriter(ExfiltrationWriter):
def write_invite(
self, room_id: str, event: EventBase, state: StateMap[EventBase]
) -> None:
self.write_events(room_id, [ClientEvent(event=event, membership=None)])
self.write_events(room_id, [FilteredEvent(event=event, membership=None)])
# We write the invite state somewhere else as they aren't full events
# and are only a subset of the state at the event.
@@ -192,7 +192,7 @@ class FileExfiltrationWriter(ExfiltrationWriter):
def write_knock(
self, room_id: str, event: EventBase, state: StateMap[EventBase]
) -> None:
self.write_events(room_id, [ClientEvent(event=event, membership=None)])
self.write_events(room_id, [FilteredEvent(event=event, membership=None)])
# We write the knock state somewhere else as they aren't full events
# and are only a subset of the state at the event.
+2 -2
View File
@@ -40,7 +40,7 @@ from synapse.appservice import (
TransactionUnusedFallbackKeys,
)
from synapse.events import EventBase
from synapse.events.utils import ClientEvent, SerializeEventConfig
from synapse.events.utils import FilteredEvent, SerializeEventConfig
from synapse.http.client import SimpleHttpClient, is_unknown_endpoint
from synapse.logging import opentracing
from synapse.metrics import SERVER_NAME_LABEL
@@ -545,7 +545,7 @@ class ApplicationServiceApi(SimpleHttpClient):
) -> list[JsonDict]:
time_now = self.clock.time_msec()
return await self._event_serializer.serialize_events(
[ClientEvent(event=e, membership=None) for e in events],
[FilteredEvent(event=e, membership=None) for e in events],
time_now,
config=SerializeEventConfig(
as_client_event=True,
+9 -9
View File
@@ -418,7 +418,7 @@ def format_event_for_client_v2_without_room_id(d: JsonDict) -> JsonDict:
@attr.s(slots=True, frozen=True, auto_attribs=True)
class ClientEvent:
class FilteredEvent:
"""An event annotated with per-user data for client serialization.
Produced by filter_and_transform_events_for_client. Carries the user's
@@ -430,13 +430,13 @@ class ClientEvent:
membership: str | None
@classmethod
def state(cls, event: "EventBase") -> "ClientEvent":
def state(cls, event: "EventBase") -> "FilteredEvent":
"""Wrap a state event with no per-user membership annotation.
The event must be a state event (i.e. have a state_key).
"""
assert event.is_state(), (
f"ClientEvent.state() called with non-state event {event.event_id}"
f"FilteredEvent.state() called with non-state event {event.event_id}"
)
return cls(event=event, membership=None)
@@ -631,7 +631,7 @@ class EventClientSerializer:
async def serialize_event(
self,
event: JsonDict | ClientEvent,
event: JsonDict | FilteredEvent,
time_now: int,
*,
config: SerializeEventConfig = _DEFAULT_SERIALIZE_EVENT_CONFIG,
@@ -653,7 +653,7 @@ class EventClientSerializer:
The serialized event
"""
# To handle the case of presence events and the like
if not isinstance(event, ClientEvent):
if not isinstance(event, FilteredEvent):
return event
base_event = event.event
@@ -769,7 +769,7 @@ class EventClientSerializer:
# `sender` of the edit; however MSC3925 proposes extending it to the whole
# of the edit, which is what we do here.
serialized_aggregations[RelationTypes.REPLACE] = await self.serialize_event(
ClientEvent(event=event_aggregations.replace, membership=None),
FilteredEvent(event=event_aggregations.replace, membership=None),
time_now,
config=config,
)
@@ -779,7 +779,7 @@ class EventClientSerializer:
thread = event_aggregations.thread
serialized_latest_event = await self.serialize_event(
ClientEvent(event=thread.latest_event, membership=None),
FilteredEvent(event=thread.latest_event, membership=None),
time_now,
config=config,
bundle_aggregations=bundled_aggregations,
@@ -804,7 +804,7 @@ class EventClientSerializer:
@trace
async def serialize_events(
self,
events: Collection[JsonDict | ClientEvent],
events: Collection[JsonDict | FilteredEvent],
time_now: int,
*,
config: SerializeEventConfig = _DEFAULT_SERIALIZE_EVENT_CONFIG,
@@ -831,7 +831,7 @@ class EventClientSerializer:
# Batch-fetch all redaction events in one go rather than one per event.
redaction_ids: set[str] = set()
for e in events:
base = e.event if isinstance(e, ClientEvent) else e
base = e.event if isinstance(e, FilteredEvent) else e
if isinstance(base, EventBase):
redacted_by = base.internal_metadata.redacted_by
if redacted_by is not None:
+2 -2
View File
@@ -33,7 +33,7 @@ import attr
from synapse.api.constants import Direction, EventTypes, Membership
from synapse.api.errors import SynapseError
from synapse.events import EventBase
from synapse.events.utils import ClientEvent
from synapse.events.utils import FilteredEvent
from synapse.types import (
JsonMapping,
Requester,
@@ -520,7 +520,7 @@ class ExfiltrationWriter(metaclass=abc.ABCMeta):
"""Interface used to specify how to write exported data."""
@abc.abstractmethod
def write_events(self, room_id: str, events: list[ClientEvent]) -> None:
def write_events(self, room_id: str, events: list[FilteredEvent]) -> None:
"""Write a batch of events for a room."""
raise NotImplementedError()
+3 -3
View File
@@ -25,7 +25,7 @@ from typing import TYPE_CHECKING, Iterable
from synapse.api.constants import EduTypes, EventTypes, Membership, PresenceState
from synapse.api.errors import AuthError, SynapseError
from synapse.events.utils import ClientEvent, SerializeEventConfig
from synapse.events.utils import FilteredEvent, SerializeEventConfig
from synapse.handlers.presence import format_user_presence_state
from synapse.storage.databases.main.events_worker import EventRedactBehaviour
from synapse.streams.config import PaginationConfig
@@ -101,7 +101,7 @@ class EventStreamHandler:
# joined room, we need to send down presence for those users.
to_add: list[JsonDict] = []
for event in events:
if not isinstance(event, ClientEvent):
if not isinstance(event, FilteredEvent):
continue
if event.event.type == EventTypes.Member:
if event.event.membership != Membership.JOIN:
@@ -154,7 +154,7 @@ class EventHandler:
room_id: str | None,
event_id: str,
show_redacted: bool = False,
) -> ClientEvent | None:
) -> FilteredEvent | None:
"""Retrieve a single specified event on behalf of a user.
The event will be transformed in a user-specific and time-specific way,
e.g. having unsigned metadata added or being erased depending on who is accessing.
+8 -8
View File
@@ -30,7 +30,7 @@ from synapse.api.constants import (
Membership,
)
from synapse.api.errors import SynapseError
from synapse.events.utils import ClientEvent, SerializeEventConfig
from synapse.events.utils import FilteredEvent, SerializeEventConfig
from synapse.events.validator import EventValidator
from synapse.handlers.presence import format_user_presence_state
from synapse.handlers.receipts import ReceiptEventSource
@@ -186,7 +186,7 @@ class InitialSyncHandler:
invite_event = await self.store.get_event(event.event_id)
d["invite"] = await self._event_serializer.serialize_event(
ClientEvent(event=invite_event, membership=None),
FilteredEvent(event=invite_event, membership=None),
time_now,
config=serializer_options,
)
@@ -226,7 +226,7 @@ class InitialSyncHandler:
).addErrback(unwrapFirstError)
client_messages: list[
ClientEvent
FilteredEvent
] = await filter_and_transform_events_for_client(
self._storage_controllers,
user_id,
@@ -252,7 +252,7 @@ class InitialSyncHandler:
}
d["state"] = await self._event_serializer.serialize_events(
[ClientEvent.state(e) for e in current_state.values()],
[FilteredEvent.state(e) for e in current_state.values()],
time_now=time_now,
config=serializer_options,
)
@@ -385,7 +385,7 @@ class InitialSyncHandler:
)
client_messages: list[
ClientEvent
FilteredEvent
] = await filter_and_transform_events_for_client(
self._storage_controllers,
requester.user.to_string(),
@@ -415,7 +415,7 @@ class InitialSyncHandler:
"state": (
# Don't bundle aggregations as this is a deprecated API.
await self._event_serializer.serialize_events(
[ClientEvent.state(e) for e in room_state.values()],
[FilteredEvent.state(e) for e in room_state.values()],
time_now,
config=serialize_options,
)
@@ -441,7 +441,7 @@ class InitialSyncHandler:
serialize_options = SerializeEventConfig(requester=requester)
# Don't bundle aggregations as this is a deprecated API.
state = await self._event_serializer.serialize_events(
[ClientEvent.state(e) for e in current_state.values()],
[FilteredEvent.state(e) for e in current_state.values()],
time_now,
config=serialize_options,
)
@@ -503,7 +503,7 @@ class InitialSyncHandler:
)
client_messages: list[
ClientEvent
FilteredEvent
] = await filter_and_transform_events_for_client(
self._storage_controllers,
requester.user.to_string(),
+2 -2
View File
@@ -62,7 +62,7 @@ from synapse.events.snapshot import (
UnpersistedEventContextBase,
)
from synapse.events.utils import (
ClientEvent,
FilteredEvent,
SerializeEventConfig,
maybe_upsert_event_field,
)
@@ -265,7 +265,7 @@ class MessageHandler:
room_state = room_state_events[membership_event_id]
events = await self._event_serializer.serialize_events(
[ClientEvent.state(e) for e in room_state.values()],
[FilteredEvent.state(e) for e in room_state.values()],
self.clock.time_msec(),
config=SerializeEventConfig(requester=requester),
)
+4 -4
View File
@@ -29,7 +29,7 @@ from synapse.api.constants import Direction, EventTypes, Membership
from synapse.api.errors import SynapseError
from synapse.api.filtering import Filter
from synapse.events import EventBase
from synapse.events.utils import ClientEvent
from synapse.events.utils import FilteredEvent
from synapse.handlers.relations import BundledAggregations
from synapse.handlers.worker_lock import NEW_EVENT_DURING_PURGE_LOCK_NAME
from synapse.logging.opentracing import trace
@@ -80,7 +80,7 @@ class GetMessagesResult:
Everything needed to serialize a `/messages` response.
"""
messages_chunk: list[ClientEvent]
messages_chunk: list[FilteredEvent]
"""
A list of room events.
@@ -692,9 +692,9 @@ class PaginationHandler:
is_peeking=(member_event_id is None),
)
else:
client_events = [ClientEvent(event=e, membership=None) for e in events]
client_events = [FilteredEvent(event=e, membership=None) for e in events]
client_events_result: list[ClientEvent] = client_events
client_events_result: list[FilteredEvent] = client_events
# if after the filter applied there are no more events
# return immediately - but there might be more in next_token batch
+6 -6
View File
@@ -33,7 +33,7 @@ import attr
from synapse.api.constants import Direction, EventTypes, RelationTypes
from synapse.api.errors import SynapseError
from synapse.events import EventBase, relation_from_event
from synapse.events.utils import ClientEvent, SerializeEventConfig
from synapse.events.utils import FilteredEvent, SerializeEventConfig
from synapse.logging.context import make_deferred_yieldable, run_in_background
from synapse.logging.opentracing import trace
from synapse.storage.databases.main.relations import ThreadsNextBatch, _RelatedEvent
@@ -154,7 +154,7 @@ class RelationsHandler:
[e.event_id for e in related_events]
)
client_events: list[ClientEvent] = await filter_and_transform_events_for_client(
client_events: list[FilteredEvent] = await filter_and_transform_events_for_client(
self._storage_controllers,
user_id,
events,
@@ -432,7 +432,7 @@ class RelationsHandler:
@trace
async def get_bundled_aggregations(
self, events: Iterable[EventBase | ClientEvent], user_id: str
self, events: Iterable[EventBase | FilteredEvent], user_id: str
) -> dict[str, BundledAggregations]:
"""Generate bundled aggregations for events.
@@ -449,8 +449,8 @@ class RelationsHandler:
The results may include additional events which are related to the
requested events.
"""
# Unwrap ClientEvent wrappers to get bare EventBase objects.
base_events = [e.event if isinstance(e, ClientEvent) else e for e in events]
# Unwrap FilteredEvent wrappers to get bare EventBase objects.
base_events = [e.event if isinstance(e, FilteredEvent) else e for e in events]
# De-duplicated events by ID to handle the same event requested multiple times.
events_by_id = {}
@@ -602,7 +602,7 @@ class RelationsHandler:
# Limit the returned threads to those the user has participated in.
events = [event for event in events if participated[event.event_id]]
client_events: list[ClientEvent] = await filter_and_transform_events_for_client(
client_events: list[FilteredEvent] = await filter_and_transform_events_for_client(
self._storage_controllers,
user_id,
events,
+6 -6
View File
@@ -67,7 +67,7 @@ from synapse.api.room_versions import KNOWN_ROOM_VERSIONS, RoomVersion
from synapse.event_auth import validate_event_for_room_version
from synapse.events import EventBase
from synapse.events.snapshot import UnpersistedEventContext
from synapse.events.utils import ClientEvent, copy_and_fixup_power_levels_contents
from synapse.events.utils import FilteredEvent, copy_and_fixup_power_levels_contents
from synapse.handlers.relations import BundledAggregations
from synapse.rest.admin._base import assert_user_is_admin
from synapse.streams import EventSource
@@ -109,9 +109,9 @@ FIVE_MINUTES_IN_MS = 5 * 60 * 1000
@attr.s(slots=True, frozen=True, auto_attribs=True)
class EventContext:
events_before: list[ClientEvent]
event: ClientEvent
events_after: list[ClientEvent]
events_before: list[FilteredEvent]
event: FilteredEvent
events_after: list[FilteredEvent]
state: list[EventBase]
aggregations: dict[str, BundledAggregations]
start: str
@@ -1916,9 +1916,9 @@ class RoomContextHandler:
# The user is peeking if they aren't in the room already
is_peeking = not is_user_in_room
async def filter_evts(events: list[EventBase]) -> list[ClientEvent]:
async def filter_evts(events: list[EventBase]) -> list[FilteredEvent]:
if use_admin_priviledge:
return [ClientEvent(event=e, membership=None) for e in events]
return [FilteredEvent(event=e, membership=None) for e in events]
return await filter_and_transform_events_for_client(
self._storage_controllers,
user.to_string(),
+6 -6
View File
@@ -29,7 +29,7 @@ from unpaddedbase64 import decode_base64, encode_base64
from synapse.api.constants import EventTypes, Membership
from synapse.api.errors import NotFoundError, SynapseError
from synapse.api.filtering import Filter
from synapse.events.utils import ClientEvent, SerializeEventConfig
from synapse.events.utils import FilteredEvent, SerializeEventConfig
from synapse.types import JsonDict, Requester, StrCollection, StreamKeyType, UserID
from synapse.types.state import StateFilter
from synapse.visibility import filter_and_transform_events_for_client
@@ -47,7 +47,7 @@ class _SearchResult:
# A mapping of event ID to the rank of that event.
rank_map: dict[str, int]
# A list of the resulting events.
allowed_events: list[ClientEvent]
allowed_events: list[FilteredEvent]
# A map of room ID to results.
room_groups: dict[str, JsonDict]
# A set of event IDs to highlight.
@@ -359,7 +359,7 @@ class SearchHandler:
state_results[room_id] = list(state.values())
aggregations = await self._relations_handler.get_bundled_aggregations(
# Generate an iterable of ClientEvent for all the events that will be
# Generate an iterable of FilteredEvent for all the events that will be
# returned, including contextual events.
itertools.chain(
# The events_before and events_after for each context.
@@ -416,7 +416,7 @@ class SearchHandler:
if state_results:
rooms_cat_res["state"] = {
room_id: await self._event_serializer.serialize_events(
[ClientEvent.state(e) for e in state_events],
[FilteredEvent.state(e) for e in state_events],
time_now,
config=serialize_options,
)
@@ -550,7 +550,7 @@ class SearchHandler:
highlights = set()
room_events: list[ClientEvent] = []
room_events: list[FilteredEvent] = []
i = 0
pagination_token = batch_token
@@ -633,7 +633,7 @@ class SearchHandler:
async def _calculate_event_contexts(
self,
user: UserID,
allowed_events: list[ClientEvent],
allowed_events: list[FilteredEvent],
before_limit: int,
after_limit: int,
include_profile: bool,
+3 -3
View File
@@ -23,7 +23,7 @@ from typing_extensions import assert_never
from synapse.api.constants import Direction, EventTypes, Membership
from synapse.events import EventBase
from synapse.events.utils import ClientEvent, strip_event
from synapse.events.utils import FilteredEvent, strip_event
from synapse.handlers.relations import BundledAggregations
from synapse.handlers.sliding_sync.extensions import SlidingSyncExtensionHandler
from synapse.handlers.sliding_sync.room_lists import (
@@ -679,7 +679,7 @@ class SlidingSyncHandler:
# membership. Currently, we have to make all of these optional because
# `invite`/`knock` rooms only have `stripped_state`. See
# https://github.com/matrix-org/matrix-spec-proposals/pull/3575#discussion_r1653045932
timeline_events: list[ClientEvent] = []
timeline_events: list[FilteredEvent] = []
bundled_aggregations: dict[str, BundledAggregations] | None = None
limited: bool | None = None
prev_batch_token: StreamToken | None = None
@@ -1485,7 +1485,7 @@ class SlidingSyncHandler:
self,
room_id: str,
to_token: StreamToken,
timeline: list[ClientEvent],
timeline: list[FilteredEvent],
check_outside_timeline: bool,
) -> int | None:
"""Get a bump stamp for the room, if we have a bump event and it has
+6 -6
View File
@@ -43,7 +43,7 @@ from synapse.api.filtering import FilterCollection
from synapse.api.presence import UserPresenceState
from synapse.api.room_versions import KNOWN_ROOM_VERSIONS
from synapse.events import EventBase
from synapse.events.utils import ClientEvent
from synapse.events.utils import FilteredEvent
from synapse.handlers.relations import BundledAggregations
from synapse.logging import issue9533_logger
from synapse.logging.context import current_context
@@ -124,7 +124,7 @@ class SyncConfig:
@attr.s(slots=True, frozen=True, auto_attribs=True)
class TimelineBatch:
prev_batch: StreamToken
events: Sequence[ClientEvent]
events: Sequence[FilteredEvent]
limited: bool
# A mapping of event ID to the bundled aggregations for the above events.
# This is only calculated if limited is true.
@@ -149,7 +149,7 @@ class JoinedSyncResult:
state: StateMap[EventBase]
ephemeral: list[JsonDict]
account_data: list[JsonDict]
sticky: list[ClientEvent]
sticky: list[FilteredEvent]
unread_notifications: JsonDict
unread_thread_notifications: JsonDict
summary: JsonDict | None
@@ -700,7 +700,7 @@ class SyncHandler:
log_kv({"limited": limited})
client_recents: list[ClientEvent]
client_recents: list[FilteredEvent]
if potential_recents:
recents = await sync_config.filter_collection.filter_room_timeline(
potential_recents
@@ -839,7 +839,7 @@ class SyncHandler:
)
loaded_recents_client: list[
ClientEvent
FilteredEvent
] = await filter_and_transform_events_for_client(
self._storage_controllers,
sync_config.user.to_string(),
@@ -2883,7 +2883,7 @@ class SyncHandler:
if room_builder.rtype == "joined":
unread_notifications: dict[str, int] = {}
sticky_events: list[ClientEvent] = []
sticky_events: list[FilteredEvent] = []
if sticky_event_ids:
# As per MSC4354:
# Remove sticky events that are already in the timeline, else we will needlessly duplicate
+3 -3
View File
@@ -41,7 +41,7 @@ from twisted.internet.defer import Deferred
from synapse.api.constants import EduTypes, EventTypes, HistoryVisibility, Membership
from synapse.api.errors import AuthError
from synapse.events import EventBase
from synapse.events.utils import ClientEvent
from synapse.events.utils import FilteredEvent
from synapse.handlers.presence import format_user_presence_state
from synapse.logging import issue9533_logger
from synapse.logging.context import PreserveLoggingContext
@@ -211,7 +211,7 @@ class _NotifierUserStream:
@attr.s(slots=True, frozen=True, auto_attribs=True)
class EventStreamResult:
events: list[JsonDict | ClientEvent]
events: list[JsonDict | FilteredEvent]
start_token: StreamToken
end_token: StreamToken
@@ -766,7 +766,7 @@ class Notifier:
# The events fetched from each source are a JsonDict, EventBase, or
# UserPresenceState, but see below for UserPresenceState being
# converted to JsonDict.
events: list[JsonDict | ClientEvent] = []
events: list[JsonDict | FilteredEvent] = []
end_token = from_token
for keyname, source in self.event_sources.sources.get_sources():
+2 -2
View File
@@ -3,7 +3,7 @@ from typing import TYPE_CHECKING
from synapse.api.errors import NotFoundError
from synapse.events.utils import (
ClientEvent,
FilteredEvent,
SerializeEventConfig,
format_event_raw,
)
@@ -67,7 +67,7 @@ class EventRestServlet(RestServlet):
)
res = {
"event": await self._event_serializer.serialize_event(
ClientEvent(event=event, membership=None),
FilteredEvent(event=event, membership=None),
self._clock.time_msec(),
config=config,
)
+3 -3
View File
@@ -29,7 +29,7 @@ from synapse.api.constants import Direction, EventTypes, JoinRules, Membership
from synapse.api.errors import AuthError, Codes, NotFoundError, SynapseError
from synapse.api.filtering import Filter
from synapse.events.utils import (
ClientEvent,
FilteredEvent,
SerializeEventConfig,
)
from synapse.handlers.pagination import (
@@ -531,7 +531,7 @@ class RoomStateRestServlet(RestServlet):
events = await self.store.get_events(event_ids.values())
now = self.clock.time_msec()
room_state = await self._event_serializer.serialize_events(
[ClientEvent.state(e) for e in events.values()], now
[FilteredEvent.state(e) for e in events.values()], now
)
ret = {"state": room_state}
@@ -900,7 +900,7 @@ class RoomEventContextServlet(RestServlet):
bundle_aggregations=event_context.aggregations,
),
"state": await self._event_serializer.serialize_events(
[ClientEvent.state(e) for e in event_context.state],
[FilteredEvent.state(e) for e in event_context.state],
time_now,
),
"start": event_context.start,
+2 -2
View File
@@ -24,7 +24,7 @@ from typing import TYPE_CHECKING
from synapse.api.constants import ReceiptTypes
from synapse.events.utils import (
ClientEvent,
FilteredEvent,
SerializeEventConfig,
format_event_for_client_v2_without_room_id,
)
@@ -112,7 +112,7 @@ class NotificationsServlet(RestServlet):
"ts": pa.received_ts,
"event": (
await self._event_serializer.serialize_event(
ClientEvent(event=notif_events[pa.event_id], membership=None),
FilteredEvent(event=notif_events[pa.event_id], membership=None),
now,
config=serialize_options,
)
+4 -4
View File
@@ -52,7 +52,7 @@ from synapse.api.errors import (
)
from synapse.api.filtering import Filter
from synapse.events.utils import (
ClientEvent,
FilteredEvent,
EventClientSerializer,
SerializeEventConfig,
format_event_for_client_v2,
@@ -287,7 +287,7 @@ class RoomStateEventRestServlet(RestServlet):
if format == "event":
event = await self._event_serializer.serialize_event(
ClientEvent.state(data),
FilteredEvent.state(data),
self.clock.time_msec(),
config=SerializeEventConfig(
event_format=format_event_for_client_v2,
@@ -867,7 +867,7 @@ async def encode_messages_response(
serialized_result[
"state"
] = await serialize_deps.event_serializer.serialize_events(
[ClientEvent.state(e) for e in get_messages_result.state],
[FilteredEvent.state(e) for e in get_messages_result.state],
time_now,
config=serialize_options,
)
@@ -1175,7 +1175,7 @@ class RoomEventContextServlet(RestServlet):
config=serializer_options,
),
"state": await self._event_serializer.serialize_events(
[ClientEvent.state(e) for e in event_context.state],
[FilteredEvent.state(e) for e in event_context.state],
time_now,
config=serializer_options,
),
+5 -5
View File
@@ -30,7 +30,7 @@ from synapse.api.filtering import FilterCollection
from synapse.api.presence import UserPresenceState
from synapse.api.ratelimiting import Ratelimiter
from synapse.events.utils import (
ClientEvent,
FilteredEvent,
SerializeEventConfig,
format_event_for_client_v2_without_room_id,
format_event_raw,
@@ -448,7 +448,7 @@ class SyncRestServlet(RestServlet):
invited = {}
for room in rooms:
invite = await self._event_serializer.serialize_event(
ClientEvent(event=room.invite, membership=None),
FilteredEvent(event=room.invite, membership=None),
time_now,
config=serialize_options,
)
@@ -486,7 +486,7 @@ class SyncRestServlet(RestServlet):
knocked = {}
for room in rooms:
knock = await self._event_serializer.serialize_event(
ClientEvent(event=room.knock, membership=None),
FilteredEvent(event=room.knock, membership=None),
time_now,
config=serialize_options,
)
@@ -600,7 +600,7 @@ class SyncRestServlet(RestServlet):
)
serialized_state = await self._event_serializer.serialize_events(
[ClientEvent.state(e) for e in state_events],
[FilteredEvent.state(e) for e in state_events],
time_now,
config=serialize_options,
)
@@ -990,7 +990,7 @@ class SlidingSyncRestServlet(RestServlet):
):
serialized_required_state = (
await self.event_serializer.serialize_events(
[ClientEvent.state(e) for e in room_result.required_state],
[FilteredEvent.state(e) for e in room_result.required_state],
time_now,
config=serialize_options,
)
+2 -2
View File
@@ -34,7 +34,7 @@ from pydantic import ConfigDict
from synapse.api.constants import EventTypes
from synapse.events import EventBase
from synapse.events.utils import ClientEvent
from synapse.events.utils import FilteredEvent
from synapse.types import (
DeviceListUpdates,
JsonDict,
@@ -186,7 +186,7 @@ class SlidingSyncResult:
# Should be empty for invite/knock rooms with `stripped_state`
required_state: list[EventBase]
# Should be empty for invite/knock rooms with `stripped_state`
timeline_events: list[ClientEvent]
timeline_events: list[FilteredEvent]
bundled_aggregations: dict[str, "BundledAggregations"] | None
# Optional because it's only relevant to invite/knock rooms
stripped_state: list[JsonDict]
+6 -6
View File
@@ -37,7 +37,7 @@ from synapse.api.constants import (
)
from synapse.events import EventBase
from synapse.events.snapshot import EventContext
from synapse.events.utils import ClientEvent, prune_event
from synapse.events.utils import FilteredEvent, prune_event
from synapse.logging.opentracing import trace
from synapse.storage.controllers import StorageControllers
from synapse.storage.databases.main import DataStore
@@ -81,7 +81,7 @@ async def filter_and_transform_events_for_client(
is_peeking: bool = False,
always_include_ids: frozenset[str] = frozenset(),
filter_send_to_client: bool = True,
) -> list[ClientEvent]:
) -> list[FilteredEvent]:
"""
Check which events a user is allowed to see. If the user can see the event but its
sender asked for their data to be erased, prune the content of the event.
@@ -101,7 +101,7 @@ async def filter_and_transform_events_for_client(
also be called to check whether a user can see the state at a given point.
Returns:
The filtered events, wrapped in ClientEvent with the requesting user's
The filtered events, wrapped in FilteredEvent with the requesting user's
membership at each event annotated for use during serialization (MSC4115).
"""
# Filter out events that have been soft failed so that we don't relay them
@@ -175,7 +175,7 @@ async def filter_and_transform_events_for_client(
room_id
] = await storage.main.get_retention_policy_for_room(room_id)
def allowed(event: EventBase) -> ClientEvent | None:
def allowed(event: EventBase) -> FilteredEvent | None:
state_after_event = event_id_to_state.get(event.event_id)
filtered = _check_client_allowed_to_see_event(
user_id=user_id,
@@ -232,9 +232,9 @@ async def filter_and_transform_events_for_client(
else Membership.LEAVE
)
return ClientEvent(event=filtered, membership=user_membership)
return FilteredEvent(event=filtered, membership=user_membership)
# Check each event: gives an iterable of None or a ClientEvent.
# Check each event: gives an iterable of None or a FilteredEvent.
filtered_events = map(allowed, events)
# Turn it into a list and remove None entries before returning.
+3 -3
View File
@@ -29,7 +29,7 @@ from synapse.api.constants import EventContentFields
from synapse.api.room_versions import RoomVersions
from synapse.events import EventBase, make_event_from_dict
from synapse.events.utils import (
ClientEvent,
FilteredEvent,
PowerLevelsContent,
SerializeEventConfig,
_split_field,
@@ -661,7 +661,7 @@ class SerializeEventTestCase(HomeserverTestCase):
) -> JsonDict:
return self.get_success(
self._event_serializer.serialize_event(
ClientEvent(event=ev, membership=None),
FilteredEvent(event=ev, membership=None),
1479807801915,
config=SerializeEventConfig(
only_event_fields=fields,
@@ -782,7 +782,7 @@ class SerializeEventTestCase(HomeserverTestCase):
def test_event_fields_fail_if_fields_not_str(self) -> None:
self.get_failure(
self._event_serializer.serialize_event(
ClientEvent(
FilteredEvent(
event=MockEvent(room_id="!foo:bar", content={"foo": "bar"}),
membership=None,
),
+2 -2
View File
@@ -23,7 +23,7 @@ from unittest.mock import Mock
from twisted.internet.testing import MemoryReactor
from synapse.api.constants import EventTypes
from synapse.events.utils import ClientEvent
from synapse.events.utils import FilteredEvent
from synapse.rest import admin
from synapse.rest.client import login, room
from synapse.server import HomeServer
@@ -258,7 +258,7 @@ class RetentionTestCase(unittest.HomeserverTestCase):
time_now = self.clock.time_msec()
serialized = self.get_success(
self.serializer.serialize_event(
ClientEvent(event=event, membership=None), time_now
FilteredEvent(event=event, membership=None), time_now
)
)