summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit99698eaf3f7783b5bd6ed0525f135f1c067de548 (patch)
tree77edd8aef4496b6140b4aa87a5b1c9c75c90fba1
parent245da22e8ce001c345b82772b7599885e753bacf (diff)
downloadIshtar-99698eaf3f7783b5bd6ed0525f135f1c067de548.tar.bz2
Ishtar-99698eaf3f7783b5bd6ed0525f135f1c067de548.zip
✨ GDPR clean command
-rw-r--r--ishtar_common/management/commands/gdpr_clean.py45
-rw-r--r--ishtar_common/models.py5
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")