mirror of
https://git.pleroma.social/pleroma/relay.git
synced 2024-11-22 06:27:59 +00:00
fetch well-known url for nodeinfo
This commit is contained in:
parent
1727425bec
commit
f0e08f26b3
|
@ -104,8 +104,25 @@ async def push_message_to_actor(actor, message, our_key_id):
|
||||||
|
|
||||||
|
|
||||||
async def fetch_nodeinfo(domain):
|
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')
|
software = nodeinfo_data.get('software')
|
||||||
|
|
||||||
return software.get('name') if software else None
|
return software.get('name') if software else None
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,13 +12,18 @@ CACHE_TTL = CONFIG.get('cache-ttl', 3600)
|
||||||
ACTORS = TTLCache(CACHE_SIZE, CACHE_TTL)
|
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:
|
if uri in ACTORS and not force:
|
||||||
return ACTORS[uri]
|
return ACTORS[uri]
|
||||||
|
|
||||||
|
new_headers = {'Accept': 'application/activity+json'}
|
||||||
|
|
||||||
|
for k,v in headers.items():
|
||||||
|
new_headers[k.capitalize()] = v
|
||||||
|
|
||||||
try:
|
try:
|
||||||
async with aiohttp.ClientSession(trace_configs=[http_debug()]) as session:
|
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:
|
if resp.status != 200:
|
||||||
return None
|
return None
|
||||||
ACTORS[uri] = (await resp.json(encoding='utf-8', content_type=None))
|
ACTORS[uri] = (await resp.json(encoding='utf-8', content_type=None))
|
||||||
|
|
Loading…
Reference in a new issue