Implement Telodendria admin API

This commit is contained in:
2025-10-12 18:43:01 -04:00
parent 4603ed86ac
commit 8a2bae706e
4 changed files with 90 additions and 2 deletions

View File

@@ -1 +1 @@
- Implement Telodendria [admin API](https://git.telodendria.org/Telodendria/Telodendria/src/branch/master/docs/user/admin/README.md) Nothing yet...

View File

@@ -10,8 +10,10 @@ custom = Blueprint("custom", __name__)
from .conduwuit import conduwuit from .conduwuit import conduwuit
from .dendrite import dendrite from .dendrite import dendrite
from .telodendria import telo
from .synapse import synapse from .synapse import synapse
custom.register_blueprint(conduwuit) custom.register_blueprint(conduwuit)
custom.register_blueprint(dendrite) custom.register_blueprint(dendrite)
custom.register_blueprint(synapse) custom.register_blueprint(synapse)
custom.register_blueprint(telo)

View File

@@ -0,0 +1,86 @@
from flask import Blueprint, request, jsonify
from vona.globals import version
import vona.config as config
telo = Blueprint("telodendria", __name__)
# The telodendria admin API as specified by
# https://git.telodendria.org/Telodendria/Telodendria/src/branch/master/docs/user/admin/README.md
@telo.route("/_telodendria/admin/v1/restart", methods=["POST"])
@telo.route("/_telodendria/admin/v1/shutdown", methods=["POST"])
async def process_management(**kwargs):
return jsonify({})
@telo.route("/_telodendria/admin/v1/privileges/<lp>", methods=["GET", "PUT", "POST", "DELETE"])
@telo.route("/_telodendria/admin/v1/privileges/", methods=["GET", "POST"])
async def privileges(lp=None):
return jsonify({
"privileges": [
"GRANT_PRIVILEGES",
"PROC_CONTROL",
"ISSUE_TOKENS",
"DEACTIVATE",
"CONFIG",
"ALIAS",
"ALL"
]
})
@telo.route("/_telodendria/admin/v1/config", methods=["GET", "PUT", "POST"])
async def configuration():
if request.method == "GET":
return jsonify({
"listen": [
{
"tls": None,
"port": config.port,
"threads": 1,
"maxConnections": 32
}
],
"serverName": config.server_name,
"pid": "/dev/null",
"baseUrl": f"https://{config.server_name}/",
"identityServer": f"https://{config.server_name}/",
"runAs": None,
"federation": True,
"registration": config.users_can_register,
"log": {
"output": "stdout",
"level": "message",
"timestampFormat": "default",
"color": True
},
"maxCache": config.the_funny_number
})
return jsonify({"restart_required": True})
@telo.route("/_telodendria/admin/v1/stats")
async def stats():
return jsonify({
"memory_allocated": config.the_funny_number,
"version": version
})
@telo.route("/_telodendria/admin/v1/tokens/<name>", methods=["GET", "DELETE"])
@telo.route("/_telodendria/admin/v1/tokens", methods=["GET", "POST"])
async def tokens(name=None):
if request.method == "DELETE":
return jsonify({})
return jsonify({
"name": "vona",
"created_by": "vona",
"created_on": config.the_funny_number,
"expires_on": config.the_funny_number,
"used": config.the_funny_number,
"uses": config.the_funny_number
})

View File

@@ -9,7 +9,7 @@ import copy
import json import json
import re import re
version = "1.4.2" version = "1.4.3"
http_client = httpx.Client(headers={"User-Agent": f"Vona/{version}"}) http_client = httpx.Client(headers={"User-Agent": f"Vona/{version}"})