Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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))
Beispiel #4
0
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'],
        })
Beispiel #5
0
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))
Beispiel #6
0
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))