Example #1
0
def facebook_login(request, redirect_url=None, template_name='facebook/login.html'):
    """
    Log in a facebook user

    Usually handles the django side of what happens when you click the
    facebook connect button. The user will get redirected to the 'setup' view
    if thier facebook account is not on file. If the user is on file, they
    will get redirected. You can specify the redirect url in the following
    order of precedence:

        1.  whatever url is in the 'next' get parameter passed to the
            facebook_login url 
        2.  whatever url is passed to the facebook_login view when the url 
            is defined 
        3.  whatever url is defined in the LOGIN_REDIRECT_URL setting directive

    Sending a user here without login will display a login template.

    Params: 
    
        *   redirect_url: defines where to send the user after they are
            logged in. This can get overridden by the url in the 'next' get 
            param passed on the url. 
        *   template_name: Template to use if a user arrives at this page 
            without submitting to it. Uses 'facebook/login.html' by default.
            
    """
    # determine redirect url in order of priority
    passed_redirect_url = request.REQUEST.get(REDIRECT_FIELD_NAME, None)
    set_redirect_url = getattr(settings, "LOGIN_REDIRECT_URL", "/")
    redirect_url = redirect_url or passed_redirect_url or set_redirect_url
    
    # User is logging in
    if request.method == 'POST':
        user = authenticate(request=request)
        if user:
            if not user.is_active:
                raise FacebookAuthError('This account is disabled.')            
            login(request, user)
            return HttpResponseRedirect(redirect_url)
        elif request.facebook.uid:
            # created profile object and dummy django user
            profile = FacebookProfile(facebook_id=request.facebook.uid)
            user = User(username=request.facebook.uid, email=profile.email, 
                first_name=profile.first_name, last_name=profile.last_name)
            user.set_unusable_password()
            user.save()
            profile.user = user
            profile.save()
            user = authenticate(request=request)
            login(request, user)
            return HttpResponseRedirect(redirect_url)
            
    # User is already logged in
    elif request.user.is_authenticated():
        return HttpResponseRedirect(redirect_url)

    return render_to_response(template_name, {
        REDIRECT_FIELD_NAME: redirect_url
    }, context_instance=RequestContext(request))
Example #2
0
    def test_feedback(self):
        u = OTNUser(username='******', password='******')
        u.my_email = '*****@*****.**'
        u.pin = hashlib.sha224('5533').hexdigest()
        u.save()
        fb = FacebookProfile(user=u, facebook_id=1341341414)
        fb.save()
        f = Feedback(user=u, speed=2, size=3)
        f.save()

        f = Feedback(user=u, speed=1, size=4, comment="It was damn slow!!")
        f.save()

        pin = hashlib.sha224('5533').hexdigest()
        response = self.client.login(email='*****@*****.**', pin=pin)
        print response

        response = self.client.get("/legals/feedback/post/")
        print response 

        response = self.client.post("/legals/feedback/post/", {'speed':'2',
                                                'size': '1',
                                                'comment': "It's interesting"},
                                    HTTP_X_REQUESTED_WITH='XMLHttpRequest' )
        print json.dumps(json.loads(response.content), indent=2) 

        response = self.client.post("/legals/feedback/post/", {'speed':'2',
                                                'size': '1'},
                                    HTTP_X_REQUESTED_WITH='XMLHttpRequest' )
        print json.dumps(json.loads(response.content), indent=2) 
Example #3
0
    try:
        FacebookProfile.objects.get(facebook_id=request.facebook.uid)
        # already setup, move along please
        return HttpResponseRedirect(redirect_url)
    except FacebookProfile.DoesNotExist, e:
        # not in the db, ok to continue
        pass

    #user submitted a form - which one?
    if request.method == "POST":
        log.debug('Submitted form')
        #lets setup a facebook only account. The user will have to use
        #facebook to login.
        if request.POST.get('facebook_only', False):
            log.debug('Facebook Only')
            profile = FacebookProfile(facebook_id=request.facebook.uid)
            user = User(username=request.facebook.uid, email=profile.email)
            user.set_unusable_password()
            user.save()
            profile.user = user
            profile.save()
            log.info("Added user and profile for %s!" % request.facebook.uid)

            user = authenticate(request=request)
            login(request, user)

            # Add the user to EzSteroids if it is enabled
            add_user_to_EzSteroids("http://" + request.get_host(), user)

            return HttpResponseRedirect(redirect_url)
Example #4
0
    try:
        FacebookProfile.objects.get(facebook_id=request.facebook.uid)
        # already setup, move along please
        return HttpResponseRedirect(redirect_url)
    except FacebookProfile.DoesNotExist, e:
        # not in the db, ok to continue
        pass

    #user submitted a form - which one?
    if request.method == "POST":
        log.debug('Submitted form')
        #lets setup a facebook only account. The user will have to use
        #facebook to login.
        if request.POST.get('facebook_only',False):
            log.debug('Facebook Only')
            profile = FacebookProfile(facebook_id=request.facebook.uid)
            user = User(username=request.facebook.uid,
                        email=profile.email)
            user.set_unusable_password()
            user.save()
            profile.user = user
            profile.save()
            log.info("Added user and profile for %s!" % request.facebook.uid)
            user = authenticate(request=request)
            login(request, user)
            return HttpResponseRedirect(redirect_url)
        
        # user setup his/her own local account in addition to their facebook
        # account. The user will have to login with facebook unless they 
        # reset their password.
        elif request.POST.get('register',False):
Example #5
0
def facebook_login(request,
                   redirect_url="/",
                   template_name='facebook/login.html',
                   extra_context=None):
    """
    facebook_login
    ===============================
    
    Handles logging in a facebook user. Usually handles the django side of
    what happens when you click the facebook connect button. The user will get
    redirected to the 'setup' view if thier facebook account is not on file.
    If the user is on file, they will get redirected. You can specify the
    redirect url in the following order of presidence:
    
     1. whatever url is in the 'next' get parameter passed to the facebook_login url
     2. whatever url is passed to the facebook_login view when the url is defined
     3. whatever url is defined in the LOGIN_REDIRECT_URL setting directive
    
    Sending a user here without login will display a login template.
    
    If you define a url to use this view, you can pass the following parameters:
     * redirect_url: defines where to send the user after they are logged in. This
                     can get overridden by the url in the 'next' get param passed on 
                     the url.
     * template_name: Template to use if a user arrives at this page without submitting
                      to it. Uses 'facebook/login.html' by default.
     * extra_context: A context object whose contents will be passed to the template.
    """
    # User is logging in
    if request.method == "POST":
        log.debug("OK logging in...")
        url = reverse('facebook_setup')
        if request.POST.get(REDIRECT_FIELD_NAME, False):
            url += "?%s=%s" % (REDIRECT_FIELD_NAME,
                               request.POST[REDIRECT_FIELD_NAME])
        elif redirect_url:
            url += "?%s=%s" % (REDIRECT_FIELD_NAME, redirect_url)
        user = authenticate(request=request)
        if user is not None:
            if user.is_active:
                login(request, user)
                # Redirect to a success page.
                log.debug("Redirecting to %s" % url)
                return HttpResponseRedirect(url)
            else:
                log.debug("This account is disabled.")
                raise FacebookAuthError('This account is disabled.')
        elif request.facebook.uid:
            if getattr(settings, "FACEBOOK_USE_DUMMY_ACCOUNT", False):
                #check that this fb user is not already in the system
                try:
                    FacebookProfile.objects.get(
                        facebook_id=request.facebook.uid)
                    # already setup, move along please
                    return HttpResponseRedirect(redirect_url)
                except FacebookProfile.DoesNotExist, e:
                    # not in the db, ok to continue
                    pass

                profile = FacebookProfile(facebook_id=request.facebook.uid)
                user = User(username=request.facebook.uid, email=profile.email)
                user.set_unusable_password()
                user.save()
                profile.user = user
                profile.save()
                log.info("Added user and profile for %s!" %
                         request.facebook.uid)
                user = authenticate(request=request)
                login(request, user)
                return HttpResponseRedirect(redirect_url)
            else:
                #we have to set this user up
                log.debug("Redirecting to setup")
                return HttpResponseRedirect(url)
Example #6
0
def setup(request):
    if not request.facebook.uid:
        return HttpResponseRedirect(reverse('auth_login')+"?next="+request.GET.get('next',''))
    
    if request.method == "POST":
        if request.POST.get('next',False) and request.POST['next']:
            next = request.POST['next']
        else:
            next = getattr(settings,'LOGIN_REDIRECT_URL','/')
            
        profile = FacebookProfile(facebook_id=request.facebook.uid)
        
        if request.POST.get('facebook_only',False):
            user = User(username=request.facebook.uid, 
                        password=sha.new(str(random.random())).hexdigest()[:8],
                        email=profile.email)
            user.save()
            profile.user = user
            profile.save()
            logging.info("FBC: Added user and profile for %s!" % request.facebook.uid)
            user = authenticate(request=request)
            login(request, user)
            return HttpResponseRedirect(next)
            
        form = AuthenticationForm(data=request.POST)

        if form.is_valid():
            user = form.get_user()
            logging.debug("FBC: Trying to setup FB: %s, %s" % (user,profile))
            if user is not None and user.is_active:
                profile.user = user
                profile.save()
                logging.info("FBC: Attached facebook profile %s to user %s!" % (profile.facebook_id,user))
                login(request, user)
                return HttpResponseRedirect(next)
        else:
            user = User()
            user.facebook_profile = profile
    
    elif request.user.is_authenticated():
        profile = FacebookProfile(facebook_id=request.facebook.uid)
        profile.user = request.user
        profile.save()
        logging.info("FBC: Attached facebook profile %s to user %s!" % (profile.facebook_id,profile.user.id))
        return HttpResponseRedirect(next)
    
    else:
        user = User()
        user.facebook_profile = FacebookProfile(facebook_id=request.facebook.uid)
        next = request.GET.get('next','')
        form = AuthenticationForm(request)
        
    return render_to_response(
        'facebook/setup.html',
        {"user":user,
         "form":form,
         "next":next},
        context_instance=RequestContext(request))
Example #7
0
def setup(request,redirect_url=None,
          registration_form_class=FacebookUserCreationForm,
          template_name='facebook/setup.html',
          extra_context=None):
    """
    setup
    ===============================

    Handles a new facebook user. There are three ways to setup a new facebook user.
     1. Link the facebook account with an existing django account.
     2. Create a dummy django account to attach to facebook. The user must always use
        facebook to login.
     3. Ask the user to create a new django account

    The built in template presents the user with all three options. Once setup is
    complete the user will get redirected. The url used in the following order of
    presidence:

      1. whatever url is in the 'next' get parameter passed to the setup url
      2. whatever url is passed to the setup view when the url is defined
      3. whatever url is defined in the LOGIN_REDIRECT_URL setting directive

    If you define a url to use this view, you can pass the following parameters:
     * redirect_url: Defines where to send the user after they are setup. This
                     can get overridden by the url in the 'next' get param passed on
                     the url.
     * registration_form_class: Django form class to use for new user way #3 explained
                                above. The form should create a new user.
     * template_name: Template to use. Uses 'facebook/setup.html' by default.
     * extra_context: A context object whose contents will be passed to the template.
    """

    #you need to be logged into facebook.
    if not request.facebook.uid:
        url = reverse(facebook_login)
        if request.REQUEST.get(REDIRECT_FIELD_NAME,False):
            url += "?%s=%s" % (REDIRECT_FIELD_NAME,request.REQUEST[REDIRECT_FIELD_NAME])
        return HttpResponseRedirect(url)

    #setup forms
    login_form = AuthenticationForm()
    registration_form = registration_form_class()

    #figure out where to go after setup
    if request.REQUEST.get(REDIRECT_FIELD_NAME,False):
        next = request.REQUEST[REDIRECT_FIELD_NAME]
    elif redirect_url:
        next = redirect_url
    else:
        next = settings.LOGIN_REDIRECT_URL

    #user submitted a form - which one?
    if request.method == "POST":
        #lets setup a facebook only account. The user will have to use facebook to login.
        if request.POST.get('facebook_only',False):
            profile = FacebookProfile(facebook_id=request.facebook.uid)
            user = User(username=request.facebook.uid,
                        email=profile.email)
            user.set_unusable_password()
            user.save()
            profile.user = user
            profile.save()
            logging.info("FBC: Added user and profile for %s!" % request.facebook.uid)
            user = authenticate(request=request)
            login(request, user)
            return HttpResponseRedirect(next)

        #user setup his/her own local account in addition to their facebook account.
        #The user will have to login with facebook unless they reset their password.
        elif request.POST.get('register',False):
            profile = FacebookProfile(facebook_id=request.facebook.uid)
            user = User(first_name=profile.first_name,last_name=profile.last_name)
            registration_form = registration_form_class(data=request.POST,instance=user)
            if registration_form.is_valid():
                user = registration_form.save()
                profile.user = user
                profile.save()
                logging.info("FBC: Added user and profile for %s!" % request.facebook.uid)
                login(request, authenticate(request=request))
                return HttpResponseRedirect(next)
            else:
                request.user = User()
                request.user.facebook_profile = FacebookProfile(facebook_id=request.facebook.uid)

        #user logs in in with an existing account, and the two are linked.
        elif request.POST.get('login',False):
            login_form = AuthenticationForm(data=request.POST)

            if login_form.is_valid():
                user = login_form.get_user()
                logging.debug("FBC: Trying to setup FB: %s, %s" % (user,request.facebook.uid))
                if user and user.is_active:
                    FacebookProfile.objects.get_or_create(user=user,facebook_id=request.facebook.uid)

                    login(request, user)
                    return HttpResponseRedirect(next)
            else:
                request.user = User()
                request.user.facebook_profile = FacebookProfile(facebook_id=request.facebook.uid)

    #user didn't submit a form, but is logged in already. We'll just link up their facebook
    #account automatically.
    elif request.user.is_authenticated():
        try:
            request.user.facebook_profile
        except FacebookProfile.DoesNotExist:
            profile = FacebookProfile(facebook_id=request.facebook.uid)
            profile.user = request.user
            profile.save()
            logging.info("FBC: Attached facebook profile %s to user %s!" % (profile.facebook_id,profile.user))

        return HttpResponseRedirect(next)

    # user just showed up
    else:
        request.user.facebook_profile = FacebookProfile(facebook_id=request.facebook.uid)
        login_form = AuthenticationForm(request)

    # add the extra_context to this one
    if extra_context is None:
        extra_context = {}
    context = RequestContext(request)
    for key, value in extra_context.items():
        context[key] = callable(value) and value() or value

    return render_to_response(
        template_name,
        {"login_form":login_form,"registration_form":registration_form,"next":next},
        context_instance=context)
Example #8
0
    try:
        FacebookProfile.objects.get(facebook_id=request.facebook.uid)
        # already setup, move along please
        return HttpResponseRedirect(redirect_url)
    except FacebookProfile.DoesNotExist, e:
        # not in the db, ok to continue
        pass

    #user submitted a form - which one?
    if request.method == "POST":
        log.debug('Submitted form')
        #lets setup a facebook only account. The user will have to use
        #facebook to login.
        if request.POST.get('facebook_only',False):
            log.debug('Facebook Only')
            profile = FacebookProfile(facebook_id=request.facebook.uid)
            user = User(username=request.facebook.uid,
                        email=profile.email)
            user.set_unusable_password()
            user.save()
            profile.user = user
            profile.save()
            log.info("Added user and profile for %s!" % request.facebook.uid)
                
            user = authenticate(request=request)
            login(request, user)
            
            # Add the user to EzSteroids if it is enabled
            add_user_to_EzSteroids("http://"+request.get_host(), user)
            
            return HttpResponseRedirect(redirect_url)
Example #9
0
def facebook_login(request, redirect_url="/",
                   template_name='facebook/login.html',
                   extra_context=None):
    """
    facebook_login
    ===============================
    
    Handles logging in a facebook user. Usually handles the django side of
    what happens when you click the facebook connect button. The user will get
    redirected to the 'setup' view if thier facebook account is not on file.
    If the user is on file, they will get redirected. You can specify the
    redirect url in the following order of presidence:
    
     1. whatever url is in the 'next' get parameter passed to the facebook_login url
     2. whatever url is passed to the facebook_login view when the url is defined
     3. whatever url is defined in the LOGIN_REDIRECT_URL setting directive
    
    Sending a user here without login will display a login template.
    
    If you define a url to use this view, you can pass the following parameters:
     * redirect_url: defines where to send the user after they are logged in. This
                     can get overridden by the url in the 'next' get param passed on 
                     the url.
     * template_name: Template to use if a user arrives at this page without submitting
                      to it. Uses 'facebook/login.html' by default.
     * extra_context: A context object whose contents will be passed to the template.
    """
    # User is logging in
    if request.method == "POST":
        log.debug("OK logging in...")
        url = reverse('facebook_setup')
        if request.POST.get(REDIRECT_FIELD_NAME,False):
            url += "?%s=%s" % (REDIRECT_FIELD_NAME, request.POST[REDIRECT_FIELD_NAME])
        elif redirect_url:
            url += "?%s=%s" % (REDIRECT_FIELD_NAME, redirect_url)
        user = authenticate(request=request)
        if user is not None:
            if user.is_active:
                login(request, user)
                # Redirect to a success page.
                log.debug("Redirecting to %s" % url)
                return HttpResponseRedirect(url)
            else:
                log.debug("This account is disabled.")
                raise FacebookAuthError('This account is disabled.')
        elif request.facebook.uid:
            if getattr(settings, "FACEBOOK_USE_DUMMY_ACCOUNT", False):
                #check that this fb user is not already in the system
                try:
                    FacebookProfile.objects.get(facebook_id=request.facebook.uid)
                    # already setup, move along please
                    return HttpResponseRedirect(redirect_url)
                except FacebookProfile.DoesNotExist, e:
                    # not in the db, ok to continue
                    pass

                profile = FacebookProfile(facebook_id=request.facebook.uid)
                user = User(username=request.facebook.uid,
                            email=profile.email)
                user.set_unusable_password()
                user.save()
                profile.user = user
                profile.save()
                log.info("Added user and profile for %s!" % request.facebook.uid)
                user = authenticate(request=request)
                login(request, user)
                return HttpResponseRedirect(redirect_url)
            else:
                #we have to set this user up
                log.debug("Redirecting to setup")
                return HttpResponseRedirect(url)