summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/migrations/0233_gdprlog_gdprperson.py45
-rw-r--r--ishtar_common/models.py47
2 files changed, 92 insertions, 0 deletions
diff --git a/ishtar_common/migrations/0233_gdprlog_gdprperson.py b/ishtar_common/migrations/0233_gdprlog_gdprperson.py
new file mode 100644
index 000000000..374134fce
--- /dev/null
+++ b/ishtar_common/migrations/0233_gdprlog_gdprperson.py
@@ -0,0 +1,45 @@
+# Generated by Django 2.2.24 on 2023-11-16 15:48
+
+import datetime
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ('ishtar_common', '0232_default_mandatory_keys_import_permissions'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='GDPRPerson',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('raw_name', models.CharField(default='-', max_length=300, verbose_name='Raw name')),
+ ('person', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.Person', verbose_name='Person')),
+ ],
+ options={
+ 'verbose_name': 'GDPR - Person',
+ 'verbose_name_plural': 'GDPR - Persons',
+ },
+ ),
+ migrations.CreateModel(
+ name='GDPRLog',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='Date')),
+ ('ip', models.GenericIPAddressField(verbose_name='IP')),
+ ('activity', models.CharField(choices=[('DC', 'Directory consultation'), ('DE', 'Directory export'), ('PV', "Viewing a person's notice"), ('PE', "Exporting a person's notice"), ('PC', 'Person creation'), ('PM', 'Person modification'), ('PD', 'Person deletion')], max_length=2, verbose_name='Activity')),
+ ('persons', models.ManyToManyField(blank=True, to='ishtar_common.GDPRPerson', verbose_name='Persons')),
+ ('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='User')),
+ ],
+ options={
+ 'verbose_name': 'GDPR - Log',
+ 'verbose_name_plural': 'GDPR - Logs',
+ 'ordering': ('date',),
+ },
+ ),
+ ]
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 696020c58..944cbcf5d 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -3203,6 +3203,53 @@ class Person(Address, Merge, OwnPerms, ValueGetter, MainItem):
post_save.connect(cached_label_changed, sender=Person)
+GDPR_ACTIVITY = (
+ ("DC", _("Directory consultation")),
+ ("DE", _("Directory export")),
+ ("PV", _("Viewing a person's notice")),
+ ("PE", _("Exporting a person's notice")),
+ ("PC", _("Person creation")),
+ ("PM", _("Person modification")),
+ ("PD", _("Person deletion")),
+)
+
+
+class GDPRPerson(models.Model):
+ person = models.ForeignKey(Person, verbose_name=_("Person"), on_delete=models.SET_NULL,
+ blank=True, null=True)
+ raw_name = models.CharField(_("Raw name"), max_length=300, default="-")
+
+ class Meta:
+ verbose_name = _("GDPR - Person")
+ verbose_name_plural = _("GDPR - Persons")
+
+ def __str__(self):
+ return self.raw_name
+
+
+class GDPRLog(models.Model):
+ user = models.ForeignKey(User, verbose_name=_("User"), on_delete=models.PROTECT)
+ date = models.DateTimeField(verbose_name=_("Date"), default=datetime.datetime.now)
+ ip = models.GenericIPAddressField(verbose_name=_("IP"))
+ activity = models.CharField(_("Activity"), max_length=2, choices=GDPR_ACTIVITY)
+ persons = models.ManyToManyField(GDPRPerson, verbose_name=_("Persons"), blank=True)
+
+ class Meta:
+ verbose_name = _("GDPR - Log")
+ verbose_name_plural = _("GDPR - Logs")
+ ordering = ("date",)
+ ADMIN_SECTION = _("GDPR")
+
+ @property
+ def activity_lbl(self):
+ gdpr_activity_dict = dict(GDPR_ACTIVITY)
+ if self.activity not in gdpr_activity_dict:
+ return str(_("Unknown activity :")) + self.activity
+ return gdpr_activity_dict[self.activity]
+
+ def __str__(self):
+ return f"{self.user.username} - {self.date} - {self.activity_lbl}"
+
class ProfileType(GeneralType):
groups = models.ManyToManyField(Group, verbose_name=_("Groups"), blank=True)