Esempio n. 1
0
def login(request, template_name='registration/login.html', redirect_field_name=REDIRECT_FIELD_NAME,
          authentication_form=AuthenticationForm, current_app=None, extra_context=None):
    """Displays the login form and handles the login action."""
    redirect_to = request.GET.get(redirect_field_name, )

    layout_name = "GEMM Log-In and/or Register Screen"
    error = None

    if request.method == "POST":
        # If this is a new user, then we return the registration form.
        if 'user_action' in request.POST and request.POST[
                'user_action'] == 'register':
            form = ProfileCreationForm(
                initial={
                    'username': request.POST['username'],
                    'password1': request.POST['password']}
            )
            return render(request, "registration/register.html", locals())

        # Otherwise, assume the user is trying to login.
        form = authentication_form(data=request.POST)
        if form.is_valid():
            netloc = urlparse(redirect_to)[1]

            # Use default setting if redirect_to is empty.
            if not redirect_to:
                redirect_to = settings.LOGIN_REDIRECT_URL

            # Do not allow redirection to different host.
            elif netloc and netloc != request.get_host():
                redirect_to = settings.LOGIN_REDIRECT_URL

            # Okay, security checks complete. Log the user in.
            auth_login(request, form.get_user())

            if request.session.test_cookie_worked():
                request.session.delete_test_cookie()

            return HttpResponseRedirect(redirect_to)

        error = "invalid username or password"

    else:
        form = authentication_form(request)

    request.session.set_test_cookie()

    current_site = get_current_site(request)

    context = {
        'error': error,
        'form': form,
        redirect_field_name: redirect_to,
        'site': current_site,
        'site_name': current_site.name,
        'layout_name': layout_name
    }
    if extra_context is not None:
        context.update(extra_context)
    return TemplateResponse(request, template_name, context)
Esempio n. 2
0
    def post(self, request, *args, **kwargs):
        """Process the user's registration request."""
        postdata = request.POST.copy()
        form = ProfileCreationForm(postdata)

        if form.is_valid():
            # Save the user information and get a pointer to the User object.
            user = form.save()

            # get values for the foreign key values
            role = Role.objects.get(id=user.userprofile.role_id)
            sector = Sector.objects.get(id=user.userprofile.sector_id)
            try:
                state = State.objects.get(id=user.userprofile.state_id)
            except BaseException:
                state = None
            country = Country.objects.get(id=user.userprofile.country_id)

            # Send an activation email.
            request_email_context = {
                'APP_NAME': settings.APP_NAME,
                'email': settings.EMAIL_HOST_USER,
                'domain': request.META['HTTP_HOST'],
                'site_name': settings.SITE_NAME,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                'user': user,
                'sector': sector,
                'role': role,
                'state': state,
                'country': country,
                'protocol': 'http',
            }
            subject = loader.render_to_string(
                self.admin_subject_template_name, request_email_context)
            # Email subject *must not* contain newlines
            subject = ''.join(subject.splitlines())
            email = loader.render_to_string(
                self.admin_email_template_name, request_email_context)
            # this is driven by local_settings.py
            send_mail(subject, email, settings.DEFAULT_FROM_EMAIL,
                      settings.USER_APPROVAL_EMAIL, fail_silently=False)

            # send an email to the user notifying them that the account request is under review
            user_email_context = {
                'APP_NAME': settings.APP_NAME,
                'email': user.email
            }
            subject = loader.render_to_string(
                self.user_subject_template_name, user_email_context)
            # Email subject *must not* contain newlines
            subject = ''.join(subject.splitlines())
            email = loader.render_to_string(
                self.user_email_template_name, user_email_context)
            send_mail(subject, email, settings.DEFAULT_FROM_EMAIL,
                      [user.email], fail_silently=False)

            # render the activation needed template
            return render(request, self.template_register_inactive, locals())  # pylint: disable=no-member
        return render(request, self.template_register, locals())
Esempio n. 3
0
 def get(self, request, *args, **kwargs):
     """Render the user registration template."""
     form = ProfileCreationForm()
     return render(request, self.template_register, {'form': form})