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)
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) )