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")
|
||||
|
||||
|
||||
def redact_event(event):
|
||||
def redact_event(
|
||||
event: dict,
|
||||
for_event_id: bool = False,
|
||||
):
|
||||
# Returns a redacted event as per
|
||||
# the algorithm for v1/v2 rooms.
|
||||
|
||||
@@ -181,7 +184,6 @@ def redact_event(event):
|
||||
"state_key",
|
||||
"content",
|
||||
"hashes",
|
||||
"signatures",
|
||||
"depth",
|
||||
"prev_events",
|
||||
"prev_state",
|
||||
@@ -191,6 +193,9 @@ def redact_event(event):
|
||||
"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}
|
||||
|
||||
if "type" in redacted_event and "content" in redacted_event:
|
||||
@@ -236,6 +241,26 @@ def hash_and_sign_event(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):
|
||||
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):
|
||||
return l
|
||||
|
||||
|
||||
Reference in New Issue
Block a user