From f0e08f26b3f29235a12949870a3be72389b66fa4 Mon Sep 17 00:00:00 2001 From: Izalia Mae Date: Fri, 4 Dec 2020 01:43:49 -0500 Subject: [PATCH] fetch well-known url for nodeinfo --- relay/actor.py | 19 ++++++++++++++++++- relay/remote_actor.py | 9 +++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/relay/actor.py b/relay/actor.py index b304721..d0e1f8b 100644 --- a/relay/actor.py +++ b/relay/actor.py @@ -104,8 +104,25 @@ async def push_message_to_actor(actor, message, our_key_id): async def fetch_nodeinfo(domain): - nodeinfo_data = await fetch_actor(f'https://{domain}/nodeinfo/2.0.json') + headers = {'Accept': 'application/activity+json'} + nodeinfo_url = None + + wk_nodeinfo = await fetch_actor(f'https://{domain}/.well-known/nodeinfo', headers=headers) + + if not wk_nodeinfo: + return + + for link in wk_nodeinfo.get('links', ''): + if link['rel'] == 'http://nodeinfo.diaspora.software/ns/schema/2.0': + nodeinfo_url = link['href'] + break + + if not nodeinfo_url: + return + + nodeinfo_data = await fetch_actor(nodeinfo_url) software = nodeinfo_data.get('software') + return software.get('name') if software else None diff --git a/relay/remote_actor.py b/relay/remote_actor.py index faa0ced..279ada7 100644 --- a/relay/remote_actor.py +++ b/relay/remote_actor.py @@ -12,13 +12,18 @@ CACHE_TTL = CONFIG.get('cache-ttl', 3600) ACTORS = TTLCache(CACHE_SIZE, CACHE_TTL) -async def fetch_actor(uri, force=False): +async def fetch_actor(uri, headers={}, force=False): if uri in ACTORS and not force: return ACTORS[uri] + new_headers = {'Accept': 'application/activity+json'} + + for k,v in headers.items(): + new_headers[k.capitalize()] = v + try: async with aiohttp.ClientSession(trace_configs=[http_debug()]) as session: - async with session.get(uri, headers={'Accept': 'application/activity+json'}) as resp: + async with session.get(uri, headers=new_headers) as resp: if resp.status != 200: return None ACTORS[uri] = (await resp.json(encoding='utf-8', content_type=None))