From f9431f1ad4e8b3c8924c67504dff5a85bf0f3b5c Mon Sep 17 00:00:00 2001 From: Eliot Berriot <contact@eliotberriot.com> Date: Wed, 25 Sep 2019 11:53:13 +0200 Subject: [PATCH] Hide blocked domains by default --- funkwhale_network/db.py | 23 +++++++++++++++-------- funkwhale_network/routes.py | 4 +++- tests/factories.py | 1 + tests/test_routes.py | 18 ++++++++++++++++++ 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/funkwhale_network/db.py b/funkwhale_network/db.py index 9553ea9..d983367 100644 --- a/funkwhale_network/db.py +++ b/funkwhale_network/db.py @@ -118,15 +118,22 @@ async def get_stats(conn): def get_domain_query(**kwargs): - supported_fields = [ - "up", - "open_registrations", - "federation_enabled", - "anonymous_can_listen", - "private", - ] + supported_fields = dict( + [ + ("up", "up"), + ("open_registrations", "open_registrations"), + ("federation_enabled", "federation_enabled"), + ("anonymous_can_listen", "anonymous_can_listen"), + ("private", "private"), + ("blocked", "domains.blocked"), + ] + ) base_query = "SELECT DISTINCT on (domain) domain, * FROM checks INNER JOIN domains ON checks.domain = domains.name{where_clause} ORDER BY domain, time DESC" - filters = [(key, value) for key, value in kwargs.items() if key in supported_fields] + filters = [ + (supported_fields[key], value) + for key, value in kwargs.items() + if key in supported_fields + ] if not filters: return base_query.format(where_clause=""), [] diff --git a/funkwhale_network/routes.py b/funkwhale_network/routes.py index 1a0a530..ba6a5fb 100644 --- a/funkwhale_network/routes.py +++ b/funkwhale_network/routes.py @@ -51,7 +51,9 @@ async def domains(request): if request.method == "GET": filters = await parser.parse(domain_filters, request) limit = filters.pop("limit", 0) - rows = await db.get_domains(request["conn"], private=False, **filters) + rows = await db.get_domains( + request["conn"], private=False, blocked=False, **filters + ) total = len(rows) if limit: rows = rows[:limit] diff --git a/tests/factories.py b/tests/factories.py index 938c27c..94bc665 100644 --- a/tests/factories.py +++ b/tests/factories.py @@ -43,6 +43,7 @@ class DBFactory(factory.Factory): class DomainFactory(DBFactory): name = factory.Faker("domain_name") node_name = factory.Faker("paragraph") + blocked = False class CheckFactory(DBFactory): diff --git a/tests/test_routes.py b/tests/test_routes.py index fbe9698..3c5fbc1 100644 --- a/tests/test_routes.py +++ b/tests/test_routes.py @@ -74,6 +74,24 @@ async def test_domains_get_filter_up(db_conn, client, factories, field, value): } +async def test_domains_exclude_blocked(db_conn, client, factories): + + blocked = await factories["Domain"].c(blocked=True) + await factories["Check"].c(private=False, domain=blocked["name"]) + check = await factories["Check"].c(private=False) + domain = await db.get_domain(db_conn, check["domain"]) + check["first_seen"] = domain["first_seen"] + check["node_name"] = domain["node_name"] + resp = await client.get("/api/domains") + assert resp.status == 200 + assert await resp.json() == { + "count": 1, + "next": None, + "previous": None, + "results": [serializers.serialize_domain_from_check(check)], + } + + async def test_domains_create(client, coroutine_mock, mocker): payload = {"name": "test.domain"} mocker.patch("funkwhale_network.crawler.fetch_nodeinfo", coroutine_mock()) -- GitLab