From: Izalia Mae Date: Fri, 4 Dec 2020 06:43:49 +0000 (-0500) Subject: fetch well-known url for nodeinfo X-Git-Tag: 0.1.0~5^2~3 X-Git-Url: https://reisub.nsupdate.info/git/?a=commitdiff_plain;h=f0e08f26b3f29235a12949870a3be72389b66fa4;p=relay.git%2F.git fetch well-known url for nodeinfo --- 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))