diff --git a/litecord/blueprints/__init__.py b/litecord/blueprints/__init__.py index 831e2fe..b64b431 100644 --- a/litecord/blueprints/__init__.py +++ b/litecord/blueprints/__init__.py @@ -10,7 +10,8 @@ from .invites import bp as invites from .relationships import bp as relationships from .dms import bp as dms from .icons import bp as icons +from .nodeinfo import bp as nodeinfo __all__ = ['gateway', 'auth', 'users', 'guilds', 'channels', 'webhooks', 'science', 'voice', 'invites', 'relationships', - 'dms', 'icons'] + 'dms', 'icons', 'nodeinfo'] diff --git a/litecord/blueprints/nodeinfo.py b/litecord/blueprints/nodeinfo.py new file mode 100644 index 0000000..1f28e58 --- /dev/null +++ b/litecord/blueprints/nodeinfo.py @@ -0,0 +1,55 @@ +from quart import Blueprint, current_app as app, jsonify, request + +bp = Blueprint('nodeinfo', __name__) + + +@bp.route('/.well-known/nodeinfo') +async def _dummy_nodeinfo_index(): + proto = 'http' if not app.config['IS_SSL'] else 'https' + return jsonify({ + 'links': [{ + 'href': f'{proto}://{request.host}/nodeinfo/2.0.json', + 'rel': 'http://nodeinfo.diaspora.software/ns/schema/2.0' + }] + }) + + +@bp.route('/nodeinfo/2.0.json') +async def _dummy_nodeinfo(): + usercount = await app.db.fetchval(""" + SELECT COUNT(*) + FROM users + """) + + return jsonify({ + 'metadata': { + 'features': [ + 'discord_api' + ], + + 'nodeDescription': 'A Litecord instance', + 'nodeName': 'Litecord/Nya', + 'private': False, + + 'federation': {} + }, + 'openRegistrations': app.config['REGISTRATIONS'], + 'protocols': [], + 'software': { + 'name': 'litecord', + 'version': 'litecord v0', + }, + + 'services': { + 'inbound': [], + 'outbound': [], + }, + + 'usage': { + 'localPosts': -1, + 'users': { + 'total': usercount + } + }, + 'version': '2.0', + }) diff --git a/run.py b/run.py index e0c4065..8953814 100644 --- a/run.py +++ b/run.py @@ -14,7 +14,7 @@ import config from litecord.blueprints import ( gateway, auth, users, guilds, channels, webhooks, science, - voice, invites, relationships, dms, icons + voice, invites, relationships, dms, icons, nodeinfo ) # those blueprints are separated from the "main" ones @@ -104,6 +104,7 @@ def set_blueprints(app_): dms: '/users', icons: -1, + nodeinfo: -1, } for bp, suffix in bps.items():