From: Michael Tremer Date: Tue, 30 Dec 2025 11:45:49 +0000 (+0000) Subject: api: Export any reports over the API X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=479ed64bc35358c656f62a96f6c569e8ceceebc2;p=dbl.git api: Export any reports over the API Signed-off-by: Michael Tremer --- diff --git a/Makefile.am b/Makefile.am index 995d37c..7ab311d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -64,7 +64,8 @@ dist_pkgpython_PYTHON = \ dist_pkgpython_api_PYTHON = \ src/dnsbl/api/__init__.py \ - src/dnsbl/api/lists.py + src/dnsbl/api/lists.py \ + src/dnsbl/api/reports.py pkgpython_apidir = $(pkgpythondir)/api diff --git a/src/dnsbl/api/__init__.py b/src/dnsbl/api/__init__.py index 7d69f6d..c2bc474 100644 --- a/src/dnsbl/api/__init__.py +++ b/src/dnsbl/api/__init__.py @@ -49,3 +49,4 @@ def require_api_key(api_key: str = fastapi.Depends(api_key_header)): # Import any endpoints from . import lists +from . import reports diff --git a/src/dnsbl/api/reports.py b/src/dnsbl/api/reports.py new file mode 100644 index 0000000..84f3f04 --- /dev/null +++ b/src/dnsbl/api/reports.py @@ -0,0 +1,54 @@ +############################################################################### +# # +# dnsbl - A DNS Blocklist Compositor For IPFire # +# Copyright (C) 2025 IPFire Development Team # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +# # +############################################################################### + +import fastapi +import typing + +from .. import reports + +# Import the main app +from . import app +from . import backend + +# Create a router +router = fastapi.APIRouter( + prefix="/reports", + tags=["Reports"], +) + +def get_report_from_path(id: str = fastapi.Path(...)) -> reports.Report: + """ + Fetches a report by its ID + """ + return backend.reports.get_by_id(id) + +@router.get("") +def get_reports() -> typing.List[reports.Report]: + return [l for l in backend.reports] + +@router.get("/{id}") +def get_report(report = fastapi.Depends(get_report_from_path)) -> reports.Report: + if not report: + raise fastapi.HTTPException(404, "Could not find report") + + return report + +# Include our endpoints +app.include_router(router) diff --git a/src/dnsbl/reports.py b/src/dnsbl/reports.py index 68bce05..15f0910 100644 --- a/src/dnsbl/reports.py +++ b/src/dnsbl/reports.py @@ -43,6 +43,19 @@ class Reports(object): return self.backend.db.fetch(stmt) + def get_by_id(self, id): + stmt = ( + sqlmodel + .select( + Report, + ) + .where( + Report.id == id, + ) + ) + + return self.backend.db.fetch_one(stmt) + def create(self, **kwargs): """ Creates a new report