Ejemplo n.º 1
0
 def test_get_user_info(self):
     with mock.patch('requests.post') as fake:
         response = fake.return_value
         response.ok = True
         response.json = lambda: {
             'token_type': 'bearer',
             'access_token': '1234567890',
         }
         with mock.patch('requests.get') as fake2:
             response2 = fake2.return_value
             response2.ok = True
             response2.json = lambda: {
                 'screen_name': 'John Doe',
             }
             info = get_user_info(self.settings, '1234')
             self.assertEqual(info, {'screen_name': 'John Doe'})
 def test_get_user_info(self):
     with mock.patch('requests.post') as fake:
         response = fake.return_value
         response.ok = True
         response.json = lambda: {
             'token_type': 'bearer',
             'access_token': '1234567890',
         }
         with mock.patch('requests.get') as fake2:
             response2 = fake2.return_value
             response2.ok = True
             response2.json = lambda: {
                 'screen_name': 'John Doe',
             }
             info = get_user_info(self.settings, '1234')
             self.assertEqual(info, {'screen_name': 'John Doe'})
    def test_get_user_info(self):
        settings = {
            'twitter_consumer_key': 'key',
            'twitter_consumer_secret': 'secret',
            'twitter_user_info_url': 'https://api.twitter.com/1/users/show.json'
            }

        with patch('requests.get') as fake:
            response = fake.return_value
            response.status_code = 200
            response.json = lambda: {'screen_name': 'John Doe'}

            info = get_user_info(settings, '1234', 'token')
            self.assertEqual(info, {'screen_name': 'John Doe'})

        with patch('requests.get') as fake:
            response = fake.return_value
            response.status_code = 400
            response.json = lambda: {'screen_name': 'John Doe'}

            self.assertRaises(HTTPUnauthorized,
                              get_user_info, settings, '1234', 'token')
Ejemplo n.º 4
0
def twitter_callback(request):
    settings = request.registry.settings

    try:
        oauth_token = request.params['oauth_token']
    except KeyError:
        return HTTPBadRequest('Missing required oauth_token')

    try:
        oauth_verifier = request.params['oauth_verifier']
    except KeyError:
        return HTTPBadRequest('Missing required oauth_verifier')

    try:
        saved_oauth_token = request.session['oauth_token']
    except KeyError:
        return HTTPBadRequest('No oauth_token was found in the session')

    if saved_oauth_token != oauth_token:
        return HTTPUnauthorized("OAuth tokens don't match")
    else:
        del request.session['oauth_token']

    access_token_url = settings['twitter_access_token_url']

    params = (
        ('oauth_token', oauth_token),
        )

    auth = auth_header('POST', access_token_url, params, settings, oauth_token)

    response = requests.post(access_token_url,
                             data='oauth_verifier=%s' % oauth_verifier,
                             headers={'Authorization': auth})

    if response.status_code != 200:
        return HTTPUnauthorized(response.text)

    response_args = dict(urlparse.parse_qsl(response.text))
    #oauth_token_secret = response_args['oauth_token_secret']
    oauth_token = response_args['oauth_token']
    user_id = response_args['user_id']
    screen_name = response_args['screen_name']

    existing_user = user_from_provider_id(request.db, 'twitter', user_id)
    if existing_user is None:
        # fetch Twitter info only if this is the first time for
        # the user sice Twitter has very strong limits for using
        # its APIs
        twitter_info = get_user_info(settings, user_id, oauth_token)
        first_name, last_name = split_name(twitter_info['name'])
        info = {
            'screen_name': screen_name,
            'first_name': first_name,
            'last_name': last_name,
            }
    else:
        info = {}

    return register_or_update(request, 'twitter', user_id, info,
                              request.route_path('home'))
Ejemplo n.º 5
0
def twitter_callback(request):
    settings = request.registry.settings

    try:
        oauth_token = request.params['oauth_token']
    except KeyError:
        return HTTPBadRequest('Missing required oauth_token')

    try:
        oauth_verifier = request.params['oauth_verifier']
    except KeyError:
        return HTTPBadRequest('Missing required oauth_verifier')

    try:
        saved_oauth_token = request.session['oauth_token']
    except KeyError:
        return HTTPBadRequest('No oauth_token was found in the session')

    if saved_oauth_token != oauth_token:
        return HTTPUnauthorized("OAuth tokens don't match")
    else:
        del request.session['oauth_token']

    access_token_url = settings['twitter_access_token_url']

    params = (
        ('oauth_token', oauth_token),
        ('oauth_verifier', oauth_verifier),
    )

    auth = auth_header('POST', access_token_url, params, settings, oauth_token)

    response = requests.post(access_token_url,
                             headers={'Authorization': auth})

    if response.status_code != 200:
        return HTTPUnauthorized(response.text)

    response_args = dict(urlparse.parse_qsl(response.text))
    # moauth_token_secret = response_args['oauth_token_secret']
    oauth_token = response_args['oauth_token']
    user_id = response_args['user_id']
    screen_name = response_args['screen_name']

    existing_user = user_from_provider_id('twitter', user_id)
    if existing_user is None:
        # fetch Twitter info only if this is the first time for
        # the user sice Twitter has very strong limits for using
        # its APIs
        twitter_info = get_user_info(settings, user_id)
        first_name, last_name = split_name(twitter_info['name'])
        info = {
            'screen_name': screen_name,
            'first_name': first_name,
            'last_name': last_name,
        }
    else:
        info = {}

    return register_or_update(request, 'twitter', user_id, info,
                              request.route_path('home'))