Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Add query parameter ts to allow appservices set the origin_server_ts for state events #11866

Merged
merged 30 commits into from
Oct 3, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
f076866
Add query parameter ts to allow appservices set the original_server_t…
lukasdenk Jan 31, 2022
1a0fc0c
Apply suggestion to synapse/rest/client/room.py
lukasdenk Feb 1, 2022
f5804c3
Apply missing default value
lukasdenk Feb 1, 2022
ae1fbcb
Fix method parameter ordering.
lukasdenk Feb 1, 2022
248ddde
set default parsed value to None
lukasdenk Feb 1, 2022
c1abcf0
fix linting problem
lukasdenk Feb 1, 2022
69320e1
add documentation for original_server_ts parameter
lukasdenk Feb 1, 2022
cb2d34c
Merge remote-tracking branch 'origin/develop' into ts_for_states
lukasdenk Feb 1, 2022
c0c7a66
test ts query param for send and state events
lukasdenk Feb 7, 2022
72d606f
Merge branch 'develop' into ts_for_states
lukasdenk Feb 7, 2022
40eeae7
rename impersonated_user to appservice_user_id
lukasdenk Feb 7, 2022
dcfb170
import urllib at top of file instead of locally writing the whole path
lukasdenk Feb 7, 2022
8d44470
use consistent explanation of appservice_user_id param
lukasdenk Feb 7, 2022
f00f240
introduce msc3316_ts query param
lukasdenk Feb 7, 2022
f6e28bc
Merge remote-tracking branch 'origin/develop' into ts_for_states
lukasdenk Feb 7, 2022
4329180
Merge remote-tracking branch 'origin/develop' into ts_for_states
lukasdenk Feb 8, 2022
e54b2c2
Fix memory import
lukasdenk Feb 17, 2022
6b87d69
Merge remote-tracking branch 'origin/develop' into ts_for_states
lukasdenk Feb 17, 2022
ee295e0
fix linting probs
lukasdenk Feb 18, 2022
13b81ed
Update changelog.d/11866.feature
lukasdenk Mar 2, 2022
331cb48
add comment to Update tests/rest/client/test_rooms.py
lukasdenk Mar 8, 2022
d3e957a
test
lukasdenk Mar 15, 2022
5fab986
Merge remote-tracking branch 'fork2/ts_for_states' into ts_for_states
lukasdenk Mar 15, 2022
6b56dfc
Merge remote-tracking branch 'origin/develop' into ts_for_states
clokep Sep 30, 2022
fd62763
Use the proper urlencode.
clokep Sep 30, 2022
5a320d1
Handle review comments and fix-up code and use stable identifier.
clokep Sep 30, 2022
0bc7b54
Refactor to avoid dictionary unless needed.
clokep Sep 30, 2022
e3a0166
Clean-up another reference to unstable identifier.
clokep Sep 30, 2022
d6149af
Manually call /createRoom.
clokep Oct 3, 2022
65a79c0
Merge remote-tracking branch 'origin/develop' into ts_for_states
clokep Oct 3, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/11866.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Allow appservices to set the `origin_server_ts` of a state event by providing the query parameter `ts` in `PUT /_matrix/client/r0/rooms/{roomId}/state/{eventType}/{stateKey}`.
lukasdenk marked this conversation as resolved.
Show resolved Hide resolved
11 changes: 11 additions & 0 deletions synapse/handlers/room_member.py
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@ async def _local_membership_update(
target: UserID,
room_id: str,
membership: str,
origin_server_ts: Optional[int],
lukasdenk marked this conversation as resolved.
Show resolved Hide resolved
prev_event_ids: List[str],
auth_event_ids: Optional[List[str]] = None,
txn_id: Optional[str] = None,
Expand All @@ -279,6 +280,7 @@ async def _local_membership_update(
target:
room_id:
membership:
origin_server_ts:
lukasdenk marked this conversation as resolved.
Show resolved Hide resolved
prev_event_ids: The event IDs to use as the prev events

auth_event_ids:
Expand Down Expand Up @@ -335,6 +337,7 @@ async def _local_membership_update(
"state_key": user_id,
# For backwards compatibility:
"membership": membership,
"origin_server_ts": origin_server_ts,
},
txn_id=txn_id,
prev_event_ids=prev_event_ids,
Expand Down Expand Up @@ -441,6 +444,7 @@ async def update_membership(
historical: bool = False,
prev_event_ids: Optional[List[str]] = None,
auth_event_ids: Optional[List[str]] = None,
origin_server_ts: Optional[int] = None,
) -> Tuple[str, int]:
"""Update a user's membership in a room.

Expand Down Expand Up @@ -468,6 +472,8 @@ async def update_membership(
The event ids to use as the auth_events for the new event.
Should normally be left as None, which will cause them to be calculated
based on the room state at the prev_events.
origin_server_ts: The origin_server_ts to use if a new event is created. Uses
the current timestamp if set to None.

Returns:
A tuple of the new event ID and stream ID.
Expand Down Expand Up @@ -499,6 +505,7 @@ async def update_membership(
historical=historical,
prev_event_ids=prev_event_ids,
auth_event_ids=auth_event_ids,
origin_server_ts=origin_server_ts,
)

return result
Expand All @@ -520,6 +527,7 @@ async def update_membership_locked(
historical: bool = False,
prev_event_ids: Optional[List[str]] = None,
auth_event_ids: Optional[List[str]] = None,
origin_server_ts: Optional[int] = None,
) -> Tuple[str, int]:
"""Helper for update_membership.

Expand Down Expand Up @@ -549,6 +557,7 @@ async def update_membership_locked(
The event ids to use as the auth_events for the new event.
Should normally be left as None, which will cause them to be calculated
based on the room state at the prev_events.
origin_server_ts:

Returns:
A tuple of the new event ID and stream ID.
Expand Down Expand Up @@ -679,6 +688,7 @@ async def update_membership_locked(
require_consent=require_consent,
outlier=outlier,
historical=historical,
origin_server_ts=origin_server_ts,
)

latest_event_ids = await self.store.get_prev_events_for_room(room_id)
Expand Down Expand Up @@ -902,6 +912,7 @@ async def update_membership_locked(
content=content,
require_consent=require_consent,
outlier=outlier,
origin_server_ts=origin_server_ts,
)

async def _should_perform_remote_join(
Expand Down
6 changes: 6 additions & 0 deletions synapse/rest/client/room.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,11 @@ async def on_PUT(
if state_key is not None:
event_dict["state_key"] = state_key

# Twisted will have processed the args by now.
assert request.args is not None
anoadragon453 marked this conversation as resolved.
Show resolved Hide resolved
if b"ts" in request.args and requester.app_service:
event_dict["origin_server_ts"] = parse_integer(request, "ts", 0)
lukasdenk marked this conversation as resolved.
Show resolved Hide resolved
lukasdenk marked this conversation as resolved.
Show resolved Hide resolved

lukasdenk marked this conversation as resolved.
Show resolved Hide resolved
try:
if event_type == EventTypes.Member:
membership = content.get("membership", None)
Expand All @@ -213,6 +218,7 @@ async def on_PUT(
room_id=room_id,
action=membership,
content=content,
origin_server_ts=event_dict.get("origin_server_ts", None),
lukasdenk marked this conversation as resolved.
Show resolved Hide resolved
)
else:
(
Expand Down