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) | 
