kopia lustrzana https://gitlab.com/jaywink/federation
Add workaround for parsing a buggy older Hubzilla version nodeinfo
This has been fixed in later versions but there are quite a few versions out with the bug so add a workaround to not crash on those.merge-requests/130/head
rodzic
7590e65f79
commit
1066502591
|
@ -13,10 +13,15 @@ def fetch_nodeinfo_document(host):
|
|||
doc = json.loads(doc)
|
||||
|
||||
url, highest_version = '', 0.0
|
||||
for link in doc.get('links'):
|
||||
version = float(link.get('rel').split('/')[-1])
|
||||
if version > highest_version and version <= HIGHEST_SUPPORTED_NODEINFO_VERSION:
|
||||
url, highest_version = link.get('href'), version
|
||||
|
||||
if doc.get('0'):
|
||||
# Buggy NodeInfo from certain old Hubzilla versions
|
||||
url = doc.get('0', {}).get('href')
|
||||
else:
|
||||
for link in doc.get('links'):
|
||||
version = float(link.get('rel').split('/')[-1])
|
||||
if version > highest_version and version <= HIGHEST_SUPPORTED_NODEINFO_VERSION:
|
||||
url, highest_version = link.get('href'), version
|
||||
|
||||
if not url:
|
||||
return
|
||||
|
|
|
@ -11,6 +11,11 @@ NODEINFO_20_DOC = '{"version":"2.0","software":{"name":"diaspora","version":"0.7
|
|||
'22,"localComments":17671},"metadata":{"nodeName":"I Like Toast","xmppChat":false,"camo":{"' \
|
||||
'markdown":false,"opengraph":false,"remotePods":false},"adminAccount":"podmin"}}'
|
||||
|
||||
# Buggy NodeInfo well known found in certain older Hubzilla versions
|
||||
NODEINFO_WELL_KNOWN_BUGGY = '{"links":{"rel":"http:\/\/nodeinfo.diaspora.software\/ns\/schema\/1.0","href":"h' \
|
||||
'ttps:\/\/example.com\/nodeinfo\/1.0"},"0":{"rel":"http:\/\/nodeinfo.diaspo' \
|
||||
'ra.software\/ns\/schema\/2.0","href":"https:\/\/example.com\/nodeinfo\/2.0"}}'
|
||||
|
||||
NODEINFO2_10_DOC = """
|
||||
{
|
||||
"version": "1.0",
|
||||
|
|
|
@ -3,6 +3,7 @@ from unittest.mock import patch
|
|||
|
||||
from federation.hostmeta.fetchers import (
|
||||
fetch_nodeinfo_document, fetch_nodeinfo2_document, fetch_statisticsjson_document)
|
||||
from federation.tests.fixtures.hostmeta import NODEINFO_WELL_KNOWN_BUGGY
|
||||
|
||||
|
||||
class TestFetchNodeInfoDocument:
|
||||
|
@ -23,6 +24,17 @@ class TestFetchNodeInfoDocument:
|
|||
assert kwargs['url'] == 'https://example.com/2.0'
|
||||
mock_parse.assert_called_once_with(json.loads(self.dummy_doc), 'example.com')
|
||||
|
||||
@patch("federation.hostmeta.fetchers.fetch_document",
|
||||
return_value=(NODEINFO_WELL_KNOWN_BUGGY, 200, None), autospec=True)
|
||||
@patch("federation.hostmeta.fetchers.parse_nodeinfo_document", autospec=True)
|
||||
def test_makes_right_calls__buggy_nodeinfo_wellknown(self, mock_parse, mock_fetch):
|
||||
fetch_nodeinfo_document('example.com')
|
||||
args, kwargs = mock_fetch.call_args_list[0]
|
||||
assert kwargs['host'] == 'example.com'
|
||||
assert kwargs['path'] == '/.well-known/nodeinfo'
|
||||
args, kwargs = mock_fetch.call_args_list[1]
|
||||
assert kwargs['url'] == 'https://example.com/nodeinfo/2.0'
|
||||
|
||||
|
||||
class TestFetchNodeInfo2Document:
|
||||
@patch("federation.hostmeta.fetchers.fetch_document", return_value=('{"foo": "bar"}', 200, None), autospec=True)
|
||||
|
|
Ładowanie…
Reference in New Issue