import vona.globals as globals import vona.config as config from flask import ( Blueprint, jsonify, request, ) groups = Blueprint("groups", __name__) # This implements the C2S API for groups @groups.route("/_matrix/client/r0/groups//self/update_publicity", methods=["PUT"]) @groups.route("/_matrix/client/r0/groups//self/accept_invite", methods=["PUT"]) @groups.route("/_matrix/client/r0/groups//self/leave", methods=["PUT"]) @groups.route("/_matrix/client/r0/groups//admin/users/remove/", methods=["PUT"]) @groups.route("/_matrix/client/r0/groups//admin/rooms/", methods=["PUT", "DELETE"]) async def empty(**k): return jsonify({}) @groups.route("/_matrix/client/r0/publicised_groups/") @groups.route("/_matrix/client/r0/joined_groups") async def joined_groups(user=None): return jsonify({ "groups": [f"+vona:{config.server_name}"] }) @groups.route("/_matrix/client/r0/groups//summary") async def summary(group): return jsonify({ "profile": { "name": "Vona", "short_description": "", "long_description": "", "avatar_url": "", "is_public": 1, "is_openly_joinable": True }, "users_section": { "users": [], "roles": {}, "total_user_count_estimate": 0 }, "rooms_section": { "rooms": [], "categories": {}, "total_room_count_estimate": 0 }, "user": { "membership": "join", "is_public": 1, "is_privileged": 1, "is_publicised": True } }) @groups.route("/_matrix/client/r0/groups//rooms") async def rooms(group): return jsonify({ "chunk": [], "total_room_count_estimate": 0 }) @groups.route("/_matrix/client/r0/groups//invited_users") async def invited_users(group): return jsonify({ "chunk": [], "total_user_count_estimate": 0 }) @groups.route("/_matrix/client/r0/groups//users") async def users(group): return jsonify({ "chunk": [ { "user_id": f"@vona:{config.server_name}", "displayname": "Vona", "avatar_url": None, "is_public": True, "is_privileged": True, "attestation": globals.sign_json({ "group_id": group, "user_id": f"@vona:{config.server_name}", "valid_until_ms": globals.get_time() }) } ], "total_user_count_estimate": 1 }) @groups.route("/_matrix/client/r0/groups//profile", methods=["GET", "POST"]) async def profile(group): if request.method == "POST": return jsonify({}) return jsonify({ "name": "Vona", "short_description": "", "long_description": "", "avatar_url": "", "is_public": 1, "is_openly_joinable": True }) @groups.route("/_matrix/client/r0/create_group", methods=["POST"]) async def create_group(): return jsonify({ "group_id": f"+vona:{config.server_name}" })