def email_confirmation(request): context = {} if request.method == 'POST': form = EmailConfirmationForm(request.POST) if form.is_valid(): code = request.POST['code'] username = request.POST['username'] try: tas = TASClient() user = tas.get_user(username=username) tas.verify_user(user['id'], code) activate_local_user(username) messages.success(request, 'Congratulations, your email has been verified! Please log in now.') return HttpResponseRedirect(reverse('tas:profile')) except Exception as e: logger.exception('Email verification failed') if e[0] == 'User not found': form.add_error('username', e[1]) else: form.add_error('code', 'Email verification failed. Please check your verification code and username and try again.') else: form = EmailConfirmationForm(initial={'code': request.GET.get('code', '')}) context['form'] = form return render(request, 'tas/email_confirmation.html', context)
def email_confirmation(request): context = {} if request.method == 'POST': form = EmailConfirmationForm(request.POST) if form.is_valid(): code = request.POST['code'] username = request.POST['username'] try: tas = TASClient() user = tas.get_user(username=username) tas.verify_user(user['id'], code) activate_local_user(username) messages.success( request, 'Congratulations, your email has been verified! Please log in now.' ) return HttpResponseRedirect(reverse('tas:profile')) except Exception as e: logger.exception('Email verification failed') if e[0] == 'User not found': form.add_error('username', e[1]) else: form.add_error( 'code', 'Email verification failed. Please check your verification code and username and try again.' ) else: form = EmailConfirmationForm( initial={'code': request.GET.get('code', '')}) context['form'] = form return render(request, 'tas/email_confirmation.html', context)
def authenticate(self, username=None, password=None, request=None, **kwargs): user = None if username is not None and password is not None: tas_user = None logger = logging.getLogger('tas') if request is not None: logger.info('Attempting login for user "%s" from IP "%s"' % (username, request.META.get('REMOTE_ADDR'))) else: logger.info('Attempting login for user "%s" from IP "%s"' % (username, 'unknown')) try: # Check if this user is valid on the mail server if self.tas.authenticate(username, password): tas_user = self.tas.get_user(username=username) activate_local_user(username) logger.info('Login successful for user "%s"' % username) else: raise ValidationError('Authentication Error', 'Your username or password is incorrect.') except Exception as e: logger.error(e.args) if re.search(r'PendingEmailConfirmation', e.args[1]): raise ValidationError('Please confirm your email address before logging in.') else: raise ValidationError(e.args[1]) if tas_user is not None: UserModel = get_user_model() try: # Check if the user exists in Django's local database user = UserModel.objects.get(username=username) user.first_name = tas_user['firstName'] user.last_name = tas_user['lastName'] user.email = tas_user['email'] user.save() except UserModel.DoesNotExist: # Create a user in Django's local database user = UserModel.objects.create_user( username=username, first_name=tas_user['firstName'], last_name=tas_user['lastName'], email=tas_user['email'] ) return user