Example #1
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 #2
0
def setup(request):
    if debugging:
        from datetime import datetime
        print str(datetime.now()) +" debugging facebook problems"
    if not request.facebook.uid:
        if debugging:
            print "not request.facebook.uid, returning"

        return HttpResponseRedirect(reverse('login')+"?next="+request.GET.get('next',''))
    
    if request.method == "POST":
        if debugging:
            print "request method was post"

        if request.POST.get('next',False) and request.POST['next']:
            next = request.POST['next']
        else:
            next = getattr(settings,'LOGIN_REDIRECT_URL','/')

        try:
            profile = FacebookProfile.objects.get(pk=request.facebook.uid)
            if debugging:
                print "Found old profile for "+request.facebook.uid
        except:
            profile = FacebookProfile(facebook_id=request.facebook.uid)
            if debugging:
                print "Created new profile for " + request.facebook.uid
        if debugging:
            print "Profile for uid " +str(request.facebook.uid) + ": " + str (profile)

        if request.POST.get('facebook_only',False):
            if debugging:
                print "request post facebook only is false"
            try:
                user = User.objects.get(username__exact=request.facebook.uid)                
            except:
                user = User(username=request.facebook.uid,
                            password=sha.new(str(random.random())).hexdigest()[:8],
                            email=profile.email)
            user.save()

            if debugging:
                print "saved user " +str(user)

            profile.user = user
            profile.save()

            logging.info("FBC: Added user and profile for %s!" % request.facebook.uid)
            user = authenticate(request=request)

            if debugging:
                print "authenticated user " +str(user)

            login(request, user)

            if debugging:
                print "Logged in user, returning"

            return HttpResponseRedirect(next)

        if debugging:
            print "request facebook only true"

        form = AuthenticationForm(data=request.POST)

        if form.is_valid():
            if debugging:
                print "Authentication form valid"

            user = form.get_user()

            if debugging:
                print "get user from form"

            logging.debug("FBC: Trying to setup FB: %s, %s" % (user,profile))
            if user is not None and user.is_active:
                if debugging:
                    print "User exists"

                profile.user = user
                profile.save()
                logging.info("FBC: Attached facebook profile %s to user %s!" % (profile.facebook_id,user))
                login(request, user)
                if debugging:
                    print "Attached profile, returning"

                return HttpResponseRedirect(next)
        else:
            if debugging:
                print "Form was not valid, doing something with a user"

            user = User()
            user.facebook_profile = profile
    
    elif request.user.is_authenticated():
        if debugging:
            print "User was already authenticated, so do something and return"

        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,user))
        return HttpResponseRedirect(next)
    
    else:
        if debugging:
            print "No post data, no authentication done, doing a user and then what?"

        user = User()
        user.facebook_profile = FacebookProfile(facebook_id=request.facebook.uid)

#        print "I added user.save() here:"
#        user.save()

        next = request.GET.get('next','')
        form = AuthenticationForm(request)
        if debugging:
            print "Adding authentication form here"

    if debugging:
        print "Returning form with user: >"+str(user) + "< form: "+ str(form) + " next: "+str(next)


    return render_to_response(
        'facebook/setup.html',
        {"user":user,
         "form":form,
         "next":next},
        context_instance=RequestContext(request))