Add room v3+ event ID calculator
This commit is contained in:
@@ -169,7 +169,10 @@ def make_auth_header(
|
|||||||
return authorization_headers[0].decode("utf-8")
|
return authorization_headers[0].decode("utf-8")
|
||||||
|
|
||||||
|
|
||||||
def redact_event(event):
|
def redact_event(
|
||||||
|
event: dict,
|
||||||
|
for_event_id: bool = False,
|
||||||
|
):
|
||||||
# Returns a redacted event as per
|
# Returns a redacted event as per
|
||||||
# the algorithm for v1/v2 rooms.
|
# the algorithm for v1/v2 rooms.
|
||||||
|
|
||||||
@@ -181,7 +184,6 @@ def redact_event(event):
|
|||||||
"state_key",
|
"state_key",
|
||||||
"content",
|
"content",
|
||||||
"hashes",
|
"hashes",
|
||||||
"signatures",
|
|
||||||
"depth",
|
"depth",
|
||||||
"prev_events",
|
"prev_events",
|
||||||
"prev_state",
|
"prev_state",
|
||||||
@@ -191,6 +193,9 @@ def redact_event(event):
|
|||||||
"membership",
|
"membership",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if not for_event_id:
|
||||||
|
allowed_keys.append("signatures")
|
||||||
|
|
||||||
redacted_event = {k: v for k, v in event.items() if k in allowed_keys}
|
redacted_event = {k: v for k, v in event.items() if k in allowed_keys}
|
||||||
|
|
||||||
if "type" in redacted_event and "content" in redacted_event:
|
if "type" in redacted_event and "content" in redacted_event:
|
||||||
@@ -236,6 +241,26 @@ def hash_and_sign_event(event_object):
|
|||||||
return event_object
|
return event_object
|
||||||
|
|
||||||
|
|
||||||
|
def make_ref_hash(
|
||||||
|
event: dict,
|
||||||
|
room_ver: int = 3,
|
||||||
|
):
|
||||||
|
stripped = redact_event(event, True)
|
||||||
|
evt_bytes = canonical_json(stripped)
|
||||||
|
|
||||||
|
evt_hash = base64.b64encode(
|
||||||
|
hashlib.sha256(evt_bytes).digest()
|
||||||
|
).decode("utf-8").rstrip("=")
|
||||||
|
|
||||||
|
if room_ver > 3:
|
||||||
|
while "+" in evt_hash:
|
||||||
|
evt_hash = evt_hash.replace("+", "-")
|
||||||
|
while "/" in evt_hash:
|
||||||
|
evt_hash = evt_hash.replace("/", "_")
|
||||||
|
|
||||||
|
return "$" + evt_hash
|
||||||
|
|
||||||
|
|
||||||
def room_version_from_id(room):
|
def room_version_from_id(room):
|
||||||
room_id_no_sigil = room.replace("!", "")
|
room_id_no_sigil = room.replace("!", "")
|
||||||
|
|
||||||
@@ -345,7 +370,7 @@ class http_client:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def strip_state(l) -> dict:
|
def strip_state(l) -> list:
|
||||||
if not isinstance(l, list):
|
if not isinstance(l, list):
|
||||||
return l
|
return l
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user