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
--- /dev/null
+###############################################################################
+# #
+# 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 <http://www.gnu.org/licenses/>. #
+# #
+###############################################################################
+
+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)
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