Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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()
Ejemplo n.º 7
0
    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()
Ejemplo n.º 8
0
    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()