diff --git a/preferences/migrations/0052_optionaluser_delete_notyetactive.py b/preferences/migrations/0052_optionaluser_delete_notyetactive.py
new file mode 100644
index 00000000..589c6dc7
--- /dev/null
+++ b/preferences/migrations/0052_optionaluser_delete_notyetactive.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.7 on 2018-10-11 12:51
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('preferences', '0051_auto_20180919_2225'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='optionaluser',
+ name='delete_notyetactive',
+ field=models.IntegerField(default=15, help_text='Inactive users will be deleted after this number of days'),
+ ),
+ ]
diff --git a/preferences/models.py b/preferences/models.py
index 234f94b6..d07bc3f0 100644
--- a/preferences/models.py
+++ b/preferences/models.py
@@ -107,6 +107,10 @@ class OptionalUser(AclMixin, PreferencesModel):
help_text=_("Maximum number of local email addresses for a standard"
" user")
)
+ delete_notyetactive = models.IntegerField(
+ default=15,
+ help_text=_("Inactive users will be deleted after this number of days")
+ )
class Meta:
permissions = (
diff --git a/preferences/templates/preferences/display_preferences.html b/preferences/templates/preferences/display_preferences.html
index 8083901c..56dfaf9f 100644
--- a/preferences/templates/preferences/display_preferences.html
+++ b/preferences/templates/preferences/display_preferences.html
@@ -58,6 +58,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% trans "GPG fingerprint field" %} |
{{ useroptions.gpg_fingerprint|tick }} |
+ {% trans "Delete not yet active users after" %} |
+ {{ useroptions.delete_notyetactive }} days |
{% trans "Email accounts preferences" %}
diff --git a/users/management/commands/clean_notyetactive.py b/users/management/commands/clean_notyetactive.py
new file mode 100644
index 00000000..40f80c03
--- /dev/null
+++ b/users/management/commands/clean_notyetactive.py
@@ -0,0 +1,34 @@
+# Copyright © 2017 Gabriel Détraz
+# Copyright © 2017 Goulven Kermarec
+# Copyright © 2017 Augustin Lemesle
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+from django.core.management.base import BaseCommand, CommandError
+
+from users.models import User
+from preferences.models import OptionalUser
+from datetime import timedelta
+
+from django.utils import timezone
+
+class Command(BaseCommand):
+ help = "Delete non members users (not yet active)"
+
+ def handle(self, *args, **options):
+ days = OptionalUser.get_cached_value('delete_notyetactive')
+ users = User.objects.filter(state=User.STATE_NOT_YET_ACTIVE).filter(registered__lte=timezone.now() - timedelta(days=days))
+ print("Deleting " + str(users.count()) + " users")
+ users.delete()
diff --git a/users/migrations/0078_auto_20181011_1405.py b/users/migrations/0078_auto_20181011_1405.py
new file mode 100644
index 00000000..6046d2e4
--- /dev/null
+++ b/users/migrations/0078_auto_20181011_1405.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.7 on 2018-10-11 12:05
+from __future__ import unicode_literals
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('users', '0077_auto_20180824_1750'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='request',
+ name='user',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+ ),
+ ]
diff --git a/users/models.py b/users/models.py
index f32bed03..41954e62 100755
--- a/users/models.py
+++ b/users/models.py
@@ -1568,7 +1568,7 @@ class Request(models.Model):
)
type = models.CharField(max_length=2, choices=TYPE_CHOICES)
token = models.CharField(max_length=32)
- user = models.ForeignKey('User', on_delete=models.PROTECT)
+ user = models.ForeignKey('User', on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True, editable=False)
expires_at = models.DateTimeField()