diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2023-11-17 12:43:40 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-04-16 16:38:33 +0200 |
commit | 048172cc2f2477633bd29d08848d28b8c0e3467e (patch) | |
tree | aa0e2224e7c65499d69b47bf1fc9a13883538cfb /ishtar_common/models.py | |
parent | abb32bc4d75c637c78c3506aa6640f66488ee641 (diff) | |
download | Ishtar-048172cc2f2477633bd29d08848d28b8c0e3467e.tar.bz2 Ishtar-048172cc2f2477633bd29d08848d28b8c0e3467e.zip |
✨ GDPR: record directory view and directory export
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index a7f715516..b9944e4bb 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -3212,6 +3212,10 @@ GDPR_ACTIVITY = ( ("PC", _("Person creation")), ("PM", _("Person modification")), ("PD", _("Person deletion")), + ("AC", _("Admin - Directory consultation")), + ("AE", _("Admin - Directory export")), + ("AV", _("Admin - Person view")), + ("AM", _("Admin - Person modification")), ) GDPR_ACTIVITY_DICT = dict(GDPR_ACTIVITY) @@ -3263,24 +3267,28 @@ class GDPRLog(models.Model): return f"{self.user.username} - {self.date} - {self.activity_lbl}" @classmethod - def create_log(cls, request, activity, person_query): + def create_log(cls, request, activity, person_query, slice_query=None): if not request.user: # log creation is for logged user should be a script, a bug or a hacker... user_id = None else: user_id = request.user.id client_ip, routable_ip = get_client_ip(request) - cls._create_log(user_id, client_ip, routable_ip, activity, person_query) + cls._create_log(user_id, client_ip, routable_ip, activity, person_query, slice_query) @classmethod - def _create_log(cls, user_id, ip, routable_ip, activity, person_query): + def _create_log(cls, user_id, ip, routable_ip, activity, person_query, slice_query=None): log = cls.objects.create(user_id=user_id, ip=ip, routable_ip=routable_ip, activity=activity) person_query = person_query.exclude(raw_name__isnull=True).exclude(raw_name="") - + start, end = None, None + if slice_query: + start, end = slice_query # create all missing GDPRPerson missing_gdpr_person_q = person_query.filter(gdpr_person=None) gdpr_persons_creation = [] values = missing_gdpr_person_q.values_list("id", "raw_name") + if start is not None: + values = values[start:end] for person_id, raw_name in values: gdpr_persons_creation.append(GDPRPerson(person_id=person_id, raw_name=raw_name)) GDPRPerson.objects.bulk_create(gdpr_persons_creation) @@ -3288,6 +3296,8 @@ class GDPRLog(models.Model): # attach gdpr persons gdpr_persons = [] values = person_query.values_list("gdpr_person__pk", flat=True) + if start is not None: + values = values[start:end] for pk in values: gdpr_persons.append(cls.persons.through(gdprperson_id=pk, gdprlog_id=log.pk)) cls.persons.through.objects.bulk_create(gdpr_persons) |