Ejemplo n.º 1
0
def register(request,
             data=None,
             reg_form_model=UserRegistrationForm,
             reg_form_kwargs=None,
             auth_form_model=UsernameEmailAuthenticationForm,
             success_url_name='account_register_done',
             success_message=None,
             login_if_success=False,
             template='account/register.html',
             email_template=None,
             email_subject=None,
             email_sender=None,
             renderer=_r):
    if data is None:
        data = wrap_data(request)

    data.update(csrf(request))
    success = False
    if request.method == 'POST':
        if reg_form_kwargs is None:
            reg_form_kwargs = {}
        reg_form = reg_form_model(request.POST, **reg_form_kwargs)
        if reg_form.is_valid():
            domain = request.get_host()
            new_user = reg_form.save(domain=domain,
                                     email_template=email_template,
                                     email_subject=email_subject,
                                     email_sender=email_sender)
            if login_if_success:
                username = new_user.username
                password = reg_form.cleaned_data.get(
                    'password1')  # new_user.password is a hashed value
                auth_user = authenticate(username=username, password=password)
                login_authenticated_user(request, auth_user)
            else:
                pass
            success = True
        else:
            for error in reg_form.non_field_errors():
                data['errors'].append(error)
            # might be tempted to do this, but it might display too many errors/multiple errors per field
            # so we will just handle it in the form's clean() method
            #for error in reg_form._errors.values():
            #data['errors'].append(error)
    else:
        reg_form = reg_form_model(None)
    data['reg_form'] = reg_form
    if auth_form_model:
        # register page also has an auth form
        auth_form = auth_form_model(None)
        data['auth_form'] = auth_form
    if success:
        if success_message is not None:
            messages.success(request, success_message)
        response = redirect(reverse(success_url_name))
    else:
        response = renderer(request, template, data=data)
    return response
Ejemplo n.º 2
0
def login_view(request,
               data=None,
               resend_confirmation_url_name='account_resend_confirmation',
               auth_form_model=UsernameEmailAuthenticationForm,
               default_next_url_name='account_login_redirect',
               template='account/login.html',
               renderer=_r):
    if data is None:
        data = wrap_data(request)
    data.update(csrf(request))
    success = False
    if request.method == 'POST':
        recaptcha_success = True

        google_recaptcha_response_token = request.POST.get('recaptcha', None)
        if google_recaptcha_response_token:
            from htk.lib.google.recaptcha.utils import google_recaptcha_site_verification
            request_ip = extract_request_ip(request)
            recaptcha_data = google_recaptcha_site_verification(
                google_recaptcha_response_token, request_ip)
            recaptcha_success = recaptcha_data.get('success', False)

        auth_form = auth_form_model(None, request.POST)
        if auth_form.is_valid():
            user = auth_form.get_user()
            if not recaptcha_success:
                from htk.apps.accounts.events import failed_recaptcha_on_login
                failed_recaptcha_on_login(user, request=request)
            else:
                pass

            login_authenticated_user(request, user)
            success = True
            default_next_uri = reverse(default_next_url_name)
            next_uri = request.GET.get('next', default_next_uri)
        else:
            for error in auth_form.non_field_errors():
                data['errors'].append(error)
            auth_user = auth_form.get_user()
            if auth_user and not auth_user.is_active:
                msg = get_resend_confirmation_help_message(
                    resend_confirmation_url_name, email=auth_user.email)
                data['errors'].append(msg)
                resend_confirmation_form = ResendConfirmationForm(
                    {'email': auth_user.email})
                data['resend_confirmation_form'] = resend_confirmation_form
            else:
                pass
    else:
        auth_form = auth_form_model(None)

    if success:
        response = redirect(next_uri)
    else:
        data['auth_form'] = auth_form
        response = renderer(request, template, data=data)

    return response
Ejemplo n.º 3
0
def register(
    request,
    data=None,
    reg_form_model=UserRegistrationForm,
    reg_form_kwargs=None,
    auth_form_model=UsernameEmailAuthenticationForm,
    success_url_name='account_register_done',
    success_message=None,
    login_if_success=False,
    template='account/register.html',
    email_template=None,
    email_subject=None,
    email_sender=None,
    renderer=_r
):
    if data is None:
        data = wrap_data(request)

    data.update(csrf(request))
    success = False
    if request.method == 'POST':
        if reg_form_kwargs is None:
            reg_form_kwargs = {}
        reg_form = reg_form_model(request.POST, **reg_form_kwargs)
        if reg_form.is_valid():
            domain = request.get_host()
            new_user = reg_form.save(domain=domain, email_template=email_template, email_subject=email_subject, email_sender=email_sender)
            if login_if_success:
                username = new_user.username
                password = reg_form.cleaned_data.get('password1') # new_user.password is a hashed value
                auth_user = authenticate(username=username, password=password)
                login_authenticated_user(request, auth_user)
            else:
                pass
            success = True
        else:
            for error in reg_form.non_field_errors():
                data['errors'].append(error)
            # might be tempted to do this, but it might display too many errors/multiple errors per field
            # so we will just handle it in the form's clean() method
            #for error in reg_form._errors.values():
                #data['errors'].append(error)
    else:
        reg_form = reg_form_model(None)
    data['reg_form'] = reg_form
    if auth_form_model:
        # register page also has an auth form
        auth_form = auth_form_model(None)
        data['auth_form'] = auth_form
    if success:
        if success_message is not None:
            messages.success(request, success_message)
        response = redirect(reverse(success_url_name))
    else:
        response = renderer(request, template, data=data)
    return response
Ejemplo n.º 4
0
def login_view(request):
    from htk.apps.accounts.forms.auth import UsernameEmailAuthenticationForm
    auth_form = UsernameEmailAuthenticationForm(None, request.POST)
    if auth_form.is_valid():
        user = auth_form.get_user()
        login_authenticated_user(request, user)
        response = json_response_okay()
    else:
        response = json_response_error()
    return response
Ejemplo n.º 5
0
def login_view(request):
    from htk.apps.accounts.forms.auth import UsernameEmailAuthenticationForm
    auth_form = UsernameEmailAuthenticationForm(None, request.POST)
    if auth_form.is_valid():
        user = auth_form.get_user()
        login_authenticated_user(request, user)
        response = json_response_okay()
    else:
        response = json_response_error()
    return response
Ejemplo n.º 6
0
    def process_request(self, request):
        already_logged_in_user = request.user if hasattr(request, 'user') and request.user.is_authenticated() else None

        token = request.GET.get('token', None)
        token_user = authenticate(request=request, token=token) if token else None

        if token_user:
            if already_logged_in_user and token_user != already_logged_in_user:
                # mismatch between logged-in user and token user
                logout(request)
            else:
                login_authenticated_user(request, token_user)
        else:
            # no valid user found from token
            pass
Ejemplo n.º 7
0
    def process_request(self, request):
        already_logged_in_user = request.user if hasattr(
            request, 'user') and request.user.is_authenticated() else None

        token = request.GET.get('token', None)
        token_user = authenticate(request=request,
                                  token=token) if token else None

        if token_user:
            if already_logged_in_user and token_user != already_logged_in_user:
                # mismatch between logged-in user and token user
                logout(request)
            else:
                login_authenticated_user(request, token_user)
        else:
            # no valid user found from token
            pass
Ejemplo n.º 8
0
def login_view(
    request,
    data=None,
    resend_confirmation_url_name='account_resend_confirmation',
    auth_form_model=UsernameEmailAuthenticationForm,
    default_next_url_name='account_login_redirect',
    template='account/login.html',
    renderer=_r
):
    if data is None:
        data = wrap_data(request)
    data.update(csrf(request))
    success = False
    if request.method == 'POST':
        auth_form = auth_form_model(None, request.POST)
        if auth_form.is_valid():
            user = auth_form.get_user()
            login_authenticated_user(request, user)
            success = True
            default_next_uri = reverse(default_next_url_name)
            next_uri = request.GET.get('next', default_next_uri)
        else:
            for error in auth_form.non_field_errors():
                data['errors'].append(error)
            auth_user = auth_form.get_user()
            if auth_user and not auth_user.is_active:
                msg = get_resend_confirmation_help_message(resend_confirmation_url_name, email=auth_user.email)
                data['errors'].append(msg)
                resend_confirmation_form = ResendConfirmationForm({'email': auth_user.email})
                data['resend_confirmation_form'] = resend_confirmation_form
            else:
                pass
    else:
        auth_form = auth_form_model(None)

    if success:
        response = redirect(next_uri)
    else:
        data['auth_form'] = auth_form
        response = renderer(request, template, data=data)

    return response
Ejemplo n.º 9
0
def login_view(request,
               data=None,
               resend_confirmation_url_name='account_resend_confirmation',
               auth_form_model=UsernameEmailAuthenticationForm,
               default_next_url_name='account_login_redirect',
               template='account/login.html',
               renderer=_r):
    if data is None:
        data = wrap_data(request)
    data.update(csrf(request))
    success = False
    if request.method == 'POST':
        auth_form = auth_form_model(None, request.POST)
        if auth_form.is_valid():
            user = auth_form.get_user()
            login_authenticated_user(request, user)
            success = True
            default_next_uri = reverse(default_next_url_name)
            next_uri = request.GET.get('next', default_next_uri)
        else:
            for error in auth_form.non_field_errors():
                data['errors'].append(error)
            auth_user = auth_form.get_user()
            if auth_user and not auth_user.is_active:
                msg = get_resend_confirmation_help_message(
                    resend_confirmation_url_name, email=auth_user.email)
                data['errors'].append(msg)
                resend_confirmation_form = ResendConfirmationForm(
                    {'email': auth_user.email})
                data['resend_confirmation_form'] = resend_confirmation_form
            else:
                pass
    else:
        auth_form = auth_form_model(None)

    if success:
        response = redirect(next_uri)
    else:
        data['auth_form'] = auth_form
        response = renderer(request, template, data=data)

    return response
Ejemplo n.º 10
0
def register_social_login(
        request,
        data=None,
        resend_confirmation_url_name='account_resend_confirmation',
        template='account/register_social_login.html',
        renderer=_r):
    """For when a user is already associated with this email and has a usable password set
    """
    from htk.apps.accounts.forms.auth import SocialRegistrationAuthenticationForm

    if data is None:
        data = wrap_data(request)

    email = request.session.get(SOCIAL_REGISTRATION_SETTING_EMAIL)
    data['email'] = email
    data.update(csrf(request))

    success = False
    if request.method == 'POST':
        auth_form = SocialRegistrationAuthenticationForm(email, request.POST)
        if auth_form.is_valid():
            user = auth_form.get_user()
            login_authenticated_user(request, user)
            success = True
        else:
            for error in auth_form.non_field_errors():
                data['errors'].append(error)
            auth_user = auth_form.get_user()
            if auth_user and not auth_user.is_active:
                msg = get_resend_confirmation_help_message(
                    resend_confirmation_url_name, email=auth_user.email)
                data['errors'].append(msg)
    else:
        auth_form = SocialRegistrationAuthenticationForm(email)

    if success:
        response = redirect_to_social_auth_complete(request)
    else:
        data['auth_form'] = auth_form
        response = renderer(request, template, data=data)
    return response
Ejemplo n.º 11
0
def login_view(request,
               data=None,
               auth_form_model=UsernameEmailAuthenticationForm,
               default_next_url_name='account_login_redirect',
               template='account/login.html',
               renderer=_r):
    if data is None:
        data = wrap_data(request)
    data.update(csrf(request))
    success = False
    if request.method == 'POST':
        auth_form = auth_form_model(None, request.POST)
        if auth_form.is_valid():
            user = auth_form.get_user()
            login_authenticated_user(request, user)
            success = True
            default_next_uri = reverse(default_next_url_name)
            next_uri = request.GET.get('next', default_next_uri)
        else:
            for error in auth_form.non_field_errors():
                data['errors'].append(error)
            auth_user = auth_form.get_user()
            if auth_user and not auth_user.is_active:
                data['errors'].append(
                    'Have you confirmed your email address yet? <a id="resend_confirmation" href="javascript:void(0);">Resend confirmation &gt;</a>'
                )
                resend_confirmation_form = ResendConfirmationForm(
                    {'email': auth_user.email})
                data['resend_confirmation_form'] = resend_confirmation_form
            else:
                pass
    else:
        auth_form = auth_form_model(None)

    if success:
        response = redirect(next_uri)
    else:
        data['auth_form'] = auth_form
        response = renderer(template, data)

    return response
Ejemplo n.º 12
0
def register_social_login(
    request,
    data=None,
    resend_confirmation_url_name='account_resend_confirmation',
    template='account/register_social_login.html',
    renderer=_r
):
    """For when a user is already associated with this email and has a usable password set
    """
    from htk.apps.accounts.forms.auth import SocialRegistrationAuthenticationForm

    if data is None:
        data = wrap_data(request)

    email = request.session.get(SOCIAL_REGISTRATION_SETTING_EMAIL)
    data['email'] = email
    data.update(csrf(request))

    success = False
    if request.method == 'POST':
        auth_form = SocialRegistrationAuthenticationForm(email, request.POST)
        if auth_form.is_valid():
            user = auth_form.get_user()
            login_authenticated_user(request, user)
            success = True
        else:
            for error in auth_form.non_field_errors():
                data['errors'].append(error)
            auth_user = auth_form.get_user()
            if auth_user and not auth_user.is_active:
                msg = get_resend_confirmation_help_message(resend_confirmation_url_name, email=auth_user.email)
                data['errors'].append(msg)
    else:
        auth_form = SocialRegistrationAuthenticationForm(email)

    if success:
        response = redirect_to_social_auth_complete(request)
    else:
        data['auth_form'] = auth_form
        response = renderer(request, template, data=data)
    return response
Ejemplo n.º 13
0
def login_view(
    request,
    data=None,
    auth_form_model=UsernameEmailAuthenticationForm,
    default_next_url_name='account_login_redirect',
    template='account/login.html',
    renderer=_r
):
    if data is None:
        data = wrap_data(request)
    data.update(csrf(request))
    success = False
    if request.method == 'POST':
        auth_form = auth_form_model(None, request.POST)
        if auth_form.is_valid():
            user = auth_form.get_user()
            login_authenticated_user(request, user)
            success = True
            default_next_uri = reverse(default_next_url_name)
            next_uri = request.GET.get('next', default_next_uri)
        else:
            for error in auth_form.non_field_errors():
                data['errors'].append(error)
            auth_user = auth_form.get_user()
            if auth_user and not auth_user.is_active:
                data['errors'].append('Have you confirmed your email address yet? <a id="resend_confirmation" href="javascript:void(0);">Resend confirmation &gt;</a>')
                resend_confirmation_form = ResendConfirmationForm({'email': auth_user.email})
                data['resend_confirmation_form'] = resend_confirmation_form
            else:
                pass
    else:
        auth_form = auth_form_model(None)

    if success:
        response = redirect(next_uri)
    else:
        data['auth_form'] = auth_form
        response = renderer(template, data)

    return response