diff options
Diffstat (limited to 'postgresqleu/confreg')
| -rw-r--r-- | postgresqleu/confreg/migrations/0001_initial.py | 7 | ||||
| -rw-r--r-- | postgresqleu/confreg/migrations/0041_notifications.py | 5 | ||||
| -rw-r--r-- | postgresqleu/confreg/migrations/0050_lowercase_email.py | 24 | ||||
| -rw-r--r-- | postgresqleu/confreg/models.py | 10 | ||||
| -rw-r--r-- | postgresqleu/confreg/views.py | 10 |
5 files changed, 42 insertions, 14 deletions
diff --git a/postgresqleu/confreg/migrations/0001_initial.py b/postgresqleu/confreg/migrations/0001_initial.py index 5752f58c..e4f0283d 100644 --- a/postgresqleu/confreg/migrations/0001_initial.py +++ b/postgresqleu/confreg/migrations/0001_initial.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals from django.db import migrations, models import postgresqleu.confreg.models import postgresqleu.util.validators +from postgresqleu.util.fields import LowercaseEmailField import postgresqleu.confreg.dbimage from django.conf import settings import django.core.validators @@ -46,8 +47,8 @@ class Migration(migrations.Migration): ('startdate', models.DateField(verbose_name='Start date')), ('enddate', models.DateField(verbose_name='End date')), ('location', models.CharField(max_length=128)), - ('contactaddr', models.EmailField(max_length=254, verbose_name='Contact address')), - ('sponsoraddr', models.EmailField(max_length=254, verbose_name='Sponsor address')), + ('contactaddr', LowercaseEmailField(max_length=254, verbose_name='Contact address')), + ('sponsoraddr', LowercaseEmailField(max_length=254, verbose_name='Sponsor address')), ('active', models.BooleanField(default=False, verbose_name='Registration open')), ('callforpapersopen', models.BooleanField(default=False, verbose_name="Call for papers open")), ('callforsponsorsopen', models.BooleanField(default=False, verbose_name="Call for sponsors open")), @@ -138,7 +139,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('firstname', models.CharField(max_length=100, verbose_name='First name')), ('lastname', models.CharField(max_length=100, verbose_name='Last name')), - ('email', models.EmailField(max_length=254, verbose_name='E-mail address')), + ('email', LowercaseEmailField(max_length=254, verbose_name='E-mail address')), ('company', models.CharField(max_length=100, verbose_name='Company', blank=True)), ('address', models.TextField(max_length=200, verbose_name='Address', blank=True)), ('phone', models.CharField(max_length=100, verbose_name='Phone number', blank=True)), diff --git a/postgresqleu/confreg/migrations/0041_notifications.py b/postgresqleu/confreg/migrations/0041_notifications.py index 03015aac..b90a0211 100644 --- a/postgresqleu/confreg/migrations/0041_notifications.py +++ b/postgresqleu/confreg/migrations/0041_notifications.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.db import migrations, models +from postgresqleu.util.fields import LowercaseEmailField class Migration(migrations.Migration): @@ -15,7 +16,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='conference', name='notifyaddr', - field=models.EmailField(null=True, max_length=254, verbose_name='Notification address'), + field=LowercaseEmailField(null=True, max_length=254, verbose_name='Notification address'), ), migrations.RunSQL("UPDATE confreg_conference SET notifyaddr=contactaddr WHERE notifyaddr IS NULL"), @@ -23,7 +24,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='conference', name='notifyaddr', - field=models.EmailField(null=False, max_length=254, verbose_name='Notification address'), + field=LowercaseEmailField(null=False, max_length=254, verbose_name='Notification address'), ), migrations.AddField( diff --git a/postgresqleu/confreg/migrations/0050_lowercase_email.py b/postgresqleu/confreg/migrations/0050_lowercase_email.py new file mode 100644 index 00000000..22f205c7 --- /dev/null +++ b/postgresqleu/confreg/migrations/0050_lowercase_email.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2019-07-10 22:29 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('confreg', '0049_sessiontags'), + ] + + operations = [ + # Slightly ugly, but were going to add this to auth_user even though we're in the + # confreg application. + migrations.RunSQL("UPDATE auth_user SET email=lower(email) WHERE email!=lower(email)"), + migrations.RunSQL("ALTER TABLE auth_user ADD CONSTRAINT email_must_be_lowercase CHECK (email=lower(email))"), + migrations.RunSQL("CREATE UNIQUE INDEX auth_user_email_lower_key ON auth_user USING btree(lower(email))"), + + # Then for our own tables as well + migrations.RunSQL("UPDATE confreg_conferenceregistration SET email=lower(email) WHERE email!=lower(email)"), + migrations.RunSQL("ALTER TABLE confreg_conferenceregistration ADD CONSTRAINT email_must_be_lowercase CHECK (email=lower(email))"), + ] diff --git a/postgresqleu/confreg/models.py b/postgresqleu/confreg/models.py index 19b21011..22a1c3da 100644 --- a/postgresqleu/confreg/models.py +++ b/postgresqleu/confreg/models.py @@ -15,6 +15,8 @@ from postgresqleu.util.validators import validate_lowercase, validate_urlname from postgresqleu.util.validators import TwitterValidator from postgresqleu.util.validators import PictureUrlValidator from postgresqleu.util.forms import ChoiceArrayField +from postgresqleu.util.fields import LowercaseEmailField + from postgresqleu.confreg.dbimage import SpeakerImageStorage @@ -138,9 +140,9 @@ class Conference(models.Model): promopicurl = models.URLField(blank=True, null=False, verbose_name="URL to promo picture", validators=[PictureUrlValidator(aspect=2.3)]) promotext = models.TextField(null=False, blank=True, max_length=1000, verbose_name="Promotion text") timediff = models.IntegerField(null=False, blank=False, default=0) - contactaddr = models.EmailField(blank=False, null=False, verbose_name="Contact address") - sponsoraddr = models.EmailField(blank=False, null=False, verbose_name="Sponsor address") - notifyaddr = models.EmailField(blank=False, null=False, verbose_name="Notification address") + contactaddr = LowercaseEmailField(blank=False, null=False, verbose_name="Contact address") + sponsoraddr = LowercaseEmailField(blank=False, null=False, verbose_name="Sponsor address") + notifyaddr = LowercaseEmailField(blank=False, null=False, verbose_name="Notification address") notifyregs = models.BooleanField(blank=False, null=False, default=False, verbose_name="Notify about registrations") active = models.BooleanField(blank=False, null=False, default=False, verbose_name="Registration open") callforpapersopen = models.BooleanField(blank=False, null=False, default=False, verbose_name="Call for papers open") @@ -481,7 +483,7 @@ class ConferenceRegistration(models.Model): registrator = models.ForeignKey(User, null=False, blank=False, related_name="registrator", on_delete=models.CASCADE) firstname = models.CharField(max_length=100, null=False, blank=False, verbose_name="First name") lastname = models.CharField(max_length=100, null=False, blank=False, verbose_name="Last name") - email = models.EmailField(null=False, blank=False, verbose_name="E-mail address") + email = LowercaseEmailField(null=False, blank=False, verbose_name="E-mail address") company = models.CharField(max_length=100, null=False, blank=True, verbose_name="Company") address = models.TextField(max_length=200, null=False, blank=True, verbose_name="Address") country = models.ForeignKey(Country, null=True, blank=True, verbose_name="Country", on_delete=models.CASCADE) diff --git a/postgresqleu/confreg/views.py b/postgresqleu/confreg/views.py index 37b0b996..97a659b7 100644 --- a/postgresqleu/confreg/views.py +++ b/postgresqleu/confreg/views.py @@ -247,7 +247,7 @@ def register(request, confname, whatfor=None): # No previous registration, grab some data from the user profile reg = ConferenceRegistration(conference=conference, attendee=request.user) - reg.email = request.user.email + reg.email = request.user.email.lower() reg.firstname = request.user.first_name reg.lastname = request.user.last_name reg.created = datetime.now() @@ -406,11 +406,11 @@ def multireg(request, confname, regid=None): # a separate page for it. # Create a registration but don't save it until we have # details entered. - reg.email = newform.cleaned_data['email'] + reg.email = newform.cleaned_data['email'].lower() regform = ConferenceRegistrationForm(request.user, instance=reg, regforother=True) return render_conference_response(request, conference, 'reg', 'confreg/regmulti_form.html', { 'form': regform, - '_email': newform.cleaned_data['email'], + '_email': newform.cleaned_data['email'].lower(), }) elif request.POST['submit'] == 'Cancel': return HttpResponseRedirect(redir_root) @@ -421,7 +421,7 @@ def multireg(request, confname, regid=None): reg.delete() return HttpResponseRedirect(redir_root) elif request.POST['submit'] == 'Save': - reg.email = request.POST['_email'] + reg.email = request.POST['_email'].lower() regform = ConferenceRegistrationForm(request.user, data=request.POST, instance=reg, regforother=True) if regform.is_valid(): reg = regform.save(commit=False) @@ -1476,7 +1476,7 @@ def public_speaker_lookup(request, confname): # This is a lookup for speakers that's public. To avoid harvesting, we allow # only *prefix* matching of email addresses, and you have to type at least 6 characters # before you get anything. - prefix = request.GET['query'] + prefix = request.GET['query'].lower() if len(prefix) > 5: vals = [{ 'id': s.id, |
