mirror of
https://git.pleroma.social/pleroma/relay.git
synced 2025-04-20 01:26:43 +00:00
* ignore test*.py files * format requirements.txt to be more readable * only show note on home page if it is set * allow flake8 to check for more than just unused imports * remove a bunch of unused methods in `compat.RelayDatabase` * turn `Config` into a dataclass * replace database config methods with `RelayData` dataclass * rename `loads` to `cls` in `HttpClient.get`
57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
import aputils
|
|
import subprocess
|
|
import typing
|
|
|
|
from pathlib import Path
|
|
|
|
from .base import View, register_route
|
|
|
|
from .. import __version__
|
|
from ..misc import Response
|
|
|
|
if typing.TYPE_CHECKING:
|
|
from aiohttp.web import Request
|
|
|
|
|
|
VERSION = __version__
|
|
|
|
|
|
if Path(__file__).parent.parent.joinpath('.git').exists():
|
|
try:
|
|
commit_label = subprocess.check_output(["git", "rev-parse", "HEAD"]).strip().decode('ascii')
|
|
VERSION = f'{__version__} {commit_label}'
|
|
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
@register_route('/nodeinfo/{niversion:\\d.\\d}.json', '/nodeinfo/{niversion:\\d.\\d}')
|
|
class NodeinfoView(View):
|
|
async def get(self, request: Request, niversion: str) -> Response:
|
|
with self.database.session() as conn:
|
|
inboxes = conn.get_inboxes()
|
|
|
|
nodeinfo = aputils.Nodeinfo.new(
|
|
name = 'activityrelay',
|
|
version = VERSION,
|
|
protocols = ['activitypub'],
|
|
open_regs = not conn.get_config('whitelist-enabled'),
|
|
users = 1,
|
|
repo = 'https://git.pleroma.social/pleroma/relay' if niversion == '2.1' else None,
|
|
metadata = {
|
|
'approval_required': conn.get_config('approval-required'),
|
|
'peers': [inbox['domain'] for inbox in inboxes]
|
|
}
|
|
)
|
|
|
|
return Response.new(nodeinfo, ctype = 'json')
|
|
|
|
|
|
@register_route('/.well-known/nodeinfo')
|
|
class WellknownNodeinfoView(View):
|
|
async def get(self, request: Request) -> Response:
|
|
data = aputils.WellKnownNodeinfo.new_template(self.config.domain)
|
|
|
|
return Response.new(data, ctype = 'json')
|