@@ -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