示例#1
0
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)
示例#2
0
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'}
示例#3
0
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}))