Exemple #1
0
    def _make_lti11_basic_launch_args(
        oauth_consumer_key: str = 'my_consumer_key',
        oauth_consumer_secret: str = 'my_shared_secret',
    ):
        oauth_timestamp = str(int(time.time()))
        oauth_nonce = secrets.token_urlsafe(32)
        args = {
            'lti_message_type': 'basic-lti-launch-request',
            'lti_version': 'LTI-1p0'.encode(),
            'resource_link_id': '88391-e1919-bb3456',
            'oauth_consumer_key': oauth_consumer_key,
            'oauth_timestamp': str(int(oauth_timestamp)),
            'oauth_nonce': str(oauth_nonce),
            'oauth_signature_method': 'HMAC-SHA1',
            'oauth_callback': 'about:blank',
            'oauth_version': '1.0',
            'user_id': '123123123',
        }
        extra_args = {'my_key': 'this_value'}
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        launch_url = 'http://jupyterhub/hub/lti/launch'

        args.update(extra_args)

        base_string = signature.signature_base_string(
            'POST',
            signature.base_string_uri(launch_url),
            signature.normalize_parameters(
                signature.collect_parameters(body=args, headers=headers)),
        )

        args['oauth_signature'] = signature.sign_hmac_sha1(
            base_string, oauth_consumer_secret, None)
        return args
Exemple #2
0
    def test_signature_base_string(self):
        """
        Example text to be turned into a base string::

            POST /request?b5=%3D%253D&a3=a&c%40=&a2=r%20b HTTP/1.1
            Host: example.com
            Content-Type: application/x-www-form-urlencoded
            Authorization: OAuth realm="Example",
                           oauth_consumer_key="9djdj82h48djs9d2",
                           oauth_token="kkk9d7dh3k39sjv7",
                           oauth_signature_method="HMAC-SHA1",
                           oauth_timestamp="137131201",
                           oauth_nonce="7d8f3e4a",
                           oauth_signature="bYT5CMsGcbgUdFHObYMEfcx6bsw%3D"

        Sample Base string generated and tested against::

            POST&http%253A%2F%2Fexample.com%2Frequest%253Fb5%253D%25253D%252525
            3D%2526a3%253Da%2526c%252540%253D%2526a2%253Dr%252520b&OAuth%2520re
            alm%253D%2522Example%2522%252Coauth_consumer_key%253D%25229djdj82h4
            8djs9d2%2522%252Coauth_token%253D%2522kkk9d7dh3k39sjv7%2522%252Coau
            th_signature_method%253D%2522HMAC-SHA1%2522%252Coauth_timestamp%253
            D%2522137131201%2522%252Coauth_nonce%253D%25227d8f3e4a%2522%252Coau
            th_signature%253D%2522bYT5CMsGcbgUdFHObYMEfcx6bsw%25253D%2522
        """
        self.assertRaises(ValueError, signature_base_string,
                          self.http_method,
                          self.base_string_url,
                          self.normalized_encoded_request_parameters)
        self.assertRaises(ValueError, signature_base_string,
                          self.http_method.decode('utf-8'),
                          self.base_string_url,
                          self.normalized_encoded_request_parameters)
        self.assertRaises(ValueError, signature_base_string,
                          self.http_method.decode('utf-8'),
                          self.base_string_url.decode('utf-8'),
                          self.normalized_encoded_request_parameters)

        base_string = signature_base_string(
            self.http_method.decode('utf-8'),
            self.base_string_url.decode('utf-8'),
            self.normalized_encoded_request_parameters.decode('utf-8')
        )

        self.assertEqual(self.control_base_string, base_string)