From 9f51ebd89e652530c069b23cd0c4b17315f8ac1a Mon Sep 17 00:00:00 2001
From: Jorran de Wit <jorrandewit@outlook.com>
Date: Tue, 29 Aug 2017 07:31:12 +0200
Subject: [PATCH] Hotfix activation key invalid

---
 .../migrations/0032_auto_20170829_0727.py     | 20 +++++++
 partners/models.py                            | 12 ++--
 scipost/migrations/0063_auto_20170829_0727.py | 56 +++++++++++++++++++
 scipost/models.py                             | 16 +++---
 .../migrations/0065_auto_20170829_0727.py     | 30 ++++++++++
 theses/migrations/0007_auto_20170829_0727.py  | 20 +++++++
 6 files changed, 138 insertions(+), 16 deletions(-)
 create mode 100644 partners/migrations/0032_auto_20170829_0727.py
 create mode 100644 scipost/migrations/0063_auto_20170829_0727.py
 create mode 100644 submissions/migrations/0065_auto_20170829_0727.py
 create mode 100644 theses/migrations/0007_auto_20170829_0727.py

diff --git a/partners/migrations/0032_auto_20170829_0727.py b/partners/migrations/0032_auto_20170829_0727.py
new file mode 100644
index 000000000..375d21ed4
--- /dev/null
+++ b/partners/migrations/0032_auto_20170829_0727.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2017-08-29 05:27
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('partners', '0031_auto_20170815_0901'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='contact',
+            old_name='_activation_key',
+            new_name='activation_key',
+        ),
+    ]
diff --git a/partners/models.py b/partners/models.py
index 0de3ca511..1d7f39a88 100644
--- a/partners/models.py
+++ b/partners/models.py
@@ -157,7 +157,7 @@ class Contact(models.Model):
     consortia = models.ManyToManyField('partners.Consortium', blank=True,
                                        help_text=('All Consortia for which the Contact has'
                                                   ' explicit permission to view/edit its data.'))
-    _activation_key = models.CharField(max_length=40, blank=True)
+    activation_key = models.CharField(max_length=40, blank=True)
     key_expires = models.DateTimeField(default=timezone.now)
 
     def __str__(self):
@@ -171,15 +171,13 @@ class Contact(models.Model):
             feed += random.choice(string.ascii_letters)
         feed = feed.encode('utf8')
         salt = self.user.username.encode('utf8')
-        self._activation_key = hashlib.sha1(salt+salt).hexdigest()
+        self.activation_key = hashlib.sha1(salt+salt).hexdigest()
         self.key_expires = datetime.datetime.now() + datetime.timedelta(days=2)
 
-    def get_activation_key(self):
-        if not self._activation_key:
+    def save(self, *args, **kwargs):
+        if not self.activation_key:
             self.generate_key()
-        return self._activation_key
-
-    activation_key = property(get_activation_key, _activation_key)
+        super().save(*args, **kwargs)
 
     def delete_or_remove_partner(self, partner, *args, **kwargs):
         """
diff --git a/scipost/migrations/0063_auto_20170829_0727.py b/scipost/migrations/0063_auto_20170829_0727.py
new file mode 100644
index 000000000..aef6bd439
--- /dev/null
+++ b/scipost/migrations/0063_auto_20170829_0727.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2017-08-29 05:27
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0062_auto_20170815_0857'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='contributor',
+            old_name='_activation_key',
+            new_name='activation_key',
+        ),
+        migrations.AlterField(
+            model_name='remark',
+            name='contributor',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='remarks', to='scipost.Contributor'),
+        ),
+        migrations.AlterField(
+            model_name='remark',
+            name='feedback',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='remarks', to='virtualmeetings.Feedback'),
+        ),
+        migrations.AlterField(
+            model_name='remark',
+            name='motion',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='remarks', to='virtualmeetings.Motion'),
+        ),
+        migrations.AlterField(
+            model_name='remark',
+            name='nomination',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='remarks', to='virtualmeetings.Nomination'),
+        ),
+        migrations.AlterField(
+            model_name='remark',
+            name='recommendation',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='remarks', to='submissions.EICRecommendation'),
+        ),
+        migrations.AlterField(
+            model_name='remark',
+            name='submission',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='remarks', to='submissions.Submission'),
+        ),
+        migrations.AlterField(
+            model_name='unavailabilityperiod',
+            name='contributor',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='unavailability_periods', to='scipost.Contributor'),
+        ),
+    ]
diff --git a/scipost/models.py b/scipost/models.py
index 99c061935..d6cac15fd 100644
--- a/scipost/models.py
+++ b/scipost/models.py
@@ -41,7 +41,7 @@ class Contributor(models.Model):
     """
     user = models.OneToOneField(User, on_delete=models.PROTECT, unique=True)
     invitation_key = models.CharField(max_length=40, blank=True)
-    _activation_key = models.CharField(max_length=40, blank=True)
+    activation_key = models.CharField(max_length=40, blank=True)
     key_expires = models.DateTimeField(default=timezone.now)
     status = models.SmallIntegerField(default=0, choices=CONTRIBUTOR_STATUS)
     title = models.CharField(max_length=4, choices=TITLE_CHOICES)
@@ -70,6 +70,11 @@ class Contributor(models.Model):
     def __str__(self):
         return '%s, %s' % (self.user.last_name, self.user.first_name)
 
+    def save(self, *args, **kwargs):
+        if not self.activation_key:
+            self.generate_key()
+        super().save(*args, **kwargs)
+
     def get_absolute_url(self):
         return reverse('scipost:contributor_info', args=(self.id,))
 
@@ -90,13 +95,6 @@ class Contributor(models.Model):
     def is_VE(self):
         return self.user.groups.filter(name='Vetting Editors').exists()
 
-    def get_activation_key(self):
-        if not self._activation_key:
-            self.generate_key()
-        return self._activation_key
-
-    activation_key = property(get_activation_key, _activation_key)
-
     def generate_key(self, feed=''):
         """
         Generate and save a new activation_key for the contributor, given a certain feed.
@@ -105,7 +103,7 @@ class Contributor(models.Model):
             feed += random.choice(string.ascii_letters)
         feed = feed.encode('utf8')
         salt = self.user.username.encode('utf8')
-        self._activation_key = hashlib.sha1(salt+salt).hexdigest()
+        self.activation_key = hashlib.sha1(salt+salt).hexdigest()
         self.key_expires = datetime.datetime.now() + datetime.timedelta(days=2)
 
     def expertises_as_string(self):
diff --git a/submissions/migrations/0065_auto_20170829_0727.py b/submissions/migrations/0065_auto_20170829_0727.py
new file mode 100644
index 000000000..f185ec8b7
--- /dev/null
+++ b/submissions/migrations/0065_auto_20170829_0727.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2017-08-29 05:27
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0064_auto_20170815_0826'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='editorialassignment',
+            options={'ordering': ['-date_created']},
+        ),
+        migrations.AlterField(
+            model_name='editorialassignment',
+            name='submission',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='editorial_assignments', to='submissions.Submission'),
+        ),
+        migrations.AlterField(
+            model_name='editorialassignment',
+            name='to',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='editorial_assignments', to='scipost.Contributor'),
+        ),
+    ]
diff --git a/theses/migrations/0007_auto_20170829_0727.py b/theses/migrations/0007_auto_20170829_0727.py
new file mode 100644
index 000000000..a6c696068
--- /dev/null
+++ b/theses/migrations/0007_auto_20170829_0727.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2017-08-29 05:27
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('theses', '0006_auto_20161219_2012'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='thesislink',
+            name='supervisor',
+            field=models.CharField(max_length=1000),
+        ),
+    ]
-- 
GitLab