mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
confirmation: Remove ConfirmationManager.
Also adds Confirmation.type, and cleans up the rest of Confirmation to look more like the model definitions in zerver. In the migration, all existing confirmations adopt the type USER_REGISTRATION, to be conservative. In a few commits, different confirmation types will have different validity periods, and USER_REGISTRATION will have the shortest default.
This commit is contained in:
38
confirmation/migrations/0004_remove_confirmationmanager.py
Normal file
38
confirmation/migrations/0004_remove_confirmationmanager.py
Normal file
@@ -0,0 +1,38 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.2 on 2017-07-08 04:23
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('confirmation', '0003_emailchangeconfirmation'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.DeleteModel(
|
||||
name='EmailChangeConfirmation',
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='confirmation',
|
||||
options={},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='confirmation',
|
||||
name='type',
|
||||
field=models.PositiveSmallIntegerField(default=1),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='confirmation',
|
||||
name='confirmation_key',
|
||||
field=models.CharField(max_length=40),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='confirmation',
|
||||
name='date_sent',
|
||||
field=models.DateTimeField(),
|
||||
),
|
||||
]
|
@@ -4,6 +4,7 @@
|
||||
|
||||
__revision__ = '$Id: models.py 28 2009-10-22 15:03:02Z jarek.zgoda $'
|
||||
|
||||
import datetime
|
||||
import re
|
||||
|
||||
from django.db import models
|
||||
@@ -46,7 +47,8 @@ def get_object_from_key(confirmation_key):
|
||||
def create_confirmation_link(obj, host, confirmation_type):
|
||||
# type: (Union[ContentType, int], str, int) -> str
|
||||
key = generate_key()
|
||||
Confirmation.objects.create(content_object=obj, date_sent=timezone_now(), confirmation_key=key)
|
||||
Confirmation.objects.create(content_object=obj, date_sent=timezone_now(), confirmation_key=key,
|
||||
type=confirmation_type)
|
||||
return confirmation_url(key, host, confirmation_type)
|
||||
|
||||
def confirmation_url(confirmation_key, host, confirmation_type):
|
||||
@@ -56,40 +58,24 @@ def confirmation_url(confirmation_key, host, confirmation_type):
|
||||
reverse(_properties[confirmation_type].url_name,
|
||||
kwargs={'confirmation_key': confirmation_key}))
|
||||
|
||||
class ConfirmationManager(models.Manager):
|
||||
pass
|
||||
|
||||
class EmailChangeConfirmationManager(ConfirmationManager):
|
||||
pass
|
||||
|
||||
class Confirmation(models.Model):
|
||||
content_type = models.ForeignKey(ContentType)
|
||||
object_id = models.PositiveIntegerField()
|
||||
object_id = models.PositiveIntegerField() # type: int
|
||||
content_object = GenericForeignKey('content_type', 'object_id')
|
||||
date_sent = models.DateTimeField('sent')
|
||||
confirmation_key = models.CharField('activation key', max_length=40)
|
||||
date_sent = models.DateTimeField() # type: datetime.datetime
|
||||
confirmation_key = models.CharField(max_length=40) # type: str
|
||||
|
||||
# The following list is the set of valid types
|
||||
USER_REGISTRATION = 1
|
||||
INVITATION = 2
|
||||
EMAIL_CHANGE = 3
|
||||
UNSUBSCRIBE = 4
|
||||
SERVER_REGISTRATION = 5
|
||||
|
||||
objects = ConfirmationManager()
|
||||
|
||||
class Meta(object):
|
||||
verbose_name = 'confirmation email'
|
||||
verbose_name_plural = 'confirmation emails'
|
||||
type = models.PositiveSmallIntegerField() # type: int
|
||||
|
||||
def __unicode__(self):
|
||||
# type: () -> Text
|
||||
return 'confirmation email for %s' % (self.content_object,)
|
||||
|
||||
class EmailChangeConfirmation(Confirmation):
|
||||
class Meta(object):
|
||||
proxy = True
|
||||
|
||||
objects = EmailChangeConfirmationManager()
|
||||
return '<Confirmation: %s>' % (self.content_object,)
|
||||
|
||||
class ConfirmationType(object):
|
||||
def __init__(self, url_name):
|
||||
|
@@ -59,7 +59,8 @@ class EmailChangeTestCase(ZulipTestCase):
|
||||
date_sent = now() - datetime.timedelta(days=2)
|
||||
Confirmation.objects.create(content_object=obj,
|
||||
date_sent=date_sent,
|
||||
confirmation_key=key)
|
||||
confirmation_key=key,
|
||||
type=Confirmation.EMAIL_CHANGE)
|
||||
url = confirmation_url(key, user_profile.realm.host, Confirmation.EMAIL_CHANGE)
|
||||
response = self.client_get(url)
|
||||
self.assert_in_success_response(["Whoops"], response)
|
||||
@@ -78,7 +79,8 @@ class EmailChangeTestCase(ZulipTestCase):
|
||||
key = generate_key()
|
||||
Confirmation.objects.create(content_object=obj,
|
||||
date_sent=now(),
|
||||
confirmation_key=key)
|
||||
confirmation_key=key,
|
||||
type=Confirmation.EMAIL_CHANGE)
|
||||
url = confirmation_url(key, user_profile.realm.host, Confirmation.EMAIL_CHANGE)
|
||||
response = self.client_get(url)
|
||||
|
||||
|
@@ -26,7 +26,7 @@ from zerver.lib.users import check_change_full_name
|
||||
from zerver.lib.timezone import get_all_timezones
|
||||
from zerver.models import UserProfile, Realm, name_changes_disabled, \
|
||||
EmailChangeStatus
|
||||
from confirmation.models import EmailChangeConfirmation, get_object_from_key
|
||||
from confirmation.models import get_object_from_key
|
||||
|
||||
@zulip_login_required
|
||||
def confirm_email_change(request, confirmation_key):
|
||||
|
Reference in New Issue
Block a user