diff --git a/synapse/api/events/utils.py b/synapse/api/events/utils.py index dfefb2662a..3d8b9a1db1 100644 --- a/synapse/api/events/utils.py +++ b/synapse/api/events/utils.py @@ -13,7 +13,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -from .room import RoomMemberEvent +from .room import ( + RoomMemberEvent, RoomJoinRulesEvent, RoomPowerLevelsEvent, + RoomAddStateLevelEvent, RoomSendEventLevelEvent, RoomOpsPowerLevelsEvent, + RoomAliasesEvent, RoomCreateEvent, +) def prune_event(event): """ Prunes the given event of all keys we don't know about or think could @@ -27,12 +31,33 @@ def prune_event(event): # Remove all extraneous fields. event.unrecognized_keys = {} + new_content = {} + + def add_fields(*fields): + for field in fields: + if field in event.content: + new_content[field] = event.content[field] + if event.type == RoomMemberEvent.TYPE: - new_content = { - "membership": event.content["membership"] - } - else: - new_content = {} + add_fields("membership") + elif event.type == RoomCreateEvent.TYPE: + add_fields("creator") + elif event.type == RoomJoinRulesEvent.TYPE: + add_fields("join_rule") + elif event.type == RoomPowerLevelsEvent.TYPE: + # TODO: Actually check these are valid user_ids etc. + add_fields("default") + for k, v in event.content.items(): + if k.startswith("@") and isinstance(v, (int, long)): + new_content[k] = v + elif event.type == RoomAddStateLevelEvent.TYPE: + add_fields("level") + elif event.type == RoomSendEventLevelEvent.TYPE: + add_fields("level") + elif event.type == RoomOpsPowerLevelsEvent.TYPE: + add_fields("kick_level", "ban_level", "delete_level") + elif event.type == RoomAliasesEvent.TYPE: + add_fields("aliases") event.content = new_content