From 3e2a77c490cc47724053ccbe1735e5fe15769b0a Mon Sep 17 00:00:00 2001 From: Jason Robinson Date: Wed, 13 Apr 2016 21:54:20 +0300 Subject: [PATCH] Add support for generating .well-known/nodeinfo Was forgotten from previous release. Refs: #11 --- CHANGELOG.md | 5 ++++ federation/hostmeta/generators.py | 27 ++++++++++++++++++++ federation/tests/hostmeta/test_generators.py | 7 ++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 031039e..c168c41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [unreleased] + +### Added +- Support for generating `.well-known/nodeinfo` document, which was forgotten from the 0.3.0 release. Method `federation.hostmeta.generators.get_nodeinfo_well_known_document` does this task. It requires an `url` which should be the full base url of the host. Optionally `document_path` can be specified, but it is optional and defaults to the one in the NodeInfo spec. + ## [0.3.0] - 2016-04-13 ### Added diff --git a/federation/hostmeta/generators.py b/federation/hostmeta/generators.py index 52bb041..0015f4b 100644 --- a/federation/hostmeta/generators.py +++ b/federation/hostmeta/generators.py @@ -262,3 +262,30 @@ class NodeInfo(object): if self.raise_on_validate: raise warnings.warn("NodeInfo document generated does not validate against NodeInfo 1.0 specification.") + + +# The default NodeInfo document path +NODEINFO_DOCUMENT_PATH = "/nodeinfo/1.0" + + +def get_nodeinfo_well_known_document(url, document_path=None): + """Generate a NodeInfo .well-known document. + + See spec: http://nodeinfo.diaspora.software + + Args: + url (str) - The full base url with protocol, ie https://example.com + document_path (str) - Custom NodeInfo document path if supplied + + :rtype: dict + """ + return { + "links": [ + { + "rel": "http://nodeinfo.diaspora.software/ns/schema/1.0", + "href": "{url}{path}".format( + url=url, path=document_path or NODEINFO_DOCUMENT_PATH + ) + } + ] + } diff --git a/federation/tests/hostmeta/test_generators.py b/federation/tests/hostmeta/test_generators.py index 25fd894..ffc4698 100644 --- a/federation/tests/hostmeta/test_generators.py +++ b/federation/tests/hostmeta/test_generators.py @@ -4,7 +4,7 @@ from jsonschema import validate, ValidationError import pytest from federation.hostmeta.generators import generate_host_meta, generate_legacy_webfinger, generate_hcard, \ - SocialRelayWellKnown, NodeInfo + SocialRelayWellKnown, NodeInfo, get_nodeinfo_well_known_document DIASPORA_HOSTMETA = """ @@ -189,3 +189,8 @@ class TestNodeInfoGenerator(object): def test_nodeinfo_generator_render_returns_a_document(self): nodeinfo = self._valid_nodeinfo() assert isinstance(nodeinfo.render(), str) + + def test_nodeinfo_wellknown_document(self): + wellknown = get_nodeinfo_well_known_document("https://example.com") + assert wellknown["links"][0]["rel"] == "http://nodeinfo.diaspora.software/ns/schema/1.0" + assert wellknown["links"][0]["href"] == "https://example.com/nodeinfo/1.0"