summaryrefslogtreecommitdiff
path: root/postgresqleu/confreg
diff options
context:
space:
mode:
Diffstat (limited to 'postgresqleu/confreg')
-rw-r--r--postgresqleu/confreg/migrations/0001_initial.py7
-rw-r--r--postgresqleu/confreg/migrations/0041_notifications.py5
-rw-r--r--postgresqleu/confreg/migrations/0050_lowercase_email.py24
-rw-r--r--postgresqleu/confreg/models.py10
-rw-r--r--postgresqleu/confreg/views.py10
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,