def get_or_create_client(self): client = self.client if client is None: from oauth import Client, authorization_provider existing_client = True while existing_client: random_int = ''.join([random.choice(UNICODE_ASCII_DIGITS) for x in xrange(5)]) client_id = Client.get_key_name("{0}-{1}".format(CONTROLLER_CLIENT_ID, random_int)) client_key = Client.get_key(client_id) existing_client = client_key.get() client = Client( key=client_key, client_id=client_id, instance_key=self.key, redirect_uris=['/'], scope=['controller'], secret=authorization_provider.generate_client_secret() ) client.put() self.client_key = client.key self.put() return client
def get_or_create_client(self): client = self.client if client is None: from oauth import Client, authorization_provider existing_client = True while existing_client: random_int = ''.join( [random.choice(UNICODE_ASCII_DIGITS) for x in xrange(5)]) client_id = Client.get_key_name("{0}-{1}".format( CONTROLLER_CLIENT_ID, random_int)) client_key = Client.get_key(client_id) existing_client = client_key.get() client = Client( key=client_key, client_id=client_id, instance_key=self.key, redirect_uris=['/'], scope=['controller'], secret=authorization_provider.generate_client_secret()) client.put() self.client_key = client.key self.put() return client
def create(cls, **kwargs): instance = cls(**kwargs) instance.put() if instance.agent_key is None: from oauth import Client, authorization_provider existing_agent_client = True while existing_agent_client: random_int = ''.join([random.choice(UNICODE_ASCII_DIGITS) for x in xrange(5)]) client_id = Client.get_key_name("{0}-{1}".format(AGENT_CLIENT_ID, random_int)) agent_client_key = Client.get_key(client_id) existing_agent_client = agent_client_key.get() agent_client = Client( key=agent_client_key, client_id=client_id, server_key=instance.key, redirect_uris=['/'], scope=['agent'], secret=authorization_provider.generate_client_secret() ) agent_client.put() instance.agent_key = agent_client.key instance.put() return instance
def create(cls, **kwargs): instance = cls(**kwargs) instance.put() if instance.agent_key is None: from oauth import Client, authorization_provider existing_agent_client = True while existing_agent_client: random_int = ''.join( [random.choice(UNICODE_ASCII_DIGITS) for x in xrange(5)]) client_id = Client.get_key_name("{0}-{1}".format( AGENT_CLIENT_ID, random_int)) agent_client_key = Client.get_key(client_id) existing_agent_client = agent_client_key.get() agent_client = Client( key=agent_client_key, client_id=client_id, server_key=instance.key, redirect_uris=['/'], scope=['agent'], secret=authorization_provider.generate_client_secret()) agent_client.put() instance.agent_key = agent_client.key instance.put() return instance
class OauthTest(BaseTest, WebTest): APPLICATION = main.application URL = None ALLOWED = [] @property def url(self): return self.URL def setUp(self): super(OauthTest, self).setUp() key = ndb.Key(Client, TEST_CLIENT_ID) data = { 'client_id': TEST_CLIENT_ID, 'redirect_uris': [TEST_REDIRECT_URI], 'name': TEST_CLIENT_NAME, 'uri': TEST_CLIENT_URI, 'logo_uri': TEST_LOGO_URI, 'scope': ['data'], 'secret': TEST_CLIENT_SECRET, 'secret_expires_at': 0, 'registration_access_token': TEST_REGISTRATION_ACCESS_TOKEN } self.client = Client(key=key, **data) self.client.put() def tearDown(self): super(OauthTest, self).tearDown() def log_in_user(self, email=None, is_active=True, is_admin=False): email = email or TEST_USER_EMAIL super(OauthTest, self).log_in_user(email, is_admin=is_admin) response = self.app.get('/gae_login_callback') cookies = response.headers.get('Set-Cookie') self.auth_cookie = cookies[0:cookies.find(';')] if cookies else None self.assertRedirects(response) self.current_user = models.User.lookup(email=email) self.current_user.active = is_active self.current_user.put() return self.current_user def log_in_admin(self, email=TEST_USER_EMAIL): return self.log_in_user(email=email, is_admin=True) def log_out_user(self): response = self.get('/logout') self.assertRedirects(response) self.auth_cookie = None try: del os.environ['USER_EMAIL'] except KeyError: pass try: del os.environ['USER_ID'] except KeyError: pass try: del os.environ['USER_IS_ADMIN'] except KeyError: pass def get_authorization_code(self, email=None): self.user = self.log_in_user(email=email) url = '/oauth/v1/auth' query_params = { 'client_id': TEST_CLIENT_ID, 'redirect_uri': TEST_REDIRECT_URI, 'response_type': 'code', 'scope': 'data' } response = self.get(url, params=query_params) if response.status_int == 200: self.assertOK(response) csrf_string = 'name="csrf_token" type="hidden" value="' begin = response.body.find(csrf_string) + len(csrf_string) end = response.body.find('"', begin) csrf_token = response.body[begin:end] if query_params: query_params = urlencode(query_params, doseq=True) if '?' in url: url += '&' else: url += '?' url += query_params params = {'csrf_token': csrf_token, 'grant': 'Grant'} response = self.post(url, params) self.assertRedirects(response) self.assertRegexpMatches(response.headers['Location'], ur"https://localhost/\?code=.+") start = response.headers['Location'].find('=') code = response.headers['Location'][start+1:] self.log_out_user() return code def get_tokens(self, email=None): url = '/oauth/v1/token' code = self.get_authorization_code(email=email) params = { 'code': code, 'grant_type': 'authorization_code', 'client_id': TEST_CLIENT_ID, 'client_secret': TEST_CLIENT_SECRET, 'redirect_uri': TEST_REDIRECT_URI, 'scope': 'data' } response = self.post(url, params) self.assertOK(response) body = json.loads(response.body) self.assertLength(4, body) return (body['access_token'], body['refresh_token']) def assertMethodNotAllowed(self, response): error = u'Response did not return a 405 METHOD NOT ALLOWED (status code was {0})\nBody: {1}'.format(response.status_int, response.body) self.assertEqual(response.status_int, 405, error) def assertCreated(self, response): error = u'Response did not return a 201 CREATED (status code was {0})\nBody: {1}'.format(response.status_int, response.body) self.assertEqual(response.status_int, 201, error) def assertNoContent(self, response): error = u'Response did not return a 204 NO CONTENT (status code was {0})\nBody: {1}'.format(response.status_int, response.body) self.assertEqual(response.status_int, 204, error) def get(self, url, params=None, headers=None, bearer_token=None): if bearer_token is not None: if headers is None: headers = {} headers.update({'Authorization': 'Bearer ' + str(bearer_token)}) return super(OauthTest, self).get(url, params=params, headers=headers) def post(self, url, params='', headers=None, upload_files=None, bearer_token=None): if bearer_token is not None: if headers is None: headers = {} headers.update({'Authorization': 'Bearer ' + str(bearer_token)}) return super(OauthTest, self).post(url, params=params, headers=headers, upload_files=upload_files) def delete(self, url, headers=None, bearer_token=None): if bearer_token is not None: if headers is None: headers = {} headers.update({'Authorization': 'Bearer ' + str(bearer_token)}) return super(OauthTest, self).delete(url, headers=headers) def post_json(self, url, params, headers=None, bearer_token=None): if bearer_token is not None: if headers is None: headers = {} headers.update({'Authorization': 'Bearer ' + str(bearer_token)}) return super(OauthTest, self).post_json(url, params, headers=headers) def put_json(self, url, params='', headers=None, bearer_token=None): if bearer_token is not None: if headers is None: headers = {} headers.update({'Authorization': 'Bearer ' + str(bearer_token)}) return super(OauthTest, self).put_json(url, params, headers=headers)
class OauthTest(BaseTest, WebTest): APPLICATION = main.application URL = None ALLOWED = [] @property def url(self): return self.URL def setUp(self): super(OauthTest, self).setUp() key = ndb.Key(Client, TEST_CLIENT_ID) data = { 'client_id': TEST_CLIENT_ID, 'redirect_uris': [TEST_REDIRECT_URI], 'name': TEST_CLIENT_NAME, 'uri': TEST_CLIENT_URI, 'logo_uri': TEST_LOGO_URI, 'scope': ['data'], 'secret': TEST_CLIENT_SECRET, 'secret_expires_at': 0, 'registration_access_token': TEST_REGISTRATION_ACCESS_TOKEN } self.client = Client(key=key, **data) self.client.put() def tearDown(self): super(OauthTest, self).tearDown() def log_in_user(self, email=None, is_active=True, is_admin=False): email = email or TEST_USER_EMAIL super(OauthTest, self).log_in_user(email, is_admin=is_admin) response = self.app.get('/gae_login_callback') cookies = response.headers.get('Set-Cookie') self.auth_cookie = cookies[0:cookies.find(';')] if cookies else None self.assertRedirects(response) self.current_user = models.User.lookup(email=email) self.current_user.active = is_active self.current_user.put() return self.current_user def log_in_admin(self, email=TEST_USER_EMAIL): return self.log_in_user(email=email, is_admin=True) def log_out_user(self): response = self.get('/logout') self.assertRedirects(response) self.auth_cookie = None try: del os.environ['USER_EMAIL'] except KeyError: pass try: del os.environ['USER_ID'] except KeyError: pass try: del os.environ['USER_IS_ADMIN'] except KeyError: pass def get_authorization_code(self, email=None): self.user = self.log_in_user(email=email) url = '/oauth/v1/auth' query_params = { 'client_id': TEST_CLIENT_ID, 'redirect_uri': TEST_REDIRECT_URI, 'response_type': 'code', 'scope': 'data' } response = self.get(url, params=query_params) if response.status_int == 200: self.assertOK(response) csrf_string = 'name="csrf_token" type="hidden" value="' begin = response.body.find(csrf_string) + len(csrf_string) end = response.body.find('"', begin) csrf_token = response.body[begin:end] if query_params: query_params = urlencode(query_params, doseq=True) if '?' in url: url += '&' else: url += '?' url += query_params params = {'csrf_token': csrf_token, 'grant': 'Grant'} response = self.post(url, params) self.assertRedirects(response) self.assertRegexpMatches(response.headers['Location'], ur"https://localhost/\?code=.+") start = response.headers['Location'].find('=') code = response.headers['Location'][start + 1:] self.log_out_user() return code def get_tokens(self, email=None): url = '/oauth/v1/token' code = self.get_authorization_code(email=email) params = { 'code': code, 'grant_type': 'authorization_code', 'client_id': TEST_CLIENT_ID, 'client_secret': TEST_CLIENT_SECRET, 'redirect_uri': TEST_REDIRECT_URI, 'scope': 'data' } response = self.post(url, params) self.assertOK(response) body = json.loads(response.body) self.assertLength(4, body) return (body['access_token'], body['refresh_token']) def assertMethodNotAllowed(self, response): error = u'Response did not return a 405 METHOD NOT ALLOWED (status code was {0})\nBody: {1}'.format( response.status_int, response.body) self.assertEqual(response.status_int, 405, error) def assertCreated(self, response): error = u'Response did not return a 201 CREATED (status code was {0})\nBody: {1}'.format( response.status_int, response.body) self.assertEqual(response.status_int, 201, error) def assertNoContent(self, response): error = u'Response did not return a 204 NO CONTENT (status code was {0})\nBody: {1}'.format( response.status_int, response.body) self.assertEqual(response.status_int, 204, error) def get(self, url, params=None, headers=None, bearer_token=None): if bearer_token is not None: if headers is None: headers = {} headers.update({'Authorization': 'Bearer ' + str(bearer_token)}) return super(OauthTest, self).get(url, params=params, headers=headers) def post(self, url, params='', headers=None, upload_files=None, bearer_token=None): if bearer_token is not None: if headers is None: headers = {} headers.update({'Authorization': 'Bearer ' + str(bearer_token)}) return super(OauthTest, self).post(url, params=params, headers=headers, upload_files=upload_files) def delete(self, url, headers=None, bearer_token=None): if bearer_token is not None: if headers is None: headers = {} headers.update({'Authorization': 'Bearer ' + str(bearer_token)}) return super(OauthTest, self).delete(url, headers=headers) def post_json(self, url, params, headers=None, bearer_token=None): if bearer_token is not None: if headers is None: headers = {} headers.update({'Authorization': 'Bearer ' + str(bearer_token)}) return super(OauthTest, self).post_json(url, params, headers=headers) def put_json(self, url, params='', headers=None, bearer_token=None): if bearer_token is not None: if headers is None: headers = {} headers.update({'Authorization': 'Bearer ' + str(bearer_token)}) return super(OauthTest, self).put_json(url, params, headers=headers)