kopia lustrzana https://github.com/wagtail/wagtail
Fix/comments with UUID user (#7216)
* Add UUID primary key to EmailUser * Convert pks to strings when being used as dictionary keys for commenting, to prevent custom primary key fields on user model causing serialization to failpull/7227/head
rodzic
a56143b90b
commit
afff4d451a
|
@ -867,7 +867,6 @@ class CommentPanel(EditHandler):
|
|||
}
|
||||
|
||||
user = getattr(self.request, 'user', None)
|
||||
authors = {user.pk: user_data(user)} if user else {}
|
||||
user_pks = {user.pk}
|
||||
serialized_comments = []
|
||||
bound = self.form.is_bound
|
||||
|
@ -888,7 +887,7 @@ class CommentPanel(EditHandler):
|
|||
data['replies'] = replies
|
||||
serialized_comments.append(data)
|
||||
|
||||
authors = {user.pk: user_data(user) for user in get_user_model().objects.filter(pk__in=user_pks)}
|
||||
authors = {str(user.pk): user_data(user) for user in get_user_model().objects.filter(pk__in=user_pks)}
|
||||
|
||||
comments_data = {
|
||||
'comments': serialized_comments,
|
||||
|
|
|
@ -9,6 +9,7 @@ from django.contrib.auth.models import AnonymousUser
|
|||
from django.core import checks
|
||||
from django.core.exceptions import FieldDoesNotExist, ImproperlyConfigured
|
||||
from django.test import RequestFactory, TestCase, override_settings
|
||||
from django.utils.html import json_script
|
||||
from freezegun import freeze_time
|
||||
from pytz import utc
|
||||
|
||||
|
@ -1100,8 +1101,13 @@ class TestCommentPanel(TestCase, WagtailTestUtils):
|
|||
self.assertEqual(data['comments'][0]['replies'][0]['user'], self.reply_1.user.pk)
|
||||
self.assertEqual(data['comments'][0]['replies'][1]['user'], self.reply_2.user.pk)
|
||||
|
||||
self.assertIn(self.commenting_user.pk, data['authors'])
|
||||
self.assertIn(self.other_user.pk, data['authors'])
|
||||
self.assertIn(str(self.commenting_user.pk), data['authors'])
|
||||
self.assertIn(str(self.other_user.pk), data['authors'])
|
||||
|
||||
try:
|
||||
json_script(data, 'comments-data')
|
||||
except TypeError:
|
||||
self.fail("Failed to serialize comments data. This is likely due to a custom user model using an unsupported field.")
|
||||
|
||||
def test_form(self):
|
||||
"""
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[
|
||||
{
|
||||
"pk": 1,
|
||||
"pk": "00000000-0000-0000-0000-000000000001",
|
||||
"model": "emailuser.emailuser",
|
||||
"fields": {
|
||||
"first_name": "",
|
||||
|
@ -16,7 +16,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"pk": 2,
|
||||
"pk": "00000000-0000-0000-0000-000000000002",
|
||||
"model": "emailuser.emailuser",
|
||||
"fields": {
|
||||
"first_name": "",
|
||||
|
@ -33,7 +33,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"pk": 3,
|
||||
"pk": "00000000-0000-0000-0000-000000000003",
|
||||
"model": "emailuser.emailuser",
|
||||
"fields": {
|
||||
"first_name": "",
|
||||
|
@ -50,7 +50,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"pk": 4,
|
||||
"pk": "00000000-0000-0000-0000-000000000004",
|
||||
"model": "emailuser.emailuser",
|
||||
"fields": {
|
||||
"first_name": "",
|
||||
|
@ -67,7 +67,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"pk": 5,
|
||||
"pk": "00000000-0000-0000-0000-000000000005",
|
||||
"model": "emailuser.emailuser",
|
||||
"fields": {
|
||||
"first_name": "",
|
||||
|
@ -84,7 +84,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"pk": 6,
|
||||
"pk": "00000000-0000-0000-0000-000000000006",
|
||||
"model": "emailuser.emailuser",
|
||||
"fields": {
|
||||
"first_name": "",
|
||||
|
@ -101,7 +101,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"pk": 7,
|
||||
"pk": "00000000-0000-0000-0000-000000000007",
|
||||
"model": "emailuser.emailuser",
|
||||
"fields": {
|
||||
"first_name": "",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[
|
||||
{
|
||||
"pk": 1,
|
||||
"pk": "00000000-0000-0000-0000-000000000001",
|
||||
"model": "emailuser.emailuser",
|
||||
"fields": {
|
||||
"first_name": "Clark",
|
||||
|
@ -16,7 +16,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"pk": 2,
|
||||
"pk": "00000000-0000-0000-0000-000000000002",
|
||||
"model": "emailuser.emailuser",
|
||||
"fields": {
|
||||
"first_name": "Jane",
|
||||
|
@ -33,7 +33,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"pk": 3,
|
||||
"pk": "00000000-0000-0000-0000-000000000003",
|
||||
"model": "emailuser.emailuser",
|
||||
"fields": {
|
||||
"first_name": "Bob",
|
||||
|
@ -50,7 +50,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"pk": 4,
|
||||
"pk": "00000000-0000-0000-0000-000000000004",
|
||||
"model": "emailuser.emailuser",
|
||||
"fields": {
|
||||
"first_name": "Sam",
|
||||
|
@ -68,7 +68,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"pk": 5,
|
||||
"pk": "00000000-0000-0000-0000-000000000005",
|
||||
"model": "emailuser.emailuser",
|
||||
"fields": {
|
||||
"first_name": "Mary",
|
||||
|
@ -86,7 +86,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"pk": 6,
|
||||
"pk": "00000000-0000-0000-0000-000000000006",
|
||||
"model": "emailuser.emailuser",
|
||||
"fields": {
|
||||
"first_name": "Josh",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[
|
||||
{
|
||||
"pk": 1,
|
||||
"pk": "00000000-0000-0000-0000-000000000001",
|
||||
"model": "emailuser.emailuser",
|
||||
"fields": {
|
||||
"first_name": "",
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# Generated by Django 3.1 on 2020-08-13 21:28
|
||||
# Generated by Django 3.2.3 on 2021-05-25 13:26
|
||||
|
||||
from django.db import migrations, models
|
||||
import uuid
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
@ -15,17 +16,17 @@ class Migration(migrations.Migration):
|
|||
migrations.CreateModel(
|
||||
name='EmailUser',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('password', models.CharField(max_length=128, verbose_name='password')),
|
||||
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
|
||||
('uuid', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
|
||||
('email', models.EmailField(max_length=255, unique=True)),
|
||||
('is_staff', models.BooleanField(default=True)),
|
||||
('is_active', models.BooleanField(default=True)),
|
||||
('first_name', models.CharField(blank=True, max_length=50)),
|
||||
('last_name', models.CharField(blank=True, max_length=50)),
|
||||
('is_superuser', models.BooleanField(default=False)),
|
||||
('groups', models.ManyToManyField(blank=True, related_name='_emailuser_groups_+', to='auth.Group')),
|
||||
('user_permissions', models.ManyToManyField(blank=True, related_name='_emailuser_user_permissions_+', to='auth.Permission')),
|
||||
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),
|
||||
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
# Generated by Django 3.1 on 2020-08-13 23:00
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('auth', '0012_alter_user_first_name_max_length'),
|
||||
('emailuser', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='emailuser',
|
||||
name='groups',
|
||||
field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='emailuser',
|
||||
name='user_permissions',
|
||||
field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions'),
|
||||
),
|
||||
]
|
|
@ -1,3 +1,5 @@
|
|||
import uuid
|
||||
|
||||
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
|
||||
from django.db import models
|
||||
|
||||
|
@ -25,6 +27,7 @@ class EmailUserManager(BaseUserManager):
|
|||
|
||||
|
||||
class EmailUser(AbstractBaseUser, PermissionsMixin):
|
||||
uuid = models.UUIDField(default=uuid.uuid4, primary_key=True)
|
||||
email = models.EmailField(max_length=255, unique=True)
|
||||
is_staff = models.BooleanField(default=True)
|
||||
is_active = models.BooleanField(default=True)
|
||||
|
|
|
@ -153,6 +153,7 @@ class TestUserIndexView(TestCase, WagtailTestUtils):
|
|||
self.assertTemplateUsed(response, 'wagtailusers/users/index.html')
|
||||
self.assertContains(response, 'testuser')
|
||||
|
||||
@unittest.skipIf(settings.AUTH_USER_MODEL == 'emailuser.EmailUser', 'Negative UUID not possible')
|
||||
def test_allows_negative_ids(self):
|
||||
# see https://github.com/wagtail/wagtail/issues/565
|
||||
self.create_user('guardian', 'guardian@example.com', 'gu@rd14n', pk=-1)
|
||||
|
@ -658,7 +659,8 @@ class TestUserEditView(TestCase, WagtailTestUtils):
|
|||
self.assertContains(response, 'Password confirmation:')
|
||||
|
||||
def test_nonexistant_redirect(self):
|
||||
self.assertEqual(self.get(user_id=100000).status_code, 404)
|
||||
invalid_id = '99999999-9999-9999-9999-999999999999' if settings.AUTH_USER_MODEL == 'emailuser.EmailUser' else 100000
|
||||
self.assertEqual(self.get(user_id=invalid_id).status_code, 404)
|
||||
|
||||
def test_simple_post(self):
|
||||
response = self.post({
|
||||
|
|
Ładowanie…
Reference in New Issue