diff --git a/simple_webfinger/app.py b/simple_webfinger/app.py index 02841e7..cf3f3ec 100644 --- a/simple_webfinger/app.py +++ b/simple_webfinger/app.py @@ -48,12 +48,10 @@ def get_account_links(user: str, data: dict) -> list: return links -def filter_links(links: dict[str, str], rel: str) -> list: +def filter_links(links: dict[str, str], rel: list[str]) -> list: """ Filter links by rel provided. """ - if isinstance(rel, str): - rel = [rel] new_links = [] for link in links: if link["rel"] in rel: @@ -105,7 +103,8 @@ def create_app(config={}): # If we have a 'rel' value on the request, filter down to the requested rel # https://datatracker.ietf.org/doc/html/rfc7033#section-4.3 - rel = request.args.get("rel") + print(request.args) + rel = request.args.getlist("rel") if rel: links = filter_links(links, rel) diff --git a/tests/test_basic.py b/tests/test_basic.py index 1fc1878..b0f5cd5 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -44,3 +44,31 @@ def test_invalid_user_request(app, client): """ response = client.get("/.well-known/webfinger?resource=nikdoof@doofnet.uk") assert response.status_code == 404 + +def test_rel_filtering(client): + """ + Check that filtering links by rel work correctly + """ + response = client.get("/.well-known/webfinger?resource=acct:nikdoof@doofnet.uk&rel=self") + assert response.status_code == 200 + + assert len(response.json['links']) + for link in response.json['links']: + assert link['rel'] == 'self' + +def test_multiple_rel_filtering(client): + """ + Check that filtering links by mulitple rel work correctly + """ + rels = ['self', 'http://webfinger.net/rel/profile-page'] + params = { + 'resource': 'acct:nikdoof@doofnet.uk', + 'rel': rels, + } + + response = client.get("/.well-known/webfinger", query_string=params) + assert response.status_code == 200 + + assert len(response.json['links']) > 1 + for link in response.json['links']: + assert link['rel'] in rels