diff --git a/api/funkwhale_api/federation/tasks.py b/api/funkwhale_api/federation/tasks.py index 3d004a807..46e990685 100644 --- a/api/funkwhale_api/federation/tasks.py +++ b/api/funkwhale_api/federation/tasks.py @@ -643,8 +643,7 @@ def check_all_remote_instance_availability(): @celery.app.task(name="federation.check_single_remote_instance_availability") def check_single_remote_instance_availability(domain): try: - response = requests.get(f"https://{domain.name}/api/v1/instance/nodeinfo/2.0/") - nodeinfo = response.json() + nodeinfo = fetch_nodeinfo(domain.name) except Exception as e: logger.info( f"Domain {domain.name} could not be reached because of the following error : {e}. \ diff --git a/api/tests/federation/test_tasks.py b/api/tests/federation/test_tasks.py index 66e71cd84..7f19981a6 100644 --- a/api/tests/federation/test_tasks.py +++ b/api/tests/federation/test_tasks.py @@ -669,7 +669,18 @@ def test_fetch_collection(mocker, r_mock): def test_check_all_remote_instance_reachable(factories, r_mock): domain = factories["federation.Domain"]() r_mock.get( - f"https://{domain.name}/api/v1/instance/nodeinfo/2.0/", json={"version": "2"} + f"https://{domain.name}/api/v1/instance/nodeinfo/2.0", json={"version": "2"} + ) + r_mock.get( + f"https://{domain.name}/.well-known/nodeinfo", + json={ + "links": [ + { + "rel": "http://nodeinfo.diaspora.software/ns/schema/2.0", + "href": f"https://{domain.name}/api/v1/instance/nodeinfo/2.0", + } + ] + }, ) tasks.check_all_remote_instance_availability() domain = models.Domain.objects.get(name=domain.name) diff --git a/changes/changelog.d/2199-2.bugfix b/changes/changelog.d/2199-2.bugfix new file mode 100644 index 000000000..07f38d5e3 --- /dev/null +++ b/changes/changelog.d/2199-2.bugfix @@ -0,0 +1,2 @@ + +Fetch the nodeinfo endpoint from .well-known/nodeinfo when checking instance availability