diff options
author | Patrick Cloke <clokep@users.noreply.github.com> | 2023-04-06 16:26:28 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-06 16:26:28 -0400 |
commit | d07d2558305057cba6a7e2cb7644c24cf2dcf9be (patch) | |
tree | 7d12d884981d2ffc275c5d10cf811606ce18ba97 /synapse/event_auth.py | |
parent | Bump pyopenssl from 23.1.0 to 23.1.1 (#15373) (diff) | |
download | synapse-d07d2558305057cba6a7e2cb7644c24cf2dcf9be.tar.xz |
Implement MSC2175: remove the creator field from create events. (#15394)
Diffstat (limited to 'synapse/event_auth.py')
-rw-r--r-- | synapse/event_auth.py | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/synapse/event_auth.py b/synapse/event_auth.py index af55874b5c..f95d00d472 100644 --- a/synapse/event_auth.py +++ b/synapse/event_auth.py @@ -455,8 +455,11 @@ def _check_create(event: "EventBase") -> None: "room appears to have unsupported version %s" % (room_version_prop,), ) - # 1.4 If content has no creator field, reject. - if EventContentFields.ROOM_CREATOR not in event.content: + # 1.4 If content has no creator field, reject if the room version requires it. + if ( + not event.room_version.msc2175_implicit_room_creator + and EventContentFields.ROOM_CREATOR not in event.content + ): raise AuthError(403, "Create event lacks a 'creator' property") @@ -491,7 +494,11 @@ def _is_membership_change_allowed( key = (EventTypes.Create, "") create = auth_events.get(key) if create and event.prev_event_ids()[0] == create.event_id: - if create.content["creator"] == event.state_key: + if room_version.msc2175_implicit_room_creator: + creator = create.sender + else: + creator = create.content[EventContentFields.ROOM_CREATOR] + if creator == event.state_key: return target_user_id = event.state_key @@ -1004,10 +1011,14 @@ def get_user_power_level(user_id: str, auth_events: StateMap["EventBase"]) -> in # that. key = (EventTypes.Create, "") create_event = auth_events.get(key) - if create_event is not None and create_event.content["creator"] == user_id: - return 100 - else: - return 0 + if create_event is not None: + if create_event.room_version.msc2175_implicit_room_creator: + creator = create_event.sender + else: + creator = create_event.content[EventContentFields.ROOM_CREATOR] + if creator == user_id: + return 100 + return 0 def get_named_level(auth_events: StateMap["EventBase"], name: str, default: int) -> int: |