Browse Source

refactor(api): add AuthenticatedEmailUserAction in action hierarchy

Peter Thomassen 3 years ago
parent
commit
9d6da39123

+ 24 - 0
api/desecapi/migrations/0023_authenticatedemailuseraction.py

@@ -0,0 +1,24 @@
+# Generated by Django 4.0.1 on 2022-01-19 16:00
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('desecapi', '0022_user_outreach_preference'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='AuthenticatedEmailUserAction',
+            fields=[
+                ('authenticatedbasicuseraction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='desecapi.authenticatedbasicuseraction')),
+            ],
+            options={
+                'managed': False,
+            },
+            bases=('desecapi.authenticatedbasicuseraction',),
+        ),
+    ]

+ 15 - 2
api/desecapi/models.py

@@ -948,7 +948,20 @@ class AuthenticatedBasicUserAction(AuthenticatedAction):
         return super()._state_fields + [str(self.user.id)]
 
 
-class AuthenticatedUserAction(AuthenticatedBasicUserAction):
+class AuthenticatedEmailUserAction(AuthenticatedBasicUserAction):
+    """
+    Abstract AuthenticatedAction involving a user instance with unmodified email address.
+    """
+
+    class Meta:
+        managed = False
+
+    @property
+    def _state_fields(self):
+        return super()._state_fields + [self.user.email]
+
+
+class AuthenticatedUserAction(AuthenticatedEmailUserAction):
     """
     Abstract AuthenticatedBasicUserAction, incorporating the user's id, email, password, and is_active flag into the
     Message Authentication Code state.
@@ -960,7 +973,7 @@ class AuthenticatedUserAction(AuthenticatedBasicUserAction):
     def _state_fields(self):
         # TODO consider adding a "last change" attribute of the user to the state to avoid code
         # re-use after the state has been changed and changed back.
-        return super()._state_fields + [self.user.email, self.user.password, self.user.is_active]
+        return super()._state_fields + [self.user.password, self.user.is_active]
 
 
 class AuthenticatedActivateUserAction(AuthenticatedUserAction):