summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2008-08-21 13:41:10 +0800
committerJeremy Kerr <jk@ozlabs.org>2008-08-21 13:41:10 +0800
commiteb6db921938c72c0655ca2e381818a471f99f5fa (patch)
tree9d66e6962f134d2116aacaeef3b3abe2177156ae /apps
parentecea8781acaa636186880d24351a6b712d4d3ce5 (diff)
downloadpatchwork-eb6db921938c72c0655ca2e381818a471f99f5fa.tar.bz2
patchwork-eb6db921938c72c0655ca2e381818a471f99f5fa.tar.xz
Implement confirmation emails.
To do this, we need to allow sucessive requests for the same confirmation URL. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'apps')
-rw-r--r--apps/patchwork/forms.py2
-rw-r--r--apps/patchwork/models.py13
-rw-r--r--apps/patchwork/requestcontext.py2
-rw-r--r--apps/patchwork/views/user.py34
-rw-r--r--apps/settings.py1
5 files changed, 43 insertions, 9 deletions
diff --git a/apps/patchwork/forms.py b/apps/patchwork/forms.py
index ed55c4f..22408d9 100644
--- a/apps/patchwork/forms.py
+++ b/apps/patchwork/forms.py
@@ -30,7 +30,7 @@ class RegisterForm(forms.ModelForm):
class Meta:
model = RegistrationRequest
- exclude = ['key']
+ exclude = ['key', 'active', 'date']
def clean_email(self):
value = self.cleaned_data['email']
diff --git a/apps/patchwork/models.py b/apps/patchwork/models.py
index f6943fc..7eb28d0 100644
--- a/apps/patchwork/models.py
+++ b/apps/patchwork/models.py
@@ -145,8 +145,12 @@ class RegistrationRequest(models.Model):
email = models.CharField(max_length = 200, unique = True)
password = models.CharField(max_length = 200)
key = models.CharField(max_length = 32, default = _confirm_key)
+ date = models.DateTimeField(default=datetime.datetime.now)
+ active = models.BooleanField(default = True)
def create_user(self):
+ if not self.active:
+ return
user = User.objects.create_user(self.username,
self.email, self.password)
user.first_name = self.first_name
@@ -154,7 +158,8 @@ class RegistrationRequest(models.Model):
user.save()
profile = UserProfile(user = user)
profile.save()
- self.delete()
+ self.active = False
+ self.save()
# link a person to this user. if none exists, create.
person = None
@@ -176,10 +181,13 @@ class RegistrationRequest(models.Model):
class UserPersonConfirmation(models.Model):
user = models.ForeignKey(User)
email = models.CharField(max_length = 200)
- date = models.DateTimeField(default=datetime.datetime.now)
key = models.CharField(max_length = 32, default = _confirm_key)
+ date = models.DateTimeField(default=datetime.datetime.now)
+ active = models.BooleanField(default = True)
def confirm(self):
+ if not self.active:
+ return
person = None
try:
person = Person.objects.get(email = self.email)
@@ -190,6 +198,7 @@ class UserPersonConfirmation(models.Model):
person.link_to_user(self.user)
person.save()
+ self.active = False
class Admin:
diff --git a/apps/patchwork/requestcontext.py b/apps/patchwork/requestcontext.py
index cb9a782..e9a2675 100644
--- a/apps/patchwork/requestcontext.py
+++ b/apps/patchwork/requestcontext.py
@@ -19,6 +19,7 @@
from django.template import RequestContext
from django.utils.html import escape
+from django.contrib.sites.models import Site
from patchwork.filters import Filters
from patchwork.models import Bundle, Project
@@ -65,6 +66,7 @@ class PatchworkRequestContext(RequestContext):
self.update({
'project': self.project,
+ 'site': Site.objects.get_current(),
'other_projects': len(self.projects) > 1
})
diff --git a/apps/patchwork/views/user.py b/apps/patchwork/views/user.py
index 223cfc6..59d01a5 100644
--- a/apps/patchwork/views/user.py
+++ b/apps/patchwork/views/user.py
@@ -31,6 +31,10 @@ from patchwork.utils import Order, get_patch_ids, set_patches
from patchwork.filters import DelegateFilter
from patchwork.paginator import Paginator
from patchwork.views import generic_list
+from django.template.loader import render_to_string
+from django.template import Context
+from django.conf import settings
+from django.core.mail import send_mail
import django.core.urlresolvers
def register(request):
@@ -47,9 +51,19 @@ def register(request):
if form.is_valid():
form.save()
- context['request'] = reg_req
- else:
- context['form'] = form
+ try:
+ context['request'] = reg_req
+ send_mail('Patchwork account confirmation',
+ render_to_string('patchwork/register.mail', context),
+ settings.PATCHWORK_FROM_EMAIL,
+ [form.cleaned_data['email']])
+
+ except Exception, ex:
+ context['request'] = None
+ context['error'] = 'An error occurred during registration. ' + \
+ 'Please try again later'
+
+ context['form'] = form
return render_to_response(template, context)
@@ -128,9 +142,19 @@ def link(request):
if form.is_valid():
conf = UserPersonConfirmation(user = request.user,
email = form.cleaned_data['email'])
- conf.save()
context['confirmation'] = conf
+ try:
+ send_mail('Patchwork email address confirmation',
+ render_to_string('patchwork/user-link.mail',
+ context),
+ settings.PATCHWORK_FROM_EMAIL,
+ [form.cleaned_data['email']])
+ conf.save()
+ except Exception, ex:
+ context['confirmation'] = None
+ context['error'] = 'An error occurred during confirmation. ' + \
+ 'Please try again later'
context['linkform'] = form
return render_to_response('patchwork/user-link.html', context)
@@ -146,8 +170,6 @@ def link_confirm(request, key):
else:
context['person'] = Person.objects.get(email = confirmation.email)
- confirmation.delete()
-
return render_to_response('patchwork/user-link-confirm.html', context)
@login_required
diff --git a/apps/settings.py b/apps/settings.py
index 0d74b10..df656de 100644
--- a/apps/settings.py
+++ b/apps/settings.py
@@ -92,3 +92,4 @@ INSTALLED_APPS = (
)
DEFAULT_PATCHES_PER_PAGE = 100
+PATCHWORK_FROM_EMAIL = 'Patchwork <patchwork@patchwork.example.com>'