Example #1
0
File: views.py Project: devhub/baph
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))
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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
Example #5
0
    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
Example #6
0
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))
Example #7
0
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/', {}, ())
Example #8
0
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))
Example #9
0
File: views.py Project: devhub/baph
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))
Example #10
0
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))
Example #11
0
File: views.py Project: devhub/baph
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))