def test_oauth2_fetch_access_token(self): url = 'https://example.com/token' token = get_bearer_token() client = OAuthClient(client_id='foo', access_token_url=url) client.session.send = mock_json_response(token) self.assertEqual(client.fetch_access_token(), token) self.assertEqual(client.fetch_access_token(url), token)
def test_oauth1_realms(self): def save_request_token(token): self.assertIn('oauth_token', token) def fake_send(sess, req, **kwargs): auth = req.headers['Authorization'] self.assertIn('realm', auth) resp = mock.MagicMock() resp.cookies = [] resp.text = 'oauth_token=foo' resp.status_code = 200 return resp with mock.patch('requests.sessions.Session.send', fake_send): client = OAuthClient('foo', request_token_url='https://a.com/req', request_token_params={'realm': 'email'}, authorize_url='https://a.com/auth') uri, state = client.generate_authorize_redirect( 'https://b.com/bar', save_request_token) self.assertIsNone(state) self.assertIn('oauth_token=foo', uri) client.request_token_params = {'realm': ['email', 'profile']} uri, state = client.generate_authorize_redirect( 'https://b.com/bar', save_request_token) self.assertIsNone(state) self.assertIn('oauth_token=foo', uri)
def test_request_without_token(self): with mock.patch('requests.sessions.Session.send') as send: send.return_value = mock_send_value({'name': 'a'}) client = OAuthClient(client_id='foo') try: client.get('https://i.b/user') except OAuthError as exc: self.assertEqual('missing_token', exc.error)
def test_oauth2_fetch_access_token(self): url = 'https://example.com/token' token = get_bearer_token() with mock.patch('requests.sessions.Session.send') as send: send.return_value = mock_send_value(token) client = OAuthClient(client_id='foo', access_token_url=url) self.assertEqual(client.fetch_access_token(), token) self.assertEqual(client.fetch_access_token(url), token)
def test_facebook_fetch_user(self): client = OAuthClient('a', 'b', api_base_url='https://facebook.com/api') client.set_token({'access_token': 'a', 'token_type': 'bearer'}) client.session.send = mock_json_response({ 'id': 1, 'name': 'Hsiaoming', 'email': '[email protected]' }) user = facebook_fetch_user(client) self.assertEqual(user.id, 1) self.assertEqual(user.name, 'Hsiaoming')
def test_google_fetch_user(self): client = OAuthClient('a', 'b', api_base_url='https://google.com/api') client.set_token({'access_token': 'a', 'token_type': 'bearer'}) client.session.send = mock_json_response({ 'sub': 1, 'name': 'Grey Li', 'email': '[email protected]' }) user = google_fetch_user(client) self.assertEqual(user.id, 1) self.assertEqual(user.name, 'Grey Li')
def test_oauth1_fetch_access_token(self): with mock.patch('requests.sessions.Session.send') as send: send.return_value = mock_send_value('oauth_token=foo') client = OAuthClient('foo', request_token_url='https://a.com/req', access_token_url='https://example.com/token') request_token = {'oauth_token': 'req'} resp = client.fetch_access_token(request_token=request_token, oauth_verifier='bar') self.assertEqual(resp['oauth_token'], 'foo')
def test_oauth1_fetch_access_token(self): client = OAuthClient('foo', request_token_url='https://a.com/req', access_token_url='https://example.com/token') request_token = {'oauth_token': 'req'} client.session.send = mock_text_response('oauth_token=foo') resp = client.fetch_access_token(request_token=request_token, oauth_verifier='bar') self.assertEqual(resp['oauth_token'], 'foo')
def test_oauth1_generate_authorize_redirect(self): def save_request_token(token): self.assertIn('oauth_token', token) client = OAuthClient('foo', request_token_url='https://a.com/req', authorize_url='https://a.com/auth') client.session.send = mock_text_response('oauth_token=foo') uri, state = client.generate_authorize_redirect( 'https://b.com/bar', save_request_token) self.assertIsNone(state) self.assertIn('oauth_token=foo', uri)
def test_dropbox_fetch_user(self): client = OAuthClient('a', 'b', api_base_url='https://dropbox.com/api') client.set_token({'access_token': 'a', 'token_type': 'bearer'}) client.session.send = mock_json_response({ 'account_id': 1, 'name': { 'display_name': 'Hsiaoming' }, 'email': '[email protected]' }) user = dropbox_fetch_user(client) self.assertEqual(user.id, 1) self.assertEqual(user.name, 'Hsiaoming')
def test_oauth1_generate_authorize_redirect(self): def save_request_token(token): self.assertIn('oauth_token', token) with mock.patch('requests.sessions.Session.send') as send: send.return_value = mock_send_value('oauth_token=foo') client = OAuthClient('foo', request_token_url='https://a.com/req', authorize_url='https://a.com/auth') uri, state = client.generate_authorize_redirect( 'https://b.com/bar', save_request_token) self.assertIsNone(state) self.assertIn('oauth_token=foo', uri)
def test_twitter_fetch_user(self): client = OAuthClient('a', 'b', request_token_url='https://i.b', api_base_url='https://twitter.com/api') client.set_token({'oauth_token': 'a', 'oauth_token_secret': 'b'}) client.session.send = mock_json_response({ 'id': 1, 'name': 'Hsiaoming', 'email': '[email protected]' }) user = twitter_fetch_user(client) self.assertEqual(user.id, 1) self.assertEqual(user.name, 'Hsiaoming')
def test_request_with_token(self): with mock.patch('requests.sessions.Session.send') as send: send.return_value = mock_send_value({'name': 'a'}) client = OAuthClient(client_id='foo') token = get_bearer_token() resp = client.get('https://i.b/user', token=token) self.assertEqual(resp.json()['name'], 'a') resp = client.post('https://i.b/user', token=token) self.assertEqual(resp.json()['name'], 'a') resp = client.put('https://i.b/user', token=token) self.assertEqual(resp.json()['name'], 'a') resp = client.delete('https://i.b/user', token=token) self.assertEqual(resp.json()['name'], 'a') client.api_base_url = 'https://i.b' resp = client.get('user', token=token) self.assertEqual(resp.json()['name'], 'a')
def test_oauth2_generate_authorize_redirect(self): callback_uri = 'https://b.com/red' client = OAuthClient('foo', authorize_url='https://a.com/auth') uri, state = client.generate_authorize_redirect(callback_uri) self.assertIn(state, uri) self.assertIn(quote(callback_uri, ''), uri)
from authlib.client import OAuthClient client_id = 'REPLACE HERE' client_secret = 'REPLACE HERE' access_token_url = 'REPLACE HERE' authorize_url = 'REPLACE HERE' client = OAuthClient(client_id=client_id, client_secret=client_secret, access_token_url=access_token_url, authorize_url=authorize_url) def generate_redirect_uri(client, redirect_uri): """Generate reidrect uri :param client: :param redirect_uri: :return: (redirect_uri, state) """ return client.generate_authorize_redirect(redirect_uri)
from authlib.client import OAuthClient import requests # TODO: update client = OAuthClient( client_id='', client_secret='', api_base_url='https://api.github.com/', access_token_url='https://github.com/login/oauth/access_token', authorize_url='https://github.com/login/oauth/authorize', client_kwargs={'scope': 'user:email'}, ) # TODO: uncomment #token = client.fetch_access_token(grant_type='client_credentials') #print(token) # TODO: remove fake_token = { 'access_token': 'dca6f1125fb4874e058887a098dadf91f0e1e70d', 'token_type': 'bearer', 'scope': 'user:email' } r = requests.get( 'http://127.0.0.1:5000/', headers={'Authorization': 'Bearer {access_token}'.format(**fake_token)}) print() print(r.text) print() r.raise_for_status()