def get_user_by_email(email): """Gets a User by `email` Returns None if not found """ from htk.apps.accounts.models import UserEmail if is_valid_email(email): # check for confirmed email addresses user_emails = UserEmail.objects.filter(email__iexact=email, is_confirmed=True) num_results = user_emails.count() if num_results == 1: user = user_emails[0].user elif num_results > 1: # there should only be one User with this email... # if there are more, we have a data error! raise NonUniqueEmail(email) else: # num_results == 0, so check UserModel for active users with email UserModel = get_user_model() try: user = UserModel.objects.get(email__iexact=email, is_active=True) except UserModel.MultipleObjectsReturned: user = None request = get_current_request() rollbar.report_exc_info() raise NonUniqueEmail(email) except UserModel.DoesNotExist: # also check newly registered accounts # if not user.is_active, handling will get passed downstream user = get_incomplete_signup_user_by_email(email) else: user = None return user
def get_incomplete_signup_user_by_email(email): """Gets an incomplete signup User by `email` Returns None if not found User MUST NOT be active """ from htk.apps.accounts.models import UserEmail UserModel = get_user_model() user_emails = UserEmail.objects.filter( email__iexact=email, is_confirmed=False, user__is_active=False, ) num_results = user_emails.count() user = None if num_results == 1: user = user_emails[0].user elif num_results > 1: # there should only be one User with this email... # if there are more, we have a data error! raise NonUniqueEmail(email) else: try: user = UserModel.objects.get(email__iexact=email, is_active=False) except UserModel.DoesNotExist: user = None return user
def resend_confirmation(request, data=None, template='account/resend_confirmation.html', email_template=None, email_subject=None, email_sender=None, renderer=_r): if data is None: data = wrap_data(request) data.update(csrf(request)) if request.method == 'POST': resend_confirmation_form = ResendConfirmationForm(request.POST) if resend_confirmation_form.is_valid(): email = resend_confirmation_form.cleaned_data.get('email') user_emails = UserEmail.objects.filter(email=email) num_confirmed_user_emails = user_emails.filter( is_confirmed=True).count() if num_confirmed_user_emails == 1: data['already_active'] = True elif num_confirmed_user_emails > 1: raise NonUniqueEmail(email) else: unconfirmed_user_emails = user_emails.filter( is_confirmed=False) for unconfirmed in unconfirmed_user_emails: unconfirmed.send_activation_email( domain=request.get_host(), template=email_template, subject=email_subject, sender=email_sender, resend=True) data['success'] = True else: for error in resend_confirmation_form.non_field_errors(): data['errors'].append(error) else: email = request.GET.get('email') initial_data = { 'email': email, } resend_confirmation_form = ResendConfirmationForm(initial=initial_data) if 'input_attrs' in data: set_input_attrs(resend_confirmation_form, attrs=data['input_attrs']) data['resend_confirmation_form'] = resend_confirmation_form response = renderer(request, template, data=data) return response