|
|
|
@ -89,7 +89,46 @@ def prune_event(event): |
|
|
|
|
return type(event)(allowed_fields) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def serialize_event(e, time_now_ms, client_event=True, strip_ids=False): |
|
|
|
|
def format_event_raw(d): |
|
|
|
|
return d |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def format_event_for_client_v1(d): |
|
|
|
|
d["user_id"] = d.pop("sender", None) |
|
|
|
|
|
|
|
|
|
move_keys = ("age", "redacted_because", "replaces_state", "prev_content") |
|
|
|
|
for key in move_keys: |
|
|
|
|
if key in d["unsigned"]: |
|
|
|
|
d[key] = d["unsigned"][key] |
|
|
|
|
|
|
|
|
|
drop_keys = ( |
|
|
|
|
"auth_events", "prev_events", "hashes", "signatures", "depth", |
|
|
|
|
"unsigned", "origin" |
|
|
|
|
) |
|
|
|
|
for key in drop_keys: |
|
|
|
|
d.pop(key, None) |
|
|
|
|
return d |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def format_event_for_client_v2(d): |
|
|
|
|
drop_keys = ( |
|
|
|
|
"auth_events", "prev_events", "hashes", "signatures", "depth", "origin" |
|
|
|
|
) |
|
|
|
|
for key in drop_keys: |
|
|
|
|
d.pop(key, None) |
|
|
|
|
return d |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def format_event_for_client_v2_without_event_id(d): |
|
|
|
|
d = format_event_for_client_v2(d) |
|
|
|
|
d.pop("room_id", None) |
|
|
|
|
d.pop("event_id", None) |
|
|
|
|
return d |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def serialize_event(e, time_now_ms, as_client_event=True, |
|
|
|
|
event_format=format_event_for_client_v1, |
|
|
|
|
token_id=None): |
|
|
|
|
# FIXME(erikj): To handle the case of presence events and the like |
|
|
|
|
if not isinstance(e, EventBase): |
|
|
|
|
return e |
|
|
|
@ -99,48 +138,22 @@ def serialize_event(e, time_now_ms, client_event=True, strip_ids=False): |
|
|
|
|
# Should this strip out None's? |
|
|
|
|
d = {k: v for k, v in e.get_dict().items()} |
|
|
|
|
|
|
|
|
|
if not client_event: |
|
|
|
|
# set the age and keep all other keys |
|
|
|
|
if "age_ts" in d["unsigned"]: |
|
|
|
|
d["unsigned"]["age"] = time_now_ms - d["unsigned"]["age_ts"] |
|
|
|
|
return d |
|
|
|
|
|
|
|
|
|
if "age_ts" in d["unsigned"]: |
|
|
|
|
d["age"] = time_now_ms - d["unsigned"]["age_ts"] |
|
|
|
|
del d["unsigned"]["age_ts"] |
|
|
|
|
|
|
|
|
|
d["user_id"] = d.pop("sender", None) |
|
|
|
|
d["unsigned"]["age"] = time_now_ms - d["unsigned"]["age_ts"] |
|
|
|
|
d["unsigned"]["age_ts"] |
|
|
|
|
|
|
|
|
|
if "redacted_because" in e.unsigned: |
|
|
|
|
d["redacted_because"] = serialize_event( |
|
|
|
|
d["unsigned"]["redacted_because"] = serialize_event( |
|
|
|
|
e.unsigned["redacted_because"], time_now_ms |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
del d["unsigned"]["redacted_because"] |
|
|
|
|
|
|
|
|
|
if "redacted_by" in e.unsigned: |
|
|
|
|
d["redacted_by"] = e.unsigned["redacted_by"] |
|
|
|
|
del d["unsigned"]["redacted_by"] |
|
|
|
|
if token_id is not None: |
|
|
|
|
if token_id == e.internal_metadata["token_id"]: |
|
|
|
|
txn_id = e.internal_metadata.get("txn_id", None) |
|
|
|
|
if txn_id is not None: |
|
|
|
|
d["unsigned"]["transaction_id"] = txn_id |
|
|
|
|
|
|
|
|
|
if "replaces_state" in e.unsigned: |
|
|
|
|
d["replaces_state"] = e.unsigned["replaces_state"] |
|
|
|
|
del d["unsigned"]["replaces_state"] |
|
|
|
|
|
|
|
|
|
if "prev_content" in e.unsigned: |
|
|
|
|
d["prev_content"] = e.unsigned["prev_content"] |
|
|
|
|
del d["unsigned"]["prev_content"] |
|
|
|
|
|
|
|
|
|
del d["auth_events"] |
|
|
|
|
del d["prev_events"] |
|
|
|
|
del d["hashes"] |
|
|
|
|
del d["signatures"] |
|
|
|
|
d.pop("depth", None) |
|
|
|
|
d.pop("unsigned", None) |
|
|
|
|
d.pop("origin", None) |
|
|
|
|
d.pop("prev_state", None) |
|
|
|
|
|
|
|
|
|
if strip_ids: |
|
|
|
|
d.pop("room_id", None) |
|
|
|
|
d.pop("event_id", None) |
|
|
|
|
|
|
|
|
|
return d |
|
|
|
|
if as_client_event: |
|
|
|
|
return event_format(d) |
|
|
|
|
else: |
|
|
|
|
return d |
|
|
|
|