コード例 #1
0
ファイル: views.py プロジェクト: ciklysta/django-mojeid-auth
def login_begin(request, attribute_set='default', form_class=OpenIDLoginForm):
    """Begin an OpenID login request, possibly asking for an identity URL."""
    redirect_to = OpenIDBackend.get_redirect_to(request)

    openid_url = getattr(settings, 'MOJEID_ENDPOINT_URL', MOJEID_ENDPOINT_URL)

    login_form = form_class(data=request.POST)
    if login_form.is_valid():
        openid_url = login_form.cleaned_data['openid_identifier']

    consumer = make_consumer(request)
    
    # Set response handler (define the settings set)
    consumer.session['attribute_set'] = attribute_set

    # Set the language
    consumer.session['stored_lang'] = request.POST.get('lang', get_language())
    request.session.save()

    try:
        openid_request = consumer.begin(openid_url)
    except DiscoveryFailure as exc:
        return render_failure(request, errors.DiscoveryError(exc))

    # Request user details.
    attributes = get_attribute_query(attribute_set)

    fetch_request = ax.FetchRequest()
    for attribute, required in attributes:
        fetch_request.add(attribute.generate_ax_attrinfo(required))

    if attributes:
        openid_request.addExtension(fetch_request)

    if getattr(settings, 'OPENID_PHYSICAL_MULTIFACTOR_REQUIRED', False):
        preferred_auth = [
            pape.AUTH_MULTI_FACTOR_PHYSICAL,
        ]
        pape_request = pape.Request(preferred_auth_policies=preferred_auth)
        openid_request.addExtension(pape_request)

    # Construct the request completion URL, including the page we
    # should redirect to.
    return_to = request.build_absolute_uri(reverse(login_complete))
    if redirect_to:
        if '?' in return_to:
            return_to += '&'
        else:
            return_to += '?'
        # Django gives us Unicode, which is great.  We must encode URI.
        # urllib enforces str. We can't trust anything about the default
        # encoding inside  str(foo) , so we must explicitly make foo a str.
        return_to += urlencode(
            {OpenIDBackend.get_redirect_field_name(): redirect_to.encode("UTF-8")})

    return render_openid_request(request, openid_request, return_to)
コード例 #2
0
ファイル: views.py プロジェクト: ciklysta/django-mojeid-auth
def login_show(request, login_template='openid/login.html',
               associate_template='openid/associate.html',
               form_class=OpenIDLoginForm):
    """
    Render a template to show the login/associate form form.
    """

    redirect_to = OpenIDBackend.get_redirect_to(request)

    login_form = form_class(request.POST or None)

    user = OpenIDBackend.get_user_from_request(request)

    template_name = associate_template if user else login_template

    return render_to_response(
        template_name,
        {
            'form': login_form,
            'action': reverse('openid-init'),
            OpenIDBackend.get_redirect_field_name(): redirect_to
        },
        context_instance=RequestContext(request)
    )