Parcourir la source

feat(api): added privacy chores that need to be called periodically

They delete data that is not needed anymore, like the registration
remote IP for users that are around longer than
ABUSE_LOCK_ACCOUNT_BY_REGISTRATION_IP_PERIOD_HRS.
Nils Wisiol il y a 8 ans
Parent
commit
299b7213cf

+ 6 - 2
api/desecapi/management/commands/privacy-chores.py

@@ -1,11 +1,15 @@
 from django.core.management import BaseCommand
 from desecapi.models import User
+from desecapi import settings
+from django.utils import timezone
+from datetime import timedelta
+
 
 class Command(BaseCommand):
 
     def handle(self, *args, **kwargs):
 
-        users = User.objects.filter() # TODO filter for non-empty registration remote ip
+        users = User.objects.filter(created__lt=timezone.now()-timedelta(hours=settings.ABUSE_LOCK_ACCOUNT_BY_REGISTRATION_IP_PERIOD_HRS))
         for u in users:
-            u.registration_remote_ip = None
+            u.registration_remote_ip = ''
             u.save() # TODO bulk update?

+ 34 - 0
api/desecapi/tests/testprivacychores.py

@@ -0,0 +1,34 @@
+from django.core.management import call_command
+from django.test import TestCase
+from django.utils import timezone
+from desecapi.models import User, MyUserManager
+from .utils import utils
+from desecapi import settings
+from datetime import timedelta
+
+
+class PrivacyChoresCommandTest(TestCase):
+
+    def test_delete_registration_ip_for_old_users(self):
+        name1 = utils.generateUsername()
+        name2 = utils.generateUsername()
+
+        User(
+            email=name1,
+            registration_remote_ip='1.3.3.7',
+        ).save()
+        User(
+            email=name2,
+            registration_remote_ip='1.3.3.8',
+        ).save()
+        user2 = User.objects.get(email=name2)
+        user2.created = timezone.now()-timedelta(hours=settings.ABUSE_LOCK_ACCOUNT_BY_REGISTRATION_IP_PERIOD_HRS+1)
+        user2.save()
+
+        user_count = User.objects.all().count()
+
+        call_command('privacy-chores')
+
+        self.assertEqual(User.objects.all().count(), user_count)
+        self.assertEqual(User.objects.get(email=name1).registration_remote_ip, '1.3.3.7')
+        self.assertEqual(User.objects.get(email=name2).registration_remote_ip, '')