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

Commit d115a4d

Browse files
committed
Merge pull request #6787 from matrix-org/rav/msc2260
* commit 'cc109b79d': fix bad variable ref update changelog changelog Implement updated auth rules from MSC2260
2 parents d880d2b + cc109b7 commit d115a4d

File tree

3 files changed

+36
-5
lines changed

3 files changed

+36
-5
lines changed

changelog.d/6787.feature

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Implement updated authorization rules for aliases events, from [MSC2260](https://github.com/matrix-org/matrix-doc/pull/2260).

synapse/api/room_versions.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ class RoomVersion(object):
5757
state_res = attr.ib() # int; one of the StateResolutionVersions
5858
enforce_key_validity = attr.ib() # bool
5959

60+
# bool: before MSC2260, anyone was allowed to send an aliases event
61+
special_case_aliases_auth = attr.ib(type=bool, default=False)
62+
6063

6164
class RoomVersions(object):
6265
V1 = RoomVersion(
@@ -65,34 +68,46 @@ class RoomVersions(object):
6568
EventFormatVersions.V1,
6669
StateResolutionVersions.V1,
6770
enforce_key_validity=False,
71+
special_case_aliases_auth=True,
6872
)
6973
V2 = RoomVersion(
7074
"2",
7175
RoomDisposition.STABLE,
7276
EventFormatVersions.V1,
7377
StateResolutionVersions.V2,
7478
enforce_key_validity=False,
79+
special_case_aliases_auth=True,
7580
)
7681
V3 = RoomVersion(
7782
"3",
7883
RoomDisposition.STABLE,
7984
EventFormatVersions.V2,
8085
StateResolutionVersions.V2,
8186
enforce_key_validity=False,
87+
special_case_aliases_auth=True,
8288
)
8389
V4 = RoomVersion(
8490
"4",
8591
RoomDisposition.STABLE,
8692
EventFormatVersions.V3,
8793
StateResolutionVersions.V2,
8894
enforce_key_validity=False,
95+
special_case_aliases_auth=True,
8996
)
9097
V5 = RoomVersion(
9198
"5",
9299
RoomDisposition.STABLE,
93100
EventFormatVersions.V3,
94101
StateResolutionVersions.V2,
95102
enforce_key_validity=True,
103+
special_case_aliases_auth=True,
104+
)
105+
MSC2260_DEV = RoomVersion(
106+
"org.matrix.msc2260",
107+
RoomDisposition.UNSTABLE,
108+
EventFormatVersions.V3,
109+
StateResolutionVersions.V2,
110+
enforce_key_validity=True,
96111
)
97112

98113

@@ -104,5 +119,6 @@ class RoomVersions(object):
104119
RoomVersions.V3,
105120
RoomVersions.V4,
106121
RoomVersions.V5,
122+
RoomVersions.MSC2260_DEV,
107123
)
108124
} # type: Dict[str, RoomVersion]

synapse/event_auth.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,48 +100,62 @@ def check(
100100
if not event.signatures.get(event_id_domain):
101101
raise AuthError(403, "Event not signed by sending server")
102102

103+
# Implementation of https://matrix.org/docs/spec/rooms/v1#authorization-rules
104+
#
105+
# 1. If type is m.room.create:
103106
if event.type == EventTypes.Create:
107+
# 1b. If the domain of the room_id does not match the domain of the sender,
108+
# reject.
104109
sender_domain = get_domain_from_id(event.sender)
105110
room_id_domain = get_domain_from_id(event.room_id)
106111
if room_id_domain != sender_domain:
107112
raise AuthError(
108113
403, "Creation event's room_id domain does not match sender's"
109114
)
110115

116+
# 1c. If content.room_version is present and is not a recognised version, reject
111117
room_version_prop = event.content.get("room_version", "1")
112118
if room_version_prop not in KNOWN_ROOM_VERSIONS:
113119
raise AuthError(
114120
403,
115121
"room appears to have unsupported version %s" % (room_version_prop,),
116122
)
117-
# FIXME
123+
118124
logger.debug("Allowing! %s", event)
119125
return
120126

127+
# 3. If event does not have a m.room.create in its auth_events, reject.
121128
creation_event = auth_events.get((EventTypes.Create, ""), None)
122-
123129
if not creation_event:
124130
raise AuthError(403, "No create event in auth events")
125131

132+
# additional check for m.federate
126133
creating_domain = get_domain_from_id(event.room_id)
127134
originating_domain = get_domain_from_id(event.sender)
128135
if creating_domain != originating_domain:
129136
if not _can_federate(event, auth_events):
130137
raise AuthError(403, "This room has been marked as unfederatable.")
131138

132-
# FIXME: Temp hack
139+
# 4. If type is m.room.aliases
133140
if event.type == EventTypes.Aliases:
141+
# 4a. If event has no state_key, reject
134142
if not event.is_state():
135143
raise AuthError(403, "Alias event must be a state event")
136144
if not event.state_key:
137145
raise AuthError(403, "Alias event must have non-empty state_key")
146+
147+
# 4b. If sender's domain doesn't matches [sic] state_key, reject
138148
sender_domain = get_domain_from_id(event.sender)
139149
if event.state_key != sender_domain:
140150
raise AuthError(
141151
403, "Alias event's state_key does not match sender's domain"
142152
)
143-
logger.debug("Allowing! %s", event)
144-
return
153+
154+
# 4c. Otherwise, allow.
155+
# This is removed by https://github.com/matrix-org/matrix-doc/pull/2260
156+
if room_version_obj.special_case_aliases_auth:
157+
logger.debug("Allowing! %s", event)
158+
return
145159

146160
if logger.isEnabledFor(logging.DEBUG):
147161
logger.debug("Auth events: %s", [a.event_id for a in auth_events.values()])

0 commit comments

Comments
 (0)