def lti_launch(self, lti_consumer, lti_resource_link_id, assignment_uuid=None, query_assignment_uuid=None, nonce=None, timestamp=None, follow_redirects=True, invalid_launch=False, **kwargs): launch_url = "http://localhost/api/lti/auth" oauth_signature = kwargs.pop('oauth_signature', None) launch_params = kwargs.copy() launch_params['resource_link_id'] = lti_resource_link_id if assignment_uuid: launch_params['custom_assignment'] = assignment_uuid if query_assignment_uuid: launch_url = launch_url+"?assignment="+query_assignment_uuid # add basic required launch parameters if not 'lti_version' in launch_params: launch_params['lti_version'] = "LTI-1p0" if not 'lti_message_type' in launch_params: launch_params['lti_message_type'] = "basic-lti-launch-request" if 'roles' in launch_params and launch_params.get('roles') == None: launch_params.pop('roles') tool_consumer = ToolConsumer( lti_consumer.oauth_consumer_key, lti_consumer.oauth_consumer_secret, params=launch_params, launch_url=launch_url ) # overwrite lti_version and lti_message_type if needed (set by lti.LaunchParams) if 'lti_version' in launch_params and launch_params.get('lti_version') == None: tool_consumer.launch_params._params.pop('lti_version') if 'lti_message_type' in launch_params and launch_params.get('lti_message_type') == None: tool_consumer.launch_params._params.pop('lti_message_type') if invalid_launch: with mock.patch.object(ToolConsumer, 'has_required_params', return_value=True): launch_request = tool_consumer.generate_launch_request(nonce=nonce, timestamp=timestamp) else: launch_request = tool_consumer.generate_launch_request(nonce=nonce, timestamp=timestamp) launch_data = parse_qs(launch_request.body.decode('utf-8')) # overwrite oauth_signature for tests if invalid_launch and oauth_signature: launch_data['oauth_signature'] = oauth_signature rv = self.client.post('/api/lti/auth', data=launch_data, follow_redirects=follow_redirects) yield rv rv.close()
def test_launch_request_with_qs(self): """ test that qs params in launch url are ok """ launch_params = { 'lti_version': 'abc', 'lti_message_type': 'def', 'resource_link_id': '123' } tc = ToolConsumer('client_key', 'client_secret', launch_url='http://example.edu/foo?bar=1', params=launch_params) launch_req = tc.generate_launch_request(nonce='wxyz7890', timestamp='2345678901') got = parse_qs(unquote(launch_req.body)) correct = launch_params.copy() correct.update({ 'oauth_nonce': 'wxyz7890', 'oauth_timestamp': '2345678901', 'oauth_version': '1.0', 'oauth_signature_method': 'HMAC-SHA1', 'oauth_consumer_key': 'client_key', 'oauth_signature': 'UH2l86Wq/g5Mu64GpCRcec6tEYY=', }) self.assertEqual(got, correct)
def test_generate_launch_request(self): launch_params = { 'lti_version': 'foo', 'lti_message_type': 'bar', 'resource_link_id': 'baz' } tc = ToolConsumer('client_key', 'client_secret', launch_url='http://example.edu/', params=launch_params) launch_req = tc.generate_launch_request(nonce='abcd1234', timestamp='1234567890') self.assertIsInstance(launch_req, PreparedRequest) got = parse_qs(unquote(launch_req.body)) correct = launch_params.copy() correct.update({ 'oauth_nonce': 'abcd1234', 'oauth_timestamp': '1234567890', 'oauth_version': '1.0', 'oauth_signature_method': 'HMAC-SHA1', 'oauth_consumer_key': 'client_key', 'oauth_signature': 'u2xlj 1gF4y 6gKHNeiL9cN3tOI=', }) self.assertEqual(got, correct)
def test_launch_request_with_qs(self): """ test that qs params in launch url are ok """ launch_params = { 'lti_version': 'abc', 'lti_message_type': 'def', 'resource_link_id': '123' } tc = ToolConsumer('client_key', 'client_secret', launch_url='http://example.edu/foo?bar=1', params=launch_params) launch_req = tc.generate_launch_request(nonce='wxyz7890', timestamp='2345678901') got = parse_qs(unquote(launch_req.body)) correct = launch_params.copy() correct.update({ 'oauth_nonce': 'wxyz7890', 'oauth_timestamp': '2345678901', 'oauth_version': '1.0', 'oauth_signature_method': 'HMAC-SHA1', 'oauth_consumer_key': 'client_key', 'oauth_signature': 'UH2l86Wq/g5Mu64GpCRcec6tEYY=', }) self.assertEqual(got, correct)
def test_generate_launch_request(self): launch_params = { 'lti_version': 'foo', 'lti_message_type': 'bar', 'resource_link_id': 'baz' } tc = ToolConsumer('client_key', 'client_secret', launch_url='http://example.edu/', params=launch_params) launch_req = tc.generate_launch_request(nonce='abcd1234', timestamp='1234567890') self.assertIsInstance(launch_req, PreparedRequest) got = parse_qs(unquote(launch_req.body)) correct = launch_params.copy() correct.update({ 'oauth_nonce': 'abcd1234', 'oauth_timestamp': '1234567890', 'oauth_version': '1.0', 'oauth_signature_method': 'HMAC-SHA1', 'oauth_consumer_key': 'client_key', 'oauth_signature': 'u2xlj 1gF4y 6gKHNeiL9cN3tOI=', }) self.assertEqual(got, correct)
def lti_launch(self, lti_consumer, lti_resource_link_id, assignment_uuid=None, query_assignment_uuid=None, custom_puid=None, nonce=None, timestamp=None, follow_redirects=True, **kwargs): launch_url = "http://localhost/api/lti/auth" launch_params = kwargs.copy() launch_params['resource_link_id'] = lti_resource_link_id if assignment_uuid: launch_params['custom_assignment'] = assignment_uuid if custom_puid: launch_params['custom_puid'] = custom_puid if query_assignment_uuid: launch_url = launch_url + "?assignment=" + query_assignment_uuid tool_consumer = ToolConsumer(lti_consumer.oauth_consumer_key, lti_consumer.oauth_consumer_secret, params=launch_params, launch_url=launch_url) launch_request = tool_consumer.generate_launch_request( nonce=nonce, timestamp=timestamp) launch_data = parse_qs(launch_request.body.decode('utf-8')) rv = self.client.post('/api/lti/auth', data=launch_data, follow_redirects=follow_redirects) yield rv rv.close()
def lti_launch(self, lti_consumer, lti_resource_link_id, assignment_uuid=None, nonce=None, timestamp=None, follow_redirects=True, **kwargs): launch_params = kwargs.copy() launch_params['resource_link_id'] = lti_resource_link_id if assignment_uuid: launch_params['custom_assignment'] = assignment_uuid tool_consumer = ToolConsumer( lti_consumer.oauth_consumer_key, lti_consumer.oauth_consumer_secret, params=launch_params, #launch_url not actually used. Just needed for validation launch_url='http://localhost/api/lti/auth' ) launch_request = tool_consumer.generate_launch_request(nonce=nonce, timestamp=timestamp) launch_data = parse_qs(launch_request.body.decode('utf-8')) rv = self.client.post('/api/lti/auth', data=launch_data, follow_redirects=follow_redirects) yield rv rv.close()
def lti_launch(self, lti_consumer, lti_resource_link_id, assignment_uuid=None, query_assignment_uuid=None, nonce=None, timestamp=None, follow_redirects=True, invalid_launch=False, **kwargs): launch_url = "http://localhost/api/lti/auth" oauth_signature = kwargs.pop('oauth_signature', None) launch_params = kwargs.copy() launch_params['resource_link_id'] = lti_resource_link_id if assignment_uuid: launch_params['custom_assignment'] = assignment_uuid if query_assignment_uuid: launch_url = launch_url + "?assignment=" + query_assignment_uuid # add basic required launch parameters if not 'lti_version' in launch_params: launch_params['lti_version'] = "LTI-1p0" if not 'lti_message_type' in launch_params: launch_params['lti_message_type'] = "basic-lti-launch-request" if 'roles' in launch_params and launch_params.get('roles') == None: launch_params.pop('roles') tool_consumer = ToolConsumer(lti_consumer.oauth_consumer_key, lti_consumer.oauth_consumer_secret, params=launch_params, launch_url=launch_url) # overwrite lti_version and lti_message_type if needed (set by lti.LaunchParams) if 'lti_version' in launch_params and launch_params.get( 'lti_version') == None: tool_consumer.launch_params._params.pop('lti_version') if 'lti_message_type' in launch_params and launch_params.get( 'lti_message_type') == None: tool_consumer.launch_params._params.pop('lti_message_type') if invalid_launch: with mock.patch.object(ToolConsumer, 'has_required_params', return_value=True): launch_request = tool_consumer.generate_launch_request( nonce=nonce, timestamp=timestamp) else: launch_request = tool_consumer.generate_launch_request( nonce=nonce, timestamp=timestamp) launch_data = parse_qs(launch_request.body.decode('utf-8')) # overwrite oauth_signature for tests if invalid_launch and oauth_signature: launch_data['oauth_signature'] = oauth_signature rv = self.client.post('/api/lti/auth', data=launch_data, follow_redirects=follow_redirects) yield rv rv.close()