Skip to content
Snippets Groups Projects
Verified Commit f9431f1a authored by Eliot Berriot's avatar Eliot Berriot
Browse files

Hide blocked domains by default

parent 38c11217
No related branches found
No related tags found
No related merge requests found
......@@ -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=""), []
......
......@@ -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]
......
......@@ -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):
......
......@@ -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())
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment