]> git.ipfire.org Git - dbl.git/commitdiff
dnsbl: Add command to remove a source
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 6 Dec 2025 19:38:56 +0000 (19:38 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 6 Dec 2025 19:38:56 +0000 (19:38 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/dnsbl/lists.py
src/dnsbl/sources.py
src/scripts/dnsbl.in

index b2c94e7d444b27d9b7d366a80cbb011023e416e8..47b8a78204cd7bce5aa9bac8e749ee5931e091f4 100644 (file)
@@ -144,6 +144,21 @@ class List(sqlmodel.SQLModel, database.BackendMixin, table=True):
                 },
        )
 
+       # Delete Source!
+
+       def delete_source(self, name, **kwargs):
+               """
+                       Removes a source from the list
+               """
+               # Delete the source
+               for source in self.sources:
+                       if source.name == name:
+                               source.delete(**kwargs)
+                               break
+
+               # The list has now been updated
+               self.updated_at = sqlmodel.func.current_timestamp()
+
        # Updated At
        updated_at : datetime.datetime | None
 
index dcad9d73b5c49fff96b6aa4143cac3659ecd838e..19344a912ce190d6aecf6e7e8557aa8e88576e02 100644 (file)
@@ -26,6 +26,7 @@ import sqlmodel
 
 from . import database
 from . import util
+from .i18n import _
 
 # Setup logging
 log = logging.getLogger(__name__)
@@ -108,6 +109,18 @@ class Source(sqlmodel.SQLModel, database.BackendMixin, table=True):
        # Domains
        domains : "SourceDomain" = sqlmodel.Relationship(back_populates="source")
 
+       # Delete!
+
+       def delete(self, deleted_by):
+               """
+                       Deletes the source
+               """
+               self.deleted_at = sqlmodel.func.current_timestamp()
+               self.deleted_by = deleted_by
+
+               # Log action
+               log.info(_("Source '%s' has been deleted from '%s'") % (self, self.list))
+
        def update(self):
                """
                        Updates this source.
index 82ac600e54d10568bb1af10ef57937974a34bdda..03254143c6ce8ebbb6120462a4badcee0794eea8 100644 (file)
@@ -77,7 +77,7 @@ class CLI(object):
                delete = subparsers.add_parser("delete", help=_("Delete a list"))
                delete.add_argument("list", help=_("The name of the list"))
                delete.add_argument("--deleted-by", required=True,
-                               default=os.environ.get("USER"), help=_("The person deleting  the list"))
+                               default=os.environ.get("USER"), help=_("The person deleting the list"))
                delete.set_defaults(func=self.__delete)
 
                # show
@@ -121,6 +121,17 @@ class CLI(object):
                                default=os.environ.get("USER"), help=_("The creator of the source"))
                add_source.set_defaults(func=self.__add_source)
 
+               # delete-source
+               delete_source = subparsers.add_parser("delete-source",
+                               help=_("Deletes a source from a list"))
+               delete_source.add_argument("list",
+                               help=_("The name of the list"))
+               delete_source.add_argument("source",
+                               help=_("The name of the source"))
+               delete_source.add_argument("--deleted-by", required=True,
+                               default=os.environ.get("USER"), help=_("The person deleting the list"))
+               delete_source.set_defaults(func=self.__delete_source)
+
                # Parse all arguments
                args = parser.parse_args()
 
@@ -323,6 +334,19 @@ class CLI(object):
                        license    = args.license,
                )
 
+       def __delete_source(self, backend, args):
+               """
+                       Removes a source from a list
+               """
+               # Fetch the list
+               list = backend.lists.get_by_slug(args.list)
+
+               # Remove the source
+               list.delete_source(
+                       name       = args.source,
+                       deleted_by = args.deleted_by,
+               )
+
 
 def main():
        c = CLI()