Revision 6e3bb9c8 snf-astakos-app/astakos/im/models.py
b/snf-astakos-app/astakos/im/models.py | ||
---|---|---|
596 | 596 |
def email_change_is_pending(self): |
597 | 597 |
return self.emailchanges.count() > 0 |
598 | 598 |
|
599 |
def get_pending_email_change(self): |
|
600 |
return self.emailchanges.get() |
|
601 |
|
|
602 |
@property |
|
603 |
def email_address_log(self): |
|
604 |
from astakos.im.util import email_address_log |
|
605 |
return email_address_log(self.email, skip_current=True) |
|
606 |
|
|
599 | 607 |
@property |
600 | 608 |
def status_display(self): |
601 | 609 |
msg = "" |
... | ... | |
609 | 617 |
msg = "Pending email verification" |
610 | 618 |
if not self.moderated: |
611 | 619 |
msg = "Pending moderation" |
612 |
if not self.is_active and self.email_verified:
|
|
620 |
if not self.is_active and self.is_accepted():
|
|
613 | 621 |
msg = "Accepted/Inactive" |
614 | 622 |
if self.deactivated_reason: |
615 | 623 |
msg += " (%s)" % (self.deactivated_reason) |
... | ... | |
1052 | 1060 |
|
1053 | 1061 |
class EmailChangeManager(models.Manager): |
1054 | 1062 |
|
1063 |
def get_query_set(self): |
|
1064 |
""" |
|
1065 |
Exclude consumed email change objects by default. |
|
1066 |
""" |
|
1067 |
qs = super(EmailChangeManager, self).get_query_set() |
|
1068 |
return qs.filter(is_consumed=False) |
|
1069 |
|
|
1070 |
def consumed(self): |
|
1071 |
qs = super(EmailChangeManager, self).get_query_set() |
|
1072 |
return qs.filter(is_consumed=True) |
|
1073 |
|
|
1055 | 1074 |
@transaction.commit_on_success |
1056 | 1075 |
def change_email(self, activation_key): |
1057 | 1076 |
""" |
... | ... | |
1090 | 1109 |
old_email = user.email |
1091 | 1110 |
user.set_email(email_change.new_email_address) |
1092 | 1111 |
user.save() |
1093 |
email_change.delete() |
|
1112 |
email_change.replaced_email_address = old_email |
|
1113 |
email_change.set_consumed() |
|
1114 |
email_change.save() |
|
1094 | 1115 |
msg = "User %s changed email from %s to %s" |
1095 | 1116 |
logger.log(astakos_settings.LOGGING_LEVEL, msg, user.log_display, |
1096 | 1117 |
old_email, user.email) |
... | ... | |
1105 | 1126 |
help_text=_('Provide a new email address. Until you verify the new ' |
1106 | 1127 |
'address by following the activation link that will be ' |
1107 | 1128 |
'sent to it, your old email address will remain active.')) |
1129 |
replaced_email_address = models.EmailField(blank=True, null=True, |
|
1130 |
default=None) |
|
1108 | 1131 |
user = models.ForeignKey( |
1109 |
AstakosUser, unique=True, related_name='emailchanges')
|
|
1132 |
AstakosUser, related_name='emailchanges') |
|
1110 | 1133 |
requested_at = models.DateTimeField(auto_now_add=True) |
1111 | 1134 |
activation_key = models.CharField( |
1112 | 1135 |
max_length=40, unique=True, db_index=True) |
1136 |
cancel_key = models.CharField(max_length=40, unique=True, db_index=True) |
|
1137 |
is_consumed = models.BooleanField(default=False) |
|
1138 |
consumed_at = models.DateTimeField(_('Consumption date'), |
|
1139 |
null=True, blank=True) |
|
1113 | 1140 |
|
1114 | 1141 |
objects = EmailChangeManager() |
1115 | 1142 |
|
1143 |
def set_consumed(self): |
|
1144 |
self.is_consumed = True |
|
1145 |
self.consumed_at = datetime.now() |
|
1146 |
|
|
1116 | 1147 |
def get_url(self): |
1117 |
return reverse('email_change_confirm', |
|
1118 |
kwargs={'activation_key': self.activation_key}) |
|
1148 |
return reverse('email_change_confirm', kwargs={ |
|
1149 |
'activation_key': self.activation_key |
|
1150 |
}) |
|
1151 |
|
|
1152 |
def get_cancel_url(self): |
|
1153 |
return reverse('email_change_cancel', kwargs={ |
|
1154 |
'cancel_key': self.cancel_key |
|
1155 |
}) |
|
1119 | 1156 |
|
1120 | 1157 |
def activation_key_expired(self): |
1121 | 1158 |
expiration_date = timedelta( |
1122 | 1159 |
days=astakos_settings.EMAILCHANGE_ACTIVATION_DAYS) |
1123 | 1160 |
return self.requested_at + expiration_date < datetime.now() |
1124 | 1161 |
|
1162 |
def __unicode__(self): |
|
1163 |
return "%r from:%r to:%r consumed:%r" % ( |
|
1164 |
self.__class__, self.new_email_address, |
|
1165 |
self.replaced_email_address, self.consumed_at) |
|
1166 |
|
|
1167 |
|
|
1125 | 1168 |
|
1126 | 1169 |
class AdditionalMail(models.Model): |
1127 | 1170 |
""" |
Also available in: Unified diff