def migrate_usernames(stream=None, quiet=False): """ Migrate all existing users to django-email-as-username hashed usernames. If any users cannot be migrated an exception will be raised and the migration will not run. """ stream = stream or (quiet and open(os.devnull, 'w') or sys.stdout) # Check all users can be migrated before applying migration emails = set() errors = [] for user in User.objects.all(): if not user.email: errors.append("Cannot convert user '%s' because email is not " "set." % (user._username, )) elif user.email.lower() in emails: errors.append("Cannot convert user '%s' because email '%s' " "already exists." % (user._username, user.email)) else: emails.add(user.email.lower()) # Cannot migrate. if errors: [stream.write(error + '\n') for error in errors] raise Exception('django-email-as-username migration failed.') # Can migrate just fine. total = User.objects.count() for user in User.objects.all(): user.username = _email_to_username(user.email) user.save() stream.write("Successfully migrated usernames for all %d users\n" % (total, ))
def handle_noargs(self, **options): """Upgrade the existing User table to be usable by django-email-as-username. This is specifically designed for versions 1.3 and above of the package.""" title = "Upgrading User table for django-email-as-username" sys.stdout.write("=====\n" + title + "\n=====\n") sys.stdout.flush() total = User.objects.count() failed = 0 for user in User.objects.all(): user.username = _email_to_username(user.email) try: sid = transaction.savepoint() user.save() transaction.savepoint_commit(sid) except IntegrityError: failed += 1 sys.stdout.write( "Could not convert user with username '%s' because the email " "<%s> is already taken.\n" % (user.username, user.email) ) sys.stdout.flush() transaction.savepoint_rollback(sid) sys.stdout.write("Converted %d of %d users (%d failed).\n" % (total - failed, total, failed))
def get_user(email, queryset=None): """ Return the user with given email address. Note that email address matches are case-insensitive. """ if queryset is None: queryset = User.objects return queryset.get(username=_email_to_username(email))
def user_save_patch(self, *args, **kwargs): email_as_username = (self.username.lower() == self.email.lower()) if self.pk is not None: old_user = self.__class__.objects.get(pk=self.pk) email_as_username = (email_as_username or ('@' in self.username and old_user.username == old_user.email)) if email_as_username: self.username = _email_to_username(self.email) try: super(User, self).save_base(*args, **kwargs) finally: if email_as_username: self.username = self.email
def user_save_patch(self, *args, **kwargs): email_as_username = (self.username.lower() == self.email.lower()) if self.pk is not None: old_user = self.__class__.objects.get(pk=self.pk) email_as_username = ( email_as_username or ('@' in self.username and old_user.username == old_user.email) ) if email_as_username: self.username = _email_to_username(self.email) try: super(User, self).save_base(*args, **kwargs) finally: if email_as_username: self.username = self.email
def user_save_patch(self, *args, **kwargs): email_as_username = (self.username.lower() == self.email.lower()) if self.pk is not None: try: old_user = self.__class__.objects.get(pk=self.pk) except ObjectDoesNotExist: pass email_as_username = (email_as_username or ('@' in self.username and old_user.username == old_user.email)) if email_as_username: self.username = _email_to_username(self.email) try: super(get_user_model(), self).save_base(*args, **kwargs) finally: if email_as_username: self.username = self.email
def user_save_patch(self, *args, **kwargs): # If no email, ensure username is a unique string if settings.ALLOW_EMPTY and not self.email: if not self.username or not self.username.startswith(settings.EMPTY_PREFIX): self.username = '******' % (settings.EMPTY_PREFIX, self.pk or '') # If no email but has a username, leave for other auth backends else: self.username = _email_to_username(self.email) super(User, self).save_base(*args, **kwargs) if settings.ALLOW_EMPTY and not self.email: # Convert temporary to permanent if self.username == settings.EMPTY_PREFIX: self.username = '******' % (settings.EMPTY_PREFIX, self.pk) super(User, self).save_base(*args, **kwargs) else: self.username = self.email
def user_save_patch(self, *args, **kwargs): email_as_username = (self.username.lower() == self.email.lower()) if self.pk is not None: try: old_user = self.__class__.objects.get(pk=self.pk) except ObjectDoesNotExist: pass email_as_username = ( email_as_username or ('@' in self.username and old_user.username == old_user.email) ) if email_as_username: self.username = _email_to_username(self.email) try: super(get_user_model(), self).save_base(*args, **kwargs) finally: if email_as_username: self.username = self.email
def user_init_patch(self, *args, **kwargs): super(User, self).__init__(*args, **kwargs) self._username = self.username if self.username == _email_to_username(self.email): # Username should be replaced by email, since the hashes match self.username = self.email
def user_save_patch(self, *args, **kwargs): self.username = _email_to_username(self.email) super(User, self).save(*args, **kwargs) self.username = self.email
def save(self, commit=True): user = super(EmailUserCreationForm, self).save(commit=False) user.username = _email_to_username(self.cleaned_data['email']) if commit: user.save() return user
def user_init_patch(self, *args, **kwargs): super(get_user_model(), self).__init__(*args, **kwargs) self._username = self.username if self.username == _email_to_username(self.email): # Username should be replaced by email, since the hashes match self.username = self.email
def user_save_patch(self, *args, **kwargs): self.username = _email_to_username(self.email) super(User, self).save_base(*args, **kwargs) self.username = self.email