def facebook_connect(request, template='socialregistration/facebook.html', extra_context=dict()):
    """
    View to handle connecting existing accounts with facebook
    """
    fb = Facebook(settings.FACEBOOK_API_KEY, settings.FACEBOOK_SECRET_KEY)
    if not fb.check_session(request) \
        or not request.user.is_authenticated():
        extra_context.update(
            dict(error=FB_ERROR)
        )
        return render_to_response(
            template,
            extra_context,
            context_instance=RequestContext(request)
        )

    try:
        profile = FacebookProfile.all().filter('uid=',fb.uid).fetch(1)[0]
    except IndexError:
        fb_profile = fb.users.getInfo(fb.uid, ['name','email','pic_square','username', ])[0]
        profile = FacebookProfile(user=request.user,
            uid=fb.uid,
            username = fb_profile['username'],
            real_name = fb_profile['name'],
            email = fb_profile['email'],
            pic_url = fb_profile['pic_square'],
            )
        profile.save()


    return HttpResponseRedirect(_get_next(request))
Пример #2
0
def facebook_login(request, template='socialregistration/facebook.html',
    extra_context=dict(), account_inactive_template='socialregistration/account_inactive.html'):
    """
    View to handle the Facebook login
    """
    
    if request.facebook.uid is None:
        extra_context.update(dict(error=FB_ERROR))
        return render_to_response(template, extra_context,
            context_instance=RequestContext(request))

    user = authenticate(uid=request.facebook.uid)

    if user is None:
        request.session['socialregistration_user'] = User()
        request.session['socialregistration_profile'] = FacebookProfile(uid=request.facebook.uid)
        request.session['next'] = _get_next(request)
        return HttpResponseRedirect(reverse('socialregistration_setup'))

    if not user.is_active:
        return render_to_response(account_inactive_template, extra_context,
            context_instance=RequestContext(request))

    login(request, user)

    return HttpResponseRedirect(_get_next(request))
Пример #3
0
def facebook_login(request,
                   template='socialregistration/facebook.html',
                   extra_context=dict()):
    """
    View to handle the Facebook login 
    """
    if not request.facebook.check_session(request):
        extra_context.update(dict(error=FB_ERROR))
        return render_to_response(template,
                                  extra_context,
                                  context_instance=RequestContext(request))

    user = authenticate(uid=request.facebook.uid)

    if user is None:
        request.session['socialregistration_user'] = User()
        fb_profile = request.facebook.users.getInfo([request.facebook.uid],
                                                    ['name', 'pic_square'])[0]
        request.session['socialregistration_profile'] = FacebookProfile(
            uid=request.facebook.uid, )
        request.session['next'] = _get_next(request)

        return HttpResponseRedirect(reverse('socialregistration_setup'))

    login(request, user)

    return HttpResponseRedirect(_get_next(request))
Пример #4
0
def facebook_login(
        request,
        template='socialregistration/facebook.html',
        extra_context=None,
        account_inactive_template='socialregistration/account_inactive.html'):
    """
    View to handle the Facebook login
    """
    extra_context = extra_context or {}

    if request.facebook.uid is None:
        extra_context.update(dict(error=FB_ERROR))
        return render_to_response(template,
                                  extra_context,
                                  context_instance=RequestContext(request))

    user = authenticate(uid=request.facebook.uid)
    fb_data = request.facebook.graph.get_object('me')
    fb_uid = request.facebook.uid

    if user is None:
        try:
            user = User.objects.get(email=fb_data['email'])
            FacebookProfile.objects.create(uid=fb_uid, user=user)
            user = authenticate(uid=fb_uid)
        except User.DoesNotExist:
            user = User()
            profile = FacebookProfile(uid=request.facebook.uid)
            user = setup_user(fb_data, user, profile)
            request.session['socialregistration_user'] = user
            request.session['socialregistration_profile'] = profile
            request.session['next'] = _get_next(request)
            return HttpResponseRedirect(reverse('socialregistration_setup'))

    if not user.is_active:
        return render_to_response(account_inactive_template,
                                  extra_context,
                                  context_instance=RequestContext(request))

    login(request, user)

    return HttpResponseRedirect(_get_next(request))
Пример #5
0
def _get_facebook_app(request):
    if "access_token" in request.session:
        graph = facebook.GraphAPI(request.session["access_token"])
        user = graph.get_object("me")

        sys_user = authenticate(uid=user["id"])
        if sys_user is None:
            request.session['socialregistration_user'] = User()
            request.session['socialregistration_profile'] = FacebookProfile(
                uid=user["id"])
            request.session['socialregistration_client'] = request.facebook
            request.session[
                'next'] = "http://apps.facebook.com/" + settings.FACEBOOK_APP_ID + "/"
            return graph, user, None

        login(request, sys_user)

        return graph, user, sys_user

    return None, None, None
def facebook_login(request, template='socialregistration/facebook.html', extra_context=dict(), account_inactive_template='socialregistration/account_inactive.html'):
    """
    View to handle the Facebook login
    """
    fb = Facebook(settings.FACEBOOK_API_KEY, settings.FACEBOOK_SECRET_KEY)
    if not fb.check_session(request):

        facebook_url = "http://www.facebook.com/login.php?"

        extra_context.update(
            dict(error=FB_ERROR)
        )

        args = {
            "api_key": settings.FACEBOOK_API_KEY,
            "v": "1.0",
            "fbconnect": "true",
            "display": "page",
            "next":request.build_absolute_uri( _get_next(request)),
            "return_session": "true",
        }


        #if extended_permissions:
        #    if isinstance(extended_permissions, basestring):
        #        extended_permissions = [extended_permissions]
        #    args["req_perms"] = ",".join(extended_permissions)
        #self.redirect("http://www.facebook.com/login.php?" +
        #              urllib.urlencode(args))

        facebook_url = facebook_url + urllib.urlencode(args) 

        return HttpResponseRedirect(facebook_url)



        return render_to_response(
            template, extra_context, context_instance=RequestContext(request)
        )

    user = authenticate(uid=str(fb.uid))

    if user is None:
        user = authenticate(uid=fb.uid)
        fb_profile = fb.users.getInfo(fb.uid, ['name','email','pic_square','username', ])[0]
        request.session['social_suggested_username'] = fb_profile['username']
        request.session['socialregistration_profile'] = FacebookProfile(
            uid=fb.uid,
            username = fb_profile['username'],
            real_name = fb_profile['name'],
            email = fb_profile['email'],
            pic_url = fb_profile['pic_square'],
        )
        request.session['socialregistration_user'] = User(username=''.join(fb_profile['name'].split(' ')[:2]))
        request.session['next'] = _get_next(request)
 
        return HttpResponseRedirect(reverse('socialregistration_setup'))

    if not user.is_active:
        return render_to_response(
            account_inactive_template,
            extra_context,
            context_instance=RequestContext(request)
        )

    login(request, user)

    return HttpResponseRedirect(_get_next(request))
Пример #7
0
def facebook_connect(request,
                     template='socialregistration/facebook.html',
                     extra_context=dict()):
    """
    View to handle graph connecting

    Authorize and create user if none

    """
    try:
        access_token = request.facebook.access_token
    except:
        # if cookie does not exist
        # assume logging in normal way
        params = {}
        params["client_id"] = settings.FACEBOOK_APP_ID
        params["client_secret"] = settings.FACEBOOK_SECRET_KEY
        params["redirect_uri"] = request.build_absolute_uri(
            reverse("facebook_connect"))
        params["code"] = request.GET.get('code', '')

        url = "https://graph.facebook.com/oauth/access_token?" + urllib.urlencode(
            params)
        from cgi import parse_qs
        userdata = urllib.urlopen(url).read()
        res_parse_qs = parse_qs(userdata)

        # Could be a bot query
        if not res_parse_qs.has_key('access_token'):
            return render_to_response(template,
                                      extra_context,
                                      context_instance=RequestContext(request))

        access_token = res_parse_qs['access_token'][-1]
    else:
        uid = request.facebook.uid

    graph = facebook.GraphAPI(access_token)
    user_info = graph.get_object('me')

    if request.user.is_authenticated():
        # Handling already logged in users connecting their accounts
        try:
            profile = FacebookProfile.objects.get(uid=user_info['id'])
        except FacebookProfile.DoesNotExist:  # There can only be one profile!
            profile = FacebookProfile.objects.create(
                user=request.user,
                uid=user_info['id'],
                username=user_info['name'],
                access_token=access_token)

            _connect(request.user, profile, request.facebook)
        else:
            profile.access_token = access_token
            profile.save()

        return HttpResponseRedirect(_get_next(request))

    user = authenticate(uid=user_info['id'])

    if user is None:
        profile = FacebookProfile(uid=user_info['id'],
                                  username=user_info['name'],
                                  access_token=access_token)
        user = User()
        request.session['socialregistration_profile'] = profile
        request.session['socialregistration_user'] = user
        # Client is not pickleable with the request on it
        request.session['socialregistration_client'] = request.facebook
        request.session['next'] = _get_next(request)
        return HttpResponseRedirect(reverse('socialregistration_setup'))

    _login(request, user, FacebookProfile.objects.get(user=user),
           request.facebook)

    return HttpResponseRedirect(_get_next(request))