]> git.ipfire.org Git - ipfire.org.git/commitdiff
dbl: Improve search result and show it on report pages
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 14 Jan 2026 18:26:34 +0000 (18:26 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 14 Jan 2026 18:26:34 +0000 (18:26 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/dbl.py
src/templates/dbl/reports/show.html
src/templates/dbl/search.html
src/web/dbl.py

index ce19b21953020e2d1e11ed06d465e25e4d0288e2..65bc2095d08598347e10064bd46bc275164c856a 100644 (file)
@@ -116,7 +116,9 @@ class DBL(Object):
                                tasks[task] = result[slug]
 
                # Return a mapping with the list and domains
-               return { task.result() : tasks[task] for task in tasks }
+               return {
+                       task.result() : SearchResult(self.backend, **tasks[task]) for task in tasks
+               }
 
 
 class Model(pydantic.BaseModel):
@@ -344,6 +346,13 @@ class Report(Model):
        # Closed By
        closed_by : str | None = None
 
+       # Closed?
+       def is_closed(self):
+               if self.closed_at:
+                       return True
+
+               return False
+
        # Comment
        comment : str = ""
 
@@ -406,3 +415,14 @@ class DomainHistory(Model):
 
        # Allows
        allows: int = 0
+
+
+class SearchResult(Model):
+       # Domain
+       domain: str
+
+       # Changed At
+       changed_at: datetime.datetime
+
+       # Status
+       status: str
index 4df43eac269622ba663b70e68b055373e685aa60..58452da04211e6efd046941619b9817043587661 100644 (file)
                                                        {% if report.comment %}
                                                                <pre>{{ report.comment }}</pre>
                                                        {% end %}
+
+                                                       {# Status #}
+                                                       {% if status %}
+                                                               <h5 class="title is-5">
+                                                                       {{ _("Status") }}
+                                                               </h5>
+
+                                                               <ul>
+                                                                       {% for l, s in sorted(status.items()) %}
+                                                                               <li>
+                                                                                       <a href="/dbl/lists/{{ l.slug }}/domains/{{ s.domain }}">
+                                                                                               {% if s.status == "ALLOWED" %}
+                                                                                                       {{ _("%(name)s is currently allowed on %(list)s") % {
+                                                                                                               "name"    : report.name,
+                                                                                                               "list"    : l,
+                                                                                                       } }}
+                                                                                               {% elif s.status == "BLOCKED" %}
+                                                                                                       {{ _("%(name)s is currently blocked on %(list)s") % {
+                                                                                                               "name"    : report.name,
+                                                                                                               "list"    : l,
+                                                                                                       } }}
+                                                                                               {% end %}
+                                                                                       </a>
+                                                                               </li>
+                                                                       {% end %}
+                                                               </ul>
+                                                       {% end %}
                                                </div>
                                        </div>
                                </div>
index 5408b10ce254dcec4d3dd850b6a4ba2af13689c8..67317f21e4108ef41cd2cad5eec4b4528beed266 100644 (file)
@@ -23,7 +23,7 @@
                <div class="container">
                        {# Show any results #}
                        {% if results %}
-                               {% for list, domains in sorted(results.items()) %}
+                               {% for list, result in sorted(results.items()) %}
                                        <div class="block">
                                                <h5 class="title is-5">
                                                        <a href="/dbl/lists/{{ list.slug }}">
                                                </h5>
 
                                                <div class="content">
-                                                       {{ _("There is one matching domain on this list:",
-                                                                       "There are %(num)s matching domains on this list:", len(domains)) % \
-                                                               { "num" : len(domains) } }}
-
-                                                       <ul>
-                                                               {% for domain in domains %}
-                                                                       <li>
-                                                                               <a href="/dbl/lists/{{ list.slug }}/domains/{{ domain }}">
-                                                                                       {{ format_domain(domain) }}
-                                                                               </a>
-                                                                       </li>
-                                                               {% end %}
-                                                       </ul>
+                                                       {% if result.status == "ALLOWED" %}
+                                                               <p>
+                                                                       <span class="icon-text">
+                                                                               <span class="icon has-text-success">
+                                                                                       <i class="fas fa-check"></i>
+                                                                               </span>
+                                                                               <span>
+                                                                                       <a href="/dbl/lists/{{ list.slug }}/domains/{{ result.domain }}">
+                                                                                               {{ _("%s is currently allowed") % format_domain(result.domain) }}
+                                                                                       </a>
+                                                                               </span>
+                                                                       </span>
+                                                               </p>
+                                                       {% elif result.status == "BLOCKED" %}
+                                                               <p>
+                                                                       <span class="icon-text">
+                                                                               <span class="icon has-text-danger">
+                                                                                       <i class="fas fa-x"></i>
+                                                                               </span>
+                                                                               <span>
+                                                                                       <a href="/dbl/lists/{{ list.slug }}/domains/{{ result.domain }}">
+                                                                                               {{ _("%s is currently blocked") % format_domain(result.domain) }}
+                                                                                       </a>
+                                                                               </span>
+                                                                       </span>
+                                                               </p>
+                                                       {% end %}
                                                </div>
                                        </div>
                                {% end %}
index 0d370fc666e6897d0a90f8aa7aa5768e98c735c3..73bb7057754e5b92939073753ef1d3112bbb8c92 100644 (file)
@@ -133,7 +133,13 @@ class ReportHandler(base.AnalyticsMixin, BaseHandler):
                # Fetch the list
                list = await report.get_list()
 
-               self.render("dbl/reports/show.html", report=report, list=list)
+               # Fetch the domain status
+               if report.is_closed():
+                       status = None
+               else:
+                       status = await self.backend.dbl.search(report.name)
+
+               self.render("dbl/reports/show.html", report=report, list=list, status=status)
 
 
 class SearchHandler(base.AnalyticsMixin, BaseHandler):