示例#1
0
 def test_nonces(self):
     with self.silo['Consumers'].open() as collection:
         consumer = lti.ToolConsumer.new_from_values(
             collection.new_entity(), self.cipher, 'default', key="12345",
             secret=ul("secret"))
         collection.insert_entity(consumer.entity)
     provider = lti.ToolProvider(
         self.container['Consumers'], self.container['Nonces'],
         self.cipher)
     consumer = provider.lookup_consumer('12345')
     self.assertTrue(provider.validate_timestamp_and_nonce(
         consumer.key, 0, '9e4a4b085c8c46d6aae6b5d9c8a15418', None))
     # the same nonce should now evaluate to True
     self.assertFalse(provider.validate_timestamp_and_nonce(
         consumer.key, 0, '9e4a4b085c8c46d6aae6b5d9c8a15418', None))
     # but a different one is False
     self.assertTrue(provider.validate_timestamp_and_nonce(
         consumer.key, 0, '8f274dca508711c2e70a67ab68fcc1f2', None))
     # now at 89:59 we are still not allowed to reuse the nonce
     self.mock_time.tick(89*60+59.0)
     self.assertFalse(provider.validate_timestamp_and_nonce(
         consumer.key, 0, '9e4a4b085c8c46d6aae6b5d9c8a15418', None))
     # but if we tick over 90 mins we're good to go again
     self.mock_time.tick(1.001)
     self.assertTrue(provider.validate_timestamp_and_nonce(
         consumer.key, 0, '9e4a4b085c8c46d6aae6b5d9c8a15418', None))
示例#2
0
 def test_launch(self):
     command = "POST"
     url = "http://www.example.com/launch"
     headers = {'Content-Type': 'application/x-www-form-urlencoded'}
     query_string = "context_id=456434513&context_label=SI182&"\
         "context_title=Design%20of%20Personal%20Environments&"\
         "launch_presentation_css_url=http%3A%2F%2Fwww.imsglobal.org%2F"\
         "developers%2FLTI%2Ftest%2Fv1p1%2Flms.css&"\
         "launch_presentation_document_target=frame&"\
         "launch_presentation_locale=en-US&"\
         "launch_presentation_return_url=http%3A%2F%2Fwww.imsglobal.org%2F"\
         "developers%2FLTI%2Ftest%2Fv1p1%2Flms_return.php&"\
         "lis_outcome_service_url=http%3A%2F%2Fwww.imsglobal.org%2F"\
         "developers%2FLTI%2Ftest%2Fv1p1%2Fcommon%2F"\
         "tool_consumer_outcome.php%3Fb64%3DMTIzNDU6OjpzZWNyZXQ%3D&"\
         "lis_person_contact_email_primary=user%40school.edu&"\
         "lis_person_name_family=Public&"\
         "lis_person_name_full=Jane%20Q.%20Public&"\
         "lis_person_name_given=Given&"\
         "lis_person_sourcedid=school.edu%3Auser&"\
         "lis_result_sourcedid=feb-123-456-2929%3A%3A28883&"\
         "lti_message_type=basic-lti-launch-request&"\
         "lti_version=LTI-1p0&"\
         "oauth_callback=about%3Ablank&oauth_consumer_key=12345&"\
         "oauth_nonce=45f32b44e314244a222d0e070fa55384&"\
         "oauth_signature=SKhxr%2Bx4p9jVO6sFxKdpA5neDtg%3D&"\
         "oauth_signature_method=HMAC-SHA1&"\
         "oauth_timestamp=1420370306&"\
         "oauth_version=1.0&"\
         "resource_link_description=A%20weekly%20blog.&"\
         "resource_link_id=120988f929-274612&"\
         "resource_link_title=Weekly%20Blog&"\
         "roles=Instructor&"\
         "tool_consumer_info_product_family_code=ims&"\
         "tool_consumer_info_version=1.1&"\
         "tool_consumer_instance_description="\
         "University%20of%20School%20%28LMSng%29&"\
         "tool_consumer_instance_guid=lmsng.school.edu&"\
         "user_id=292832126"
     with self.silo['Consumers'].open() as collection:
         consumer = lti.ToolConsumer.new_from_values(
             collection.new_entity(), self.cipher, 'default', key="12345",
             secret=ul("secret"))
         collection.insert_entity(consumer.entity)
     provider = lti.ToolProvider(
         self.container['Consumers'], self.container['Nonces'],
         self.cipher)
     consumer, parameters = provider.launch(
         command, url, headers, query_string)
     self.assertTrue(consumer.key == '12345')
     self.assertTrue('user_id' in parameters)
     self.assertTrue(parameters['user_id'] == '292832126')
     # we should have an exception if we change the parameters!
     try:
         consumer, parameters = provider.launch(
             "POST", url, headers, query_string + "%custom_value=X")
         self.fail("LTI launch with bad signature")
     except lti.LTIAuthenticationError:
         pass
示例#3
0
 def test_constructor(self):
     provider = lti.ToolProvider(
         self.container['Consumers'], self.container['Nonces'],
         self.cipher)
     # by default, there are no consumers
     try:
         provider.lookup_consumer('12345')
         self.fail("No consumers")
     except KeyError:
         pass
     with self.silo['Consumers'].open() as collection:
         consumer = lti.ToolConsumer.new_from_values(
             collection.new_entity(), self.cipher, 'default', key="12345",
             secret=ul("secret"))
         collection.insert_entity(consumer.entity)
     try:
         consumer = provider.lookup_consumer('12345')
         self.assertTrue(consumer.key == '12345')
         self.assertTrue(consumer.secret == 'secret')
     except KeyError:
         self.fail("Failed to find consumer")