diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-03-04 14:45:13 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-03-04 14:53:48 +0100 |
commit | 99698eaf3f7783b5bd6ed0525f135f1c067de548 (patch) | |
tree | 77edd8aef4496b6140b4aa87a5b1c9c75c90fba1 /ishtar_common | |
parent | 245da22e8ce001c345b82772b7599885e753bacf (diff) | |
download | Ishtar-99698eaf3f7783b5bd6ed0525f135f1c067de548.tar.bz2 Ishtar-99698eaf3f7783b5bd6ed0525f135f1c067de548.zip |
✨ GDPR clean command
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/management/commands/gdpr_clean.py | 45 | ||||
-rw-r--r-- | ishtar_common/models.py | 5 |
2 files changed, 49 insertions, 1 deletions
diff --git a/ishtar_common/management/commands/gdpr_clean.py b/ishtar_common/management/commands/gdpr_clean.py new file mode 100644 index 000000000..1f3f413f6 --- /dev/null +++ b/ishtar_common/management/commands/gdpr_clean.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import datetime +from django.conf import settings +from django.core.management.base import BaseCommand +import sys + +from ishtar_common.models import GDPRLog, GDPRPerson +from ishtar_common.utils import BColors + + +def get_time(): + return datetime.datetime.now().isoformat().split(".")[0] + + +def clean_gdpr(): + date = datetime.datetime.now() - ( + datetime.timedelta(days=settings.GDPR_RETENTION_PERIOD) + ) + q = GDPRLog.objects.filter(date__lte=date) + nb = q.count() + q.delete() + q = GDPRPerson.objects.filter(logs=None) + q.delete() + return nb + + +class Command(BaseCommand): + help = "Cleaning up obsolete gdpr data" + + def add_arguments(self, parser): + parser.add_argument( + "--quiet", dest="quiet", action="store_true", help="Quiet output" + ) + + def handle(self, *args, **options): + quiet = options["quiet"] + if not quiet: + msg = BColors.format("HEADER", f"[{get_time()}] Processing DGPR cleansing\n") + sys.stdout.write(msg) + nb = clean_gdpr() + if not quiet: + sys.stdout.write(f"{nb} dgpr logs cleaned\n") + sys.exit(1) diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 1ba1de7ec..a7c7626dd 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -3410,7 +3410,10 @@ class GDPRLog(models.Model): ip = models.GenericIPAddressField(verbose_name=_("IP"), blank=True, null=True) routable_ip = models.BooleanField(verbose_name=_("Routable IP"), default=False) activity = models.CharField(_("Activity"), max_length=2, choices=GDPR_ACTIVITY) - persons = models.ManyToManyField(GDPRPerson, verbose_name=_("Persons"), blank=True) + persons = models.ManyToManyField( + GDPRPerson, verbose_name=_("Persons"), blank=True, + related_name="logs" + ) class Meta: verbose_name = _("GDPR - Log") |