def associate(request): """Функция вида для ввода нового openid для ассоциации """ redirect_to = request.GET.get(REDIRECT_FIELD_NAME, None) or getattr(settings, 'LOGIN_REDIRECT_URL', '/') form = OpenidSigninForm() if request.method == 'POST': form = OpenidSigninForm(request.POST) if form.is_valid(): try: openid_url=form.cleaned_data['openid_url'] if UserAssociation.objects.filter(openid_url = openid_url): return default_on_failure(request, _('Openid идетификатор %s уже зарегистрирован в системе') % openid_url) except UserAssociation.DoesNotExist, e: logger.debug(u'Пользователя с идентификатором %s не зарегистрировано' % openid_url) return ask_openid(request, form.cleaned_data['openid_url'], reverse('oid_associate_complete'), redirect_to, request.user)
def login(request): form = OpenidSigninForm() if request.method == 'POST': form = OpenidSigninForm(request.POST) else: form = OpenidSigninForm() redirect_to = request.POST.get(REDIRECT_FIELD_NAME, None) or getattr(settings, 'LOGIN_REDIRECT_URL', '/') if form.is_valid(): openid_url = form.cleaned_data['openid_url'] user = None try: user = UserAssociation.objects.get(openid_url=openid_url).user except UserAssociation.DoesNotExist, e: logger.debug(u'Пользователя с идентификатором %s не зарегистрировано' % openid_url) user = None return ask_openid(request, openid_url, reverse('oid_complete_signin'), redirect_to, user)
def signin(request): """ signin page. It manage the legacy authentification (user/password) and authentification with openid. url: /signin/ template : authopenid/signin.htm """ on_failure = signin_failure next = '' if request.GET.get('next') and is_valid_next_url(request.GET['next']): next = request.GET.get('next', '').strip() if not next or not is_valid_next_url(next): next = getattr(settings, 'OPENID_REDIRECT_NEXT', '/') if request.user.is_authenticated(): return HttpResponseRedirect(next) form_signin = OpenidSigninForm(initial={'next':next}) form_auth = OpenidAuthForm(initial={'next':next}) if request.POST: if 'bsignin' in request.POST.keys(): form_signin = OpenidSigninForm(request.POST) if form_signin.is_valid(): next = form_signin.cleaned_data['next'] if not next: next = getattr(settings, 'OPENID_REDIRECT_NEXT', '/') sreg_req = sreg.SRegRequest(optional=['nickname', 'email']) redirect_to = "%s%s?%s" % ( get_url_host(request), reverse('user_complete_signin'), urllib.urlencode({'next':next}) ) return ask_openid(request, form_signin.cleaned_data['openid_url'], redirect_to, on_failure=signin_failure, sreg_request=sreg_req) elif 'blogin' in request.POST.keys(): # perform normal django authentification form_auth = OpenidAuthForm(request.POST) if form_auth.is_valid(): user_ = form_auth.get_user() login(request, user_) next = form_auth.cleaned_data['next'] if not next: next = getattr(settings, 'OPENID_REDIRECT_NEXT', '/') return HttpResponseRedirect(next) return render('authopenid/signin.html', { 'form1': form_auth, 'form2': form_signin, 'action': request.path, 'msg': request.GET.get('msg',''), 'sendpw_url': reverse('user_sendpw'), }, context_instance=RequestContext(request))
def begin(request, sreg=None, extension_args=None, redirect_to=None, on_failure=None): on_failure = on_failure or default_on_failure extension_args = extension_args or {} next = '' if request.GET.get('next'): next = urllib.urlencode({ 'next': request.GET['next'] }) form_signin = OpenidSigninForm(initial={'next':next}) if request.POST: form_signin = OpenidSigninForm(request.POST) if form_signin.is_valid(): consumer = Consumer(request.session, DjangoOpenIDStore()) try: auth_request = consumer.begin(form_signin.cleaned_data['openid_url']) except DiscoveryFailure: return on_failure(request, "The OpenID was invalid") if sreg: extension_args['sreg.optional'] = sreg trust_root = getattr( settings, 'OPENID_TRUST_ROOT', get_url_host(request) + '/' ) redirect_to = redirect_to or getattr( settings, 'OPENID_REDIRECT_TO', # If not explicitly set, assume current URL with complete/ appended get_full_url(request).split('?')[0] + 'complete/' ) # TODO: add redirect_to in form if not redirect_to.startswith('http://'): redirect_to = get_url_host(request) + redirect_to if 'next' in form_signin.cleaned_data and next != "": if '?' in redirect_to: join = '&' else: join = '?' redirect_to += join + urllib.urlencode({ 'next': form_signin.cleaned_data['next'] }) # Add extension args (for things like simple registration) for name, value in extension_args.items(): namespace, key = name.split('.', 1) auth_request.addExtensionArg(namespace, key, value) redirect_url = auth_request.redirectURL(trust_root, redirect_to) return HttpResponseRedirect(redirect_url) return render('openid_signin.html', { 'form': form_signin, 'action': request.path, 'logo': request.path + 'logo/', #'openids': request.session['openids'], })
def signup(request): """ signup page. Create a legacy account url : /signup/" templates: authopenid/signup.html, authopenid/confirm_email.txt """ action_signin = reverse('user_signin') next = request.GET.get('next', '') if not next or not is_valid_next_url(next): next = getattr(settings, 'OPENID_REDIRECT_NEXT', reverse('library')) form = RegistrationForm(initial={'next':next}) form_signin = OpenidSigninForm(initial={'next':next}) if request.POST: if 'blocal' in request.POST.keys(): form = RegistrationForm(request.POST) if form.is_valid(): next = form.cleaned_data.get('next', '') if not next or not is_valid_next_url(next): next = getattr(settings, 'OPENID_REDIRECT_NEXT', reverse('library')) user_ = User.objects.create_user( form.cleaned_data['username'], form.cleaned_data['email'], form.cleaned_data['password1']) user_.backend = "django.contrib.auth.backends.ModelBackend" login(request, user_) # send email current_domain = Site.objects.get_current().domain subject = _("Welcome") message_template = loader.get_template( 'authopenid/confirm_email.txt' ) message_context = Context({ 'site_url': 'http://%s/' % current_domain, 'username': form.cleaned_data['username'], 'password': form.cleaned_data['password1'] }) message = message_template.render(message_context) if not settings.DEBUG: send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [user_.email]) return HttpResponseRedirect(next) elif 'bsignin' in request.POST.keys(): # This chunk of code is repeated in signin() above # We can either leave this here, or refactor it to one access path as it was previously, # but that would mean jumping all around the place (in views.py) just to trace the execution path. # So I'm inclined to have some duplicated code, but have a clearer execution path form_signin = OpenidSigninForm(request, request.POST) if form_signin.is_valid(): next = form_signin.cleaned_data['next'] if not next: next = getattr(settings, 'OPENID_REDIRECT_NEXT', reverse('library')) sreg_req = sreg.SRegRequest(optional=['nickname', 'email', 'language', 'country', 'timezone', 'fullname']) redirect_to = "%s%s?%s" % ( get_url_host(request), reverse('user_complete_signin'), urllib.urlencode({'next':next}) ) return HttpResponseRedirect(form_signin.get_sreg_redirect(sreg_req, redirect_to)) return render('authopenid/signup.html', { 'regform': form, 'oidform': form_signin, 'action': request.path, 'action_signin': action_signin, }, context_instance=RequestContext(request))
def signin(request): """ signin page. It manage the legacy authentification (user/password) and authentification with openid. url: /signin/ template : authopenid/signin.htm """ on_failure = signin_failure next = '' if request.GET.get('next') and is_valid_next_url(request.GET['next']): next = request.GET.get('next', '').strip() if not next or not is_valid_next_url(next): next = getattr(settings, 'OPENID_REDIRECT_NEXT', reverse('library')) form_signin = OpenidSigninForm(request, initial={'next':next}) form_auth = OpenidAuthForm(initial={'next':next}) if request.POST: if 'bsignin' in request.POST.keys(): form_signin = OpenidSigninForm(request, request.POST) if form_signin.is_valid(): next = form_signin.cleaned_data['next'] if not next: next = getattr(settings, 'OPENID_REDIRECT_NEXT', reverse('library')) sreg_req = sreg.SRegRequest(optional=['nickname', 'email', 'language', 'country', 'timezone', 'fullname']) redirect_to = "%s%s?%s" % ( get_url_host(request), reverse('user_complete_signin'), urllib.urlencode({'next':next}) ) return HttpResponseRedirect(form_signin.get_sreg_redirect(sreg_req, redirect_to)) elif 'blogin' in request.POST.keys(): # perform normal django authentification form_auth = OpenidAuthForm(request.POST) if form_auth.is_valid(): user_ = form_auth.get_user() login(request, user_) next = form_auth.cleaned_data['next'] if not next: next = getattr(settings, 'OPENID_REDIRECT_NEXT', reverse('library')) if request.is_ajax(): return HttpResponse(json.dumps({'userid':user_.id, 'api_key': APIKey.objects.get(user=user_).key})) return HttpResponseRedirect(next) else: if request.is_ajax(): return HttpResponseForbidden() return render('authopenid/signin.html', { 'lform': form_auth, 'oidform': form_signin, 'action': request.path, 'msg': request.GET.get('msg',''), 'signin_page': True, 'sendpw_url': reverse('user_sendpw'), }, context_instance=RequestContext(request))