diff options
author | Erik Johnston <erik@matrix.org> | 2014-09-24 11:37:06 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2014-09-24 11:37:14 +0100 |
commit | 4e79b09dd97a1dda6b1ea87325302b95feb0a23e (patch) | |
tree | cccd057e9549bbaecedbb6243e4f75921285fa9a /synapse/api/events | |
parent | Fix test. (diff) | |
download | synapse-4e79b09dd97a1dda6b1ea87325302b95feb0a23e.tar.xz |
Fill out the prune_event method.
Diffstat (limited to 'synapse/api/events')
-rw-r--r-- | synapse/api/events/utils.py | 37 |
1 files changed, 31 insertions, 6 deletions
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 |