Example #1
0
def get_facebook_graph(
        request=None,
        access_token=None,
        persistent_token=facebook_settings.FACEBOOK_PERSISTENT_TOKEN):
    '''
    given a request from one of these
    - js authentication flow
    - facebook app authentication flow
    - mobile authentication flow
    
    store authentication data in the session
    
    returns a graph object
    '''
    if not request and persistent_token:
        raise ValidationError, 'Request is required if you want to use persistent tokens'
    from django_facebook import official_sdk

    additional_data = None
    facebook_open_graph_cached = False
    if persistent_token:
        facebook_open_graph_cached = request.session.get('facebook_open_graph')
    if facebook_open_graph_cached:
        #TODO: should handle this in class' pickle protocol, but this is easier
        facebook_open_graph_cached._is_authenticated = None

    if not access_token:
        signed_request = request.REQUEST.get('signed_request')
        cookie_name = 'fbs_%s' % facebook_settings.FACEBOOK_APP_ID
        oauth_cookie = request.COOKIES.get(cookie_name)
        #scenario A, we're on a canvas page and need to parse the signed data
        if signed_request:
            additional_data = FacebookAPI.parse_signed_data(signed_request)
            access_token = additional_data.get('oauth_token')
        #scenario B, we're using javascript and cookies to authenticate
        elif oauth_cookie:
            additional_data = official_sdk.get_user_from_cookie(
                request.COOKIES, facebook_settings.FACEBOOK_APP_ID,
                facebook_settings.FACEBOOK_APP_SECRET)
            access_token = additional_data.get('access_token')

    facebook_open_graph = FacebookAPI(access_token, additional_data)

    if facebook_open_graph.access_token and persistent_token:
        request.session['facebook_open_graph'] = facebook_open_graph
    elif facebook_open_graph_cached:
        facebook_open_graph = facebook_open_graph_cached

    return facebook_open_graph
Example #2
0
def get_facebook_graph(request=None, access_token=None, persistent_token=facebook_settings.FACEBOOK_PERSISTENT_TOKEN):
    '''
    given a request from one of these
    - js authentication flow
    - facebook app authentication flow
    - mobile authentication flow
    
    store authentication data in the session
    
    returns a graph object
    '''
    if not request and persistent_token:
        raise ValidationError, 'Request is required if you want to use persistent tokens'
    from django_facebook import official_sdk
    
    additional_data = None
    facebook_open_graph_cached = False
    if persistent_token:
        facebook_open_graph_cached = request.session.get('facebook_open_graph')
    if facebook_open_graph_cached:
        #TODO: should handle this in class' pickle protocol, but this is easier
        facebook_open_graph_cached._is_authenticated = None
        
    if not access_token:
        signed_request = request.REQUEST.get('signed_request')
        cookie_name = 'fbs_%s' % facebook_settings.FACEBOOK_APP_ID
        oauth_cookie = request.COOKIES.get(cookie_name)
        #scenario A, we're on a canvas page and need to parse the signed data
        if signed_request:
            additional_data = FacebookAPI.parse_signed_data(signed_request)
            access_token = additional_data.get('oauth_token')
        #scenario B, we're using javascript and cookies to authenticate
        elif oauth_cookie:
            additional_data = official_sdk.get_user_from_cookie(request.COOKIES, facebook_settings.FACEBOOK_APP_ID, facebook_settings.FACEBOOK_APP_SECRET)
            access_token = additional_data.get('access_token')
    
    facebook_open_graph = FacebookAPI(access_token, additional_data)
    
    if facebook_open_graph.access_token and persistent_token:
        request.session['facebook_open_graph'] = facebook_open_graph
    elif facebook_open_graph_cached:
        facebook_open_graph = facebook_open_graph_cached
    
    return facebook_open_graph
Example #3
0
def get_facebook_graph(request=None, access_token=None, persistent_token=facebook_settings.FACEBOOK_PERSISTENT_TOKEN):
    '''
    given a request from one of these
    - js authentication flow
    - facebook app authentication flow
    - mobile authentication flow
    
    store authentication data in the session
    
    returns a graph object
    '''
    if not request and persistent_token:
        raise ValidationError, 'Request is required if you want to use persistent tokens'
    from django_facebook import official_sdk
    
    additional_data = None
    facebook_open_graph_cached = False

    if persistent_token:
        logger.debug('Get cached facebook_open_graph ')
        facebook_open_graph_cached = request.session.get('facebook_open_graph')
    if facebook_open_graph_cached:
        #TODO: should handle this in class' pickle protocol, but this is easier
        facebook_open_graph_cached._is_authenticated = None
        
    signed_request = request.REQUEST.get('signed_request')
    cookie_name = 'fbs_%s' % facebook_settings.FACEBOOK_APP_ID
    oauth_cookie = request.COOKIES.get(cookie_name)
                
    #scenario A, we're on a canvas page and need to parse the signed data
    if signed_request:
        logger.debug('found signed request..')
        additional_data = FacebookAPI.parse_signed_data(signed_request)
        logger.debug('signed_data: '+str(additional_data))
        access_token = additional_data.get('oauth_token')
    #scenario B, we're using javascript and cookies to authenticate
    elif oauth_cookie:
        logger.debug('found oauth cookie...')
        additional_data = official_sdk.get_user_from_cookie(request.COOKIES, facebook_settings.FACEBOOK_APP_ID, facebook_settings.FACEBOOK_APP_SECRET)
        additional_data["user_id"] = additional_data["uid"]
        logger.debug('oauth cookie: signed_data: '+str(additional_data))
        access_token = additional_data.get('access_token')
    
    facebook_open_graph = FacebookAPI(access_token, additional_data)


    if facebook_open_graph.access_token and persistent_token:
        logger.debug('storing facebook_open_graph in session..')
        request.session['facebook_open_graph'] = facebook_open_graph
    elif facebook_open_graph_cached:
        logger.debug('Using cached facebook_open_graph ')
        facebook_open_graph = facebook_open_graph_cached


    # Check if the OAuth token has expired
    if facebook_open_graph.additional_data.has_key('expires'):
        if datetime.fromtimestamp(float(facebook_open_graph.additional_data['expires'])) < datetime.now():
            logger.debug('FB Access token expired, revalidate!')
            facebook_open_graph._is_authenticated = None

    return facebook_open_graph