Room version based on room ID

This commit is contained in:
2025-10-07 16:21:28 -04:00
parent 316358a82a
commit 7e77f009db
4 changed files with 33 additions and 10 deletions

View File

@@ -446,7 +446,7 @@ async def room_summary(roomId):
"join_rule": "public", "join_rule": "public",
"room_type": "m.room", "room_type": "m.room",
"membership": "join", "membership": "join",
"room_version": 2 "room_version": globals.room_version_from_id(roomId)
}) })

View File

@@ -4,14 +4,13 @@ import tomllib
addr: str = "127.0.0.1" addr: str = "127.0.0.1"
port: int = 5000 port: int = 5000
allow_registration: bool = False users_can_register: bool = False
the_funny_number: int = 1337 the_funny_number: int = 1337
cat: str = "/etc/vona/cat.jpg" cat: str = "/etc/vona/cat.jpg"
server_name: str = "" server_name: str = ""
signing_key: str = "" signing_key: str = ""
support: dict = {"contacts": []} support: dict = {"contacts": []}
users_can_register: bool = False
_CONFIG_PATH = Path("/etc/vona/config.toml") _CONFIG_PATH = Path("/etc/vona/config.toml")
@@ -57,7 +56,7 @@ def _validate_cat_path(cat_path: str) -> Path:
def _apply_config(cfg: dict) -> None: def _apply_config(cfg: dict) -> None:
global addr, port, allow_registration, server_name, signing_key, cat, support global addr, port, server_name, signing_key, cat, support, users_can_register
if "address" in cfg: if "address" in cfg:
addr = str(cfg["address"]) addr = str(cfg["address"])
@@ -68,9 +67,6 @@ def _apply_config(cfg: dict) -> None:
except (TypeError, ValueError): except (TypeError, ValueError):
_warn(f"Invalid port in config: {cfg.get('port')}; using default {port}") _warn(f"Invalid port in config: {cfg.get('port')}; using default {port}")
if "allow_registration" in cfg:
allow_registration = bool(cfg["allow_registration"])
if "server_name" in cfg: if "server_name" in cfg:
server_name = str(cfg["server_name"]) server_name = str(cfg["server_name"])
else: else:

View File

@@ -26,7 +26,7 @@ def send_join(request, roomId) -> dict:
"content": { "content": {
"m.federate": True, "m.federate": True,
"creator": f"@vona:{server_name}", "creator": f"@vona:{server_name}",
"room_version": "2" "room_version": globals.room_version_from_id(roomId)
}, },
"event_id": event_ids[0], "event_id": event_ids[0],
"origin_server_ts": 1, "origin_server_ts": 1,
@@ -350,7 +350,7 @@ async def make_join(roomId, userId):
return jsonify({ return jsonify({
"event": globals.hash_and_sign_event(join), "event": globals.hash_and_sign_event(join),
"room_version": "2" "room_version": globals.room_version_from_id(roomId)
}) })
@server.route("/_matrix/federation/v1/publicRooms", methods=["POST", "GET"]) @server.route("/_matrix/federation/v1/publicRooms", methods=["POST", "GET"])

View File

@@ -1,3 +1,4 @@
from collections import Counter
import vona.config as config import vona.config as config
import nacl.signing import nacl.signing
import hashlib import hashlib
@@ -7,7 +8,7 @@ import copy
import json import json
import re import re
version = "25w41b" version = "1.4.2"
def canonical_json(value): def canonical_json(value):
@@ -223,3 +224,29 @@ def hash_and_sign_event(event_object):
signed_object = sign_json(stripped_object) signed_object = sign_json(stripped_object)
event_object["signatures"] = signed_object["signatures"] event_object["signatures"] = signed_object["signatures"]
return event_object return event_object
def room_version_from_id(room_id):
room_id_no_sigil = room_id.replace("!", "")
hexadecimal_room_id = bytes(room_id_no_sigil, "utf-8").hex()
if "1" not in hexadecimal_room_id and "2" not in hexadecimal_room_id:
# NOTE: v2 if impossible from room ID alone
hexadecimal_room_id = "2" + hexadecimal_room_id[1:]
def remove_chars(s):
return re.sub("[^12]", "", s)
nums = remove_chars(hexadecimal_room_id)
def most_common_character(s):
s = s.replace(" ", "").lower()
counts = Counter(s)
most_common = counts.most_common(1)
return most_common[0] if most_common else None
return most_common_character(nums)[0]