def signup(request, signup_form=SignupForm, template_name='registration/signup_form.html', success_url=None, extra_context=None): if settings.BAPH_AUTH_WITHOUT_USERNAMES and (signup_form == SignupForm): signup_form = SignupFormOnlyEmail if request.method == 'POST': form = signup_form(request.POST, request.FILES) if form.is_valid(): user = form.save() if success_url: redirect_to = success_url else: redirect_to = reverse('baph_signup_complete') # A new signed user should logout the old one. if request.user.is_authenticated(): logout(request) if (settings.BAPH_SIGNIN_AFTER_SIGNUP and not settings.BAPH_ACTIVATION_REQUIRED): user = authenticate(identification=user.email, check_password=False) login(request, user) return redirect(redirect_to) else: form = signup_form() if not extra_context: extra_context = dict() extra_context['form'] = form return render_to_response(template_name, extra_context, context_instance=RequestContext(request))
def register(self, request, oauth_token, oauth_verifier, given_name, family_name, email): if hasattr(request, 'orm'): session = request.orm.sessionmaker() else: from baph.db.orm import ORM session = ORM.get().sessionmaker() request_token = request.session.pop(SESSION_KEY, None) if request_token and request_token.key == oauth_token: twitter = Twitter(request_token) access_token = twitter.get_access_token(oauth_verifier) if not access_token: return False profile = session.query(TwitterProfile) \ .filter_by(key=access_token.key, secret=access_token.secret) \ .first() if profile: user_obj = profile.user else: # Check that the username is unique, and if so, create a user # and profile twitter_user = twitter.user username = '******' % twitter_user.id user_ct = session.query(User) \ .filter_by(username=username) \ .count() if user_ct == 0: user_obj = User.create_user(username=username, email=email, password=None, session=session) user_obj.first_name = given_name user_obj.last_name = family_name profile = TwitterProfile(user=user_obj, uid=twitter_user.id, username=twitter.username, access_token=access_token) session.add(profile) session.commit() else: # Should we redirect here, or return False and redirect in # post_registration_redirect? return False signals.user_registered.send(sender=self.__class__, user=user_obj, request=request) user = authenticate(oauth_token=access_token.key, uid=twitter_user.id, session=session) login(request, user) elif request.user.is_authenticated(): user_obj = request.user else: # Perhaps we should handle this differently? user_obj = AnonymousUser() return user_obj
def register(self, request, **kwargs): if hasattr(request, 'orm'): session = request.orm.sessionmaker() else: from baph.db.orm import ORM session = ORM.get().sessionmaker() params = get_user_from_cookie(request.COOKIES, settings.FACEBOOK_APP_ID, settings.FACEBOOK_SECRET_KEY) if params and 'uid' in params: uid = params['uid'] profile = session.query(FacebookProfile) \ .filter_by(uid=uid) \ .first() if profile: user_obj = profile.user else: # Check that the username is unique, and if so, create a user # and profile username = '******' % uid user_ct = session.query(User) \ .filter_by(username=username) \ .count() if user_ct == 0: fb = Facebook(params['access_token']) fb_user = fb.user user_obj = User.create_user(username=username, email=fb_user['email'], password=None, session=session) user_obj.first_name = fb_user['first_name'] user_obj.last_name = fb_user['last_name'] profile = FacebookProfile( user=user_obj, uid=uid, access_token=params['access_token'], expires_in=params['expires'], ) session.add(profile) session.commit() else: # Should we redirect here, or return False and redirect in # post_registration_redirect? return False signals.user_registered.send(sender=self.__class__, user=user_obj, request=request) user = authenticate(uid=uid, session=session) login(request, user) elif request.user.is_authenticated(): user_obj = request.user else: # Perhaps we should handle this differently? user_obj = AnonymousUser() return user_obj
def activate(request, activation_key, template_name='registration/activate_fail.html', retry_template_name='registration/activate_retry.html', success_url=django_settings.LOGIN_REDIRECT_URL, extra_context=None): session = orm.sessionmaker() signup = session.query(UserRegistration) \ .filter_by(activation_key=activation_key) \ .first() if not signup: if not extra_context: extra_context = dict() return render_to_response(template_name, extra_context, context_instance=RequestContext(request)) if (not signup.activation_key_expired() or not settings.BAPH_ACTIVATION_RETRY): user = SignupManager.activate_user(activation_key) if user: auth_user = authenticate(identification=user.email, check_password=False) login(request, auth_user) messages.success(request, _('Your account has been activated and ' 'you have been signed in.'), fail_silently=True) if success_url: redirect_to = success_url % {'username': user.username} else: redirect_to = reverse('userena_profile_detail', kwargs={'username': user.username}) #TODO this is broken return redirect(redirect_to) else: if not extra_context: extra_context = dict() return render_to_response(template_name, extra_context, context_instance=RequestContext(request)) else: if not extra_context: extra_context = dict() extra_context['activation_key'] = activation_key return render_to_response(retry_template_name, extra_context, context_instance=RequestContext(request))
def facebook_login(request): if hasattr(request, 'orm'): session = request.orm.sessionmaker() else: from baph.db.orm import ORM session = ORM.get().sessionmaker() params = get_user_from_cookie(request.COOKIES, settings.FACEBOOK_APP_ID, settings.FACEBOOK_SECRET_KEY) if params: user = authenticate(uid=params['uid'], session=session) if user is not None: if user.is_active: login(request, user) return redirect(settings.LOGIN_REDIRECT_URL, {}, ()) else: # Disabled account, redirect and notify? return redirect('/', {}, ()) else: # Invalid user, redirect and notify? return redirect('/', {}, ()) elif request.user.is_authenticated(): return redirect(settings.LOGIN_REDIRECT_URL, {}, ()) else: return redirect('/account/register/', {}, ())
def activate(request, activation_key, template_name='registration/activate_fail.html', retry_template_name='registration/activate_retry.html', success_url=django_settings.LOGIN_REDIRECT_URL, extra_context=None): session = orm.sessionmaker() signup = session.query(UserRegistration) \ .filter_by(activation_key=activation_key) \ .first() if not signup: if not extra_context: extra_context = dict() return render_to_response(template_name, extra_context, context_instance=RequestContext(request)) if (not signup.activation_key_expired() or not settings.BAPH_ACTIVATION_RETRY): user = SignupManager.activate_user(activation_key) if user: auth_user = authenticate(identification=user.email, check_password=False) login(request, auth_user) messages.success(request, _('Your account has been activated and ' 'you have been signed in.'), fail_silently=True) if success_url: redirect_to = success_url % {'username': user.username } else: redirect_to = reverse('userena_profile_detail', kwargs={'username': user.username}) #TODO this is broken return redirect(redirect_to) else: if not extra_context: extra_context = dict() return render_to_response(template_name, extra_context, context_instance=RequestContext(request)) else: if not extra_context: extra_context = dict() extra_context['activation_key'] = activation_key return render_to_response(retry_template_name, extra_context, context_instance=RequestContext(request))
def signin(request, auth_form=AuthenticationForm, template_name='registration/signin_form.html', redirect_field_name=REDIRECT_FIELD_NAME, redirect_signin_function=signin_redirect, extra_context=None): """ Signin using email or username with password. Signs a user in by combining email/username with password. If the combination is correct and the user :func:`is_active` the :func:`redirect_signin_function` is called with the arguments ``REDIRECT_FIELD_NAME`` and an instance of the :class:`User` who is is trying the login. The returned value of the function will be the URL that is redirected to. A user can also select to be remembered for ``USERENA_REMEMBER_DAYS``. :param auth_form: Form to use for signing the user in. Defaults to the :class:`AuthenticationForm` supplied by userena. :param template_name: String defining the name of the template to use. Defaults to ``userena/signin_form.html``. :param redirect_field_name: Form field name which contains the value for a redirect to the succeeding page. Defaults to ``next`` and is set in ``REDIRECT_FIELD_NAME`` setting. :param redirect_signin_function: Function which handles the redirect. This functions gets the value of ``REDIRECT_FIELD_NAME`` and the :class:`User` who has logged in. It must return a string which specifies the URI to redirect to. :param extra_context: A dictionary containing extra variables that should be passed to the rendered template. The ``form`` key is always the ``auth_form``. **Context** ``form`` Form used for authentication supplied by ``auth_form``. """ form = auth_form() if request.method == 'POST': form = auth_form(request.POST, request.FILES) if form.is_valid(): identification, password, remember_me = ( form.cleaned_data['identification'], form.cleaned_data['password'], form.cleaned_data['remember_me']) user = authenticate(identification=identification, password=password) if user.is_active: login(request, user) if remember_me: request.session.set_expiry( settings.BAPH_REMEMBER_ME_DAYS[1] * 86400) else: request.session.set_expiry(0) messages.success(request, _('You have been signed in.'), fail_silently=True) # Whereto now? redirect_to = redirect_signin_function( request.REQUEST.get(redirect_field_name), user) return HttpResponseRedirect(redirect_to) else: return redirect(reverse('baph_disabled')) if not extra_context: extra_context = dict() extra_context.update({ 'form': form, 'next': request.REQUEST.get(redirect_field_name), }) return render_to_response(template_name, extra_context, context_instance=RequestContext(request))
def signin(request, auth_form=AuthenticationForm, template_name='registration/signin_form.html', redirect_field_name=REDIRECT_FIELD_NAME, redirect_signin_function=signin_redirect, extra_context=None): """ Signin using email or username with password. Signs a user in by combining email/username with password. If the combination is correct and the user :func:`is_active` the :func:`redirect_signin_function` is called with the arguments ``REDIRECT_FIELD_NAME`` and an instance of the :class:`User` who is is trying the login. The returned value of the function will be the URL that is redirected to. A user can also select to be remembered for ``USERENA_REMEMBER_DAYS``. :param auth_form: Form to use for signing the user in. Defaults to the :class:`AuthenticationForm` supplied by userena. :param template_name: String defining the name of the template to use. Defaults to ``userena/signin_form.html``. :param redirect_field_name: Form field name which contains the value for a redirect to the succeeding page. Defaults to ``next`` and is set in ``REDIRECT_FIELD_NAME`` setting. :param redirect_signin_function: Function which handles the redirect. This functions gets the value of ``REDIRECT_FIELD_NAME`` and the :class:`User` who has logged in. It must return a string which specifies the URI to redirect to. :param extra_context: A dictionary containing extra variables that should be passed to the rendered template. The ``form`` key is always the ``auth_form``. **Context** ``form`` Form used for authentication supplied by ``auth_form``. """ form = auth_form() if request.method == 'POST': form = auth_form(request.POST, request.FILES) if form.is_valid(): identification, password, remember_me = (form.cleaned_data['identification'], form.cleaned_data['password'], form.cleaned_data['remember_me']) user = authenticate(identification=identification, password=password) if user.is_active: login(request, user) if remember_me: request.session.set_expiry(settings.BAPH_REMEMBER_ME_DAYS[1] * 86400) else: request.session.set_expiry(0) messages.success(request, _('You have been signed in.'), fail_silently=True) # Whereto now? redirect_to = redirect_signin_function( request.REQUEST.get(redirect_field_name), user) return HttpResponseRedirect(redirect_to) else: return redirect(reverse('baph_disabled')) if not extra_context: extra_context = dict() extra_context.update({ 'form': form, 'next': request.REQUEST.get(redirect_field_name), }) return render_to_response(template_name, extra_context, context_instance=RequestContext(request))