def resend_password_email(request): '''Send the registration email again.''' email = request.POST.get('email') username = email_to_username(email) validator = EmailValidator try: validator(email) except ValidationError: return dict(success=False, message='Invalid email address') try: user = User.objects.get(username=username) except User.DoesNotExist: return dict(success=False, message='Cannot find user.') if not user.get_profile().change_password_on_login: return dict(success=False, message='User have already logged in before.') password = user.get_profile().plaintext_password send_registration_email(username, password) return dict(success=True, message='Email sent successfully to %s.' % user.email)
def _check_email(email): email_form = EmailForm({'email':email}) if not email_form.is_valid(): message = email_form.errors.values()[0][0] return {'status': 'INVALID_USER', 'message':djangof('<span>{{message}}</span>', dict(message=message))} username = email_to_username(email) try: _user = User.objects.get(username=username) except User.DoesNotExist: # Create new user, # generate default password, # Send the notification email. new_user = User.objects.create_user(username, email) set_default_password(new_user) new_user.save() new_user.get_profile().save() action_factory.user_new(new_user) return {'status': 'NEW_USER'} return {'status': 'REGISTERED'}
def login(request, redirect_to='/home/'): # this view function only has logic for POST. # the rendering is done by the front screen, /. # get parameter 'next' is the redirection. redirect_to = request.GET.get('next', redirect_to) warning = messager(request, messages.INFO) login_failed = False login_form = IntroForm(request.POST) user = None def get_user_or_none(username): try: return User.objects.get(username=username) except User.DoesNotExist: return None if login_form.is_valid(): email, password = extract_cd(login_form, 'email', 'password') username = email_to_username(email) user = auth.authenticate(username=username, password=password) if user is not None: if user.is_active: auth.login(request, user) # TODO - create login signal? action_factory.user_login(user) if user.get_profile().change_password_on_login: # redirect to change password screen return login_screens_with_next(change_password, redirect_to) return HttpResponseRedirect(redirect_to) else: user = User.objects.get(username=username) warning('Your account is disabled.'); login_failed = True else: user = get_user_or_none(username=username) warning('Invalid username / password.'); login_failed = True else: warning('Invalid username / password.'); login_failed = True if login_failed and user is not None: # Log the error message. action_factory.user_login_fail(user) # make sure that redirect preserves 'next' parameter. return redirect('/' + "?" + urlencode({'next':redirect_to}))