diff --git a/lti_consumer/lti_1p3/consumer.py b/lti_consumer/lti_1p3/consumer.py index e90ba4b747567f5f80300a3804b28e78b69b0bfe..3c824e34c62b2f6f4b38a14658be6c9b829a3c6a 100644 --- a/lti_consumer/lti_1p3/consumer.py +++ b/lti_consumer/lti_1p3/consumer.py @@ -256,26 +256,6 @@ class LtiConsumer1p3: """ Export Public JWK """ - public_keys = jwk.KEYS() - public_keys.append(self.jwk) - return json.loads(public_keys.dump_jwks()) - - def _validate_preflight_response(self, response): - """ - Validates a preflight response to be used in a launch request - - Raises ValueError in case of validation failure - - :param response: the preflight response to be validated - """ - try: - assert response.get("nonce") - assert response.get("state") - assert response.get("client_id") == self.client_id - assert response.get("redirect_uri") == self.launch_url - except AssertionError: - raise ValueError("Preflight reponse failed validation") - return self.key_handler.get_public_jwk() def access_token(self, token_request_data): diff --git a/lti_consumer/lti_1p3/tests/test_consumer.py b/lti_consumer/lti_1p3/tests/test_consumer.py index 6a1841eebd9ad718f0139fb4cc76c0517195de61..09f71736abd50b8cce5265667e526f6207f1f825 100644 --- a/lti_consumer/lti_1p3/tests/test_consumer.py +++ b/lti_consumer/lti_1p3/tests/test_consumer.py @@ -114,7 +114,7 @@ class TestLti1p3Consumer(TestCase): def test_preflight_validation(self, preflight_response, success): if success: return self.lti_consumer._validate_preflight_response(preflight_response) # pylint: disable=protected-access - with self.assertRaises(ValueError): + with self.assertRaises(exceptions.PreflightRequestValidationFailure): return self.lti_consumer._validate_preflight_response(preflight_response) # pylint: disable=protected-access @ddt.data( @@ -373,19 +373,3 @@ class TestLti1p3Consumer(TestCase): # Check if token is valid self._decode_token(response.get('access_token')) - - @ddt.data( - ({"client_id": CLIENT_ID, "redirect_uri": LAUNCH_URL, "nonce": STATE, "state": STATE}, True), - ({"client_id": "2", "redirect_uri": LAUNCH_URL, "nonce": STATE, "state": STATE}, False), - ({"client_id": CLIENT_ID, "redirect_uri": LAUNCH_URL[::-1], "nonce": STATE, "state": STATE}, False), - ({"redirect_uri": LAUNCH_URL, "nonce": NONCE, "state": STATE}, False), - ({"client_id": CLIENT_ID, "nonce": NONCE, "state": STATE}, False), - ({"client_id": CLIENT_ID, "redirect_uri": LAUNCH_URL, "state": STATE}, False), - ({"client_id": CLIENT_ID, "redirect_uri": LAUNCH_URL, "nonce": NONCE}, False), - ) - @ddt.unpack - def test_preflight_validation(self, preflight_response, success): - if success: - return self.lti_consumer._validate_preflight_response(preflight_response) # pylint: disable=protected-access - with self.assertRaises(exceptions.PreflightRequestValidationFailure): - return self.lti_consumer._validate_preflight_response(preflight_response) # pylint: disable=protected-access diff --git a/lti_consumer/lti_consumer.py b/lti_consumer/lti_consumer.py index ad46db3b442cf28c38ce70367b0565ac2d8c4b31..6f8ded93d94cc0b464fc683d605faecc298ca31b 100644 --- a/lti_consumer/lti_consumer.py +++ b/lti_consumer/lti_consumer.py @@ -335,7 +335,8 @@ class LtiConsumerXBlock(StudioEditableXBlockMixin, XBlock): "<br />This is a string that starts with '-----BEGIN PUBLIC KEY-----' and is required " "so that the LMS can check if the messages and launch requests received have the signature " "from the tool." - "<br /><b>This is not required when doing LTI 1.3 Launches without LTI Advantage nor Basic Outcomes requests.</b>" + "<br /><b>This is not required when doing LTI 1.3 Launches without LTI Advantage nor " + "Basic Outcomes requests.</b>" ), ) # Client ID and block key diff --git a/lti_consumer/tests/unit/test_lti_consumer.py b/lti_consumer/tests/unit/test_lti_consumer.py index d13eca34bb6ae285f56729486fc685a3bda1b451..c02ecf373384b97e9d3287742e97e7a610b60332 100644 --- a/lti_consumer/tests/unit/test_lti_consumer.py +++ b/lti_consumer/tests/unit/test_lti_consumer.py @@ -1042,7 +1042,7 @@ class TestLtiConsumer1p3XBlock(TestCase): self.assertEqual(response.status_code, 400) response_body = response.body.decode('utf-8') - self.assertIn("There was an error launching the LTI 1.3 tool.", response_body) + self.assertIn("There was an error while launching the LTI 1.3 tool.", response_body) def test_launch_callback_endpoint_when_using_lti_1p1(self): """ diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 357292141d1777f2020ee4b54cd59b58c3038a20..0000000000000000000000000000000000000000 --- a/requirements.txt +++ /dev/null @@ -1,11 +0,0 @@ -lxml -bleach -django==1.11.25 -oauthlib -mako -lazy -pyjwkest==1.4.2 -pycryptodome==3.9.7 --e git+https://github.com/edx/XBlock.git#egg=XBlock --e git+https://github.com/edx/xblock-utils.git#egg=xblock-utils --e . diff --git a/requirements/base.in b/requirements/base.in index 591166eea59385aadcb10567672ded31f00c9960..0f0577dcff7a5e67c0311736f1b28d71440586db 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -9,5 +9,3 @@ mako lazy XBlock xblock-utils -pyjwkest -pycryptodome \ No newline at end of file diff --git a/requirements/base.txt b/requirements/base.txt index ee1ce580fdaef7e0282b63957dc00faa2bde3c2b..98fbd563af65a2349ccbe42a84e809eaa7131ce6 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -6,31 +6,21 @@ # appdirs==1.4.4 # via fs bleach==3.1.5 # via -r requirements/base.in -certifi==2020.4.5.1 # via requests -chardet==3.0.4 # via requests django==2.2.13 # via -c requirements/constraints.txt, -r requirements/base.in fs==2.4.11 # via xblock -future==0.18.2 # via pyjwkest -idna==2.9 # via requests lazy==1.4 # via -r requirements/base.in lxml==4.5.1 # via -r requirements/base.in, xblock mako==1.1.3 # via -r requirements/base.in, xblock-utils markupsafe==1.1.1 # via mako, xblock oauthlib==3.1.0 # via -r requirements/base.in packaging==20.4 # via bleach -pycryptodome==3.9.7 # via -r requirements/base.in -pycryptodomex==3.9.7 # via pyjwkest -pyjwkest==1.4.2 # via -r requirements/base.in pyparsing==2.4.7 # via packaging python-dateutil==2.8.1 # via xblock pytz==2020.1 # via django, fs, xblock pyyaml==5.3.1 # via xblock -requests==2.23.0 # via pyjwkest simplejson==3.17.0 # via xblock-utils +six==1.15.0 # via bleach, fs, packaging, python-dateutil, xblock sqlparse==0.3.1 # via django -typing==3.7.4.1 # via fs -six==1.14.0 # via bleach, fs, packaging, pyjwkest, python-dateutil, xblock -urllib3==1.25.9 # via requests web-fragments==0.3.2 # via xblock, xblock-utils webencodings==0.5.1 # via bleach webob==1.8.6 # via xblock diff --git a/requirements/test.txt b/requirements/test.txt index 4797ea95d6480307aa25fe4a4d6a12d2585d0d3d..0e1d42144504b83c68fdfe8bbd31fc6b18ff7fca 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -4,13 +4,12 @@ # # make upgrade # --e git+https://github.com/edx/xblock-sdk.git#egg=xblock-sdk # via -r requirements/test.in appdirs==1.4.4 # via -r requirements/base.txt, fs astroid==2.3.3 # via pylint, pylint-celery bleach==3.1.5 # via -r requirements/base.txt -boto3==1.14.1 # via fs-s3fs -botocore==1.17.1 # via boto3, s3transfer -certifi==2020.4.5.2 # via requests +boto3==1.14.10 # via fs-s3fs +botocore==1.17.10 # via boto3, s3transfer +certifi==2020.6.20 # via requests chardet==3.0.4 # via requests click-log==0.3.2 # via edx-lint click==7.1.2 # via click-log, edx-lint @@ -24,8 +23,7 @@ docutils==0.15.2 # via botocore edx-lint==1.4.1 # via -r requirements/test.in fs-s3fs==1.1.1 # via django-pyfs fs==2.4.11 # via -r requirements/base.txt, django-pyfs, fs-s3fs, xblock -future==0.18.2 # via -r requirements/base.txt, pyjwkest -idna==2.9 # via -r requirements/base.txt, requests +idna==2.9 # via requests isort==4.3.21 # via pylint jmespath==0.10.0 # via boto3, botocore lazy-object-proxy==1.4.3 # via astroid @@ -39,9 +37,6 @@ nose==1.3.7 # via django-nose oauthlib==3.1.0 # via -r requirements/base.txt packaging==20.4 # via -r requirements/base.txt, bleach pep8==1.7.1 # via -r requirements/test.in -pycryptodome==3.9.7 # via -r requirements/base.txt -pycryptodomex==3.9.7 # via -r requirements/base.txt, pyjwkest -pyjwkest==1.4.2 # via -r requirements/base.txt pylint-celery==0.3 # via edx-lint pylint-django==2.0.11 # via edx-lint pylint-plugin-utils==0.6 # via pylint-celery, pylint-django @@ -50,13 +45,12 @@ pyparsing==2.4.7 # via -r requirements/base.txt, packaging python-dateutil==2.8.1 # via -r requirements/base.txt, botocore, xblock pytz==2020.1 # via -r requirements/base.txt, django, fs, xblock pyyaml==5.3.1 # via -r requirements/base.txt, xblock -requests==2.23.0 # via -r requirements/base.txt, coveralls, pyjwkest +requests==2.24.0 # via coveralls s3transfer==0.3.3 # via boto3 simplejson==3.17.0 # via -r requirements/base.txt, xblock-utils six==1.15.0 # via -r requirements/base.txt, astroid, bleach, django-pyfs, edx-lint, fs, fs-s3fs, mock, packaging, python-dateutil, xblock sqlparse==0.3.1 # via -r requirements/base.txt, django typed-ast==1.4.1 # via astroid -typing==3.7.4.1 # via -r requirements/base.txt, fs urllib3==1.25.9 # via botocore, requests web-fragments==0.3.2 # via -r requirements/base.txt, xblock, xblock-utils webencodings==0.5.1 # via -r requirements/base.txt, bleach diff --git a/requirements/tox.txt b/requirements/tox.txt index 906f590bdf304cdf44e266b7f9f8721b1df37822..2895a075982b6ce68ea12056b734c42b56aa6f55 100644 --- a/requirements/tox.txt +++ b/requirements/tox.txt @@ -8,13 +8,13 @@ appdirs==1.4.4 # via virtualenv distlib==0.3.0 # via virtualenv filelock==3.0.12 # via tox, virtualenv importlib-metadata==1.6.1 # via importlib-resources, pluggy, tox, virtualenv -importlib-resources==1.5.0 # via virtualenv +importlib-resources==2.0.1 # via virtualenv packaging==20.4 # via tox pluggy==0.13.1 # via tox -py==1.8.1 # via tox +py==1.9.0 # via tox pyparsing==2.4.7 # via packaging six==1.15.0 # via packaging, tox, virtualenv toml==0.10.1 # via tox -tox==3.15.0 # via -r requirements/tox.in -virtualenv==20.0.20 # via tox -zipp==1.1.1 # via -c requirements/constraints.txt, importlib-metadata +tox==3.15.2 # via -r requirements/tox.in +virtualenv==20.0.25 # via tox +zipp==1.1.1 # via -c requirements/constraints.txt, importlib-metadata, importlib-resources diff --git a/requirements/travis.txt b/requirements/travis.txt index 2a0dc4530c7feadf173619fbc14eb1f37f5884f4..48c2267eff4aefcf8304aed40aad28c2fc4d501d 100644 --- a/requirements/travis.txt +++ b/requirements/travis.txt @@ -4,13 +4,12 @@ # # make upgrade # --e git+https://github.com/edx/xblock-sdk.git#egg=xblock-sdk # via -r requirements/test.txt appdirs==1.4.4 # via -r requirements/test.txt, -r requirements/tox.txt, fs, virtualenv astroid==2.3.3 # via -r requirements/test.txt, pylint, pylint-celery bleach==3.1.5 # via -r requirements/test.txt -boto3==1.13.10 # via -r requirements/test.txt, fs-s3fs -botocore==1.16.10 # via -r requirements/test.txt, boto3, s3transfer -certifi==2020.4.5.1 # via -r requirements/test.txt, requests +boto3==1.14.10 # via -r requirements/test.txt, fs-s3fs +botocore==1.17.10 # via -r requirements/test.txt, boto3, s3transfer +certifi==2020.6.20 # via -r requirements/test.txt, requests chardet==3.0.4 # via -r requirements/test.txt, requests click-log==0.3.2 # via -r requirements/test.txt, edx-lint click==7.1.2 # via -r requirements/test.txt, click-log, edx-lint @@ -27,9 +26,9 @@ edx-lint==1.4.1 # via -r requirements/test.txt filelock==3.0.12 # via -r requirements/tox.txt, tox, virtualenv fs-s3fs==1.1.1 # via -r requirements/test.txt, django-pyfs fs==2.4.11 # via -r requirements/test.txt, django-pyfs, fs-s3fs, xblock -future==0.18.2 # via -r requirements/test.txt, pyjwkest idna==2.9 # via -r requirements/test.txt, requests -importlib-metadata==1.6.0 # via -r requirements/tox.txt, pluggy, tox, virtualenv +importlib-metadata==1.6.1 # via -r requirements/tox.txt, importlib-resources, pluggy, tox, virtualenv +importlib-resources==2.0.1 # via -r requirements/tox.txt, virtualenv isort==4.3.21 # via -r requirements/test.txt, pylint jmespath==0.10.0 # via -r requirements/test.txt, boto3, botocore lazy-object-proxy==1.4.3 # via -r requirements/test.txt, astroid @@ -44,10 +43,7 @@ oauthlib==3.1.0 # via -r requirements/test.txt packaging==20.4 # via -r requirements/test.txt, -r requirements/tox.txt, bleach, tox pep8==1.7.1 # via -r requirements/test.txt pluggy==0.13.1 # via -r requirements/tox.txt, tox -py==1.8.1 # via -r requirements/tox.txt, tox -pycryptodome==3.9.7 # via -r requirements/test.txt -pycryptodomex==3.9.7 # via -r requirements/test.txt, pyjwkest -pyjwkest==1.4.2 # via -r requirements/test.txt +py==1.9.0 # via -r requirements/tox.txt, tox pylint-celery==0.3 # via -r requirements/test.txt, edx-lint pylint-django==2.0.11 # via -r requirements/test.txt, edx-lint pylint-plugin-utils==0.6 # via -r requirements/test.txt, pylint-celery, pylint-django @@ -56,23 +52,24 @@ pyparsing==2.4.7 # via -r requirements/test.txt, -r requirements/tox.tx python-dateutil==2.8.1 # via -r requirements/test.txt, botocore, xblock pytz==2020.1 # via -r requirements/test.txt, django, fs, xblock pyyaml==5.3.1 # via -r requirements/test.txt, xblock -requests==2.23.0 # via -r requirements/test.txt, coveralls, pyjwkest +requests==2.24.0 # via -r requirements/test.txt, coveralls s3transfer==0.3.3 # via -r requirements/test.txt, boto3 simplejson==3.17.0 # via -r requirements/test.txt, xblock-utils -six==1.14.0 # via -r requirements/test.txt, -r requirements/tox.txt, -r requirements/travis.in, astroid, bleach, django-pyfs, edx-lint, fs, fs-s3fs, mock, packaging, pyjwkest, python-dateutil, tox, virtualenv, xblock +six==1.15.0 # via -r requirements/test.txt, -r requirements/tox.txt, -r requirements/travis.in, astroid, bleach, django-pyfs, edx-lint, fs, fs-s3fs, mock, packaging, python-dateutil, tox, virtualenv, xblock sqlparse==0.3.1 # via -r requirements/test.txt, django toml==0.10.1 # via -r requirements/tox.txt, tox -tox==3.15.0 # via -r requirements/tox.txt +tox==3.15.2 # via -r requirements/tox.txt typed-ast==1.4.1 # via -r requirements/test.txt, astroid urllib3==1.25.9 # via -r requirements/test.txt, botocore, requests -virtualenv==20.0.20 # via -r requirements/tox.txt, tox +virtualenv==20.0.25 # via -r requirements/tox.txt, tox web-fragments==0.3.2 # via -r requirements/test.txt, xblock, xblock-utils webencodings==0.5.1 # via -r requirements/test.txt, bleach webob==1.8.6 # via -r requirements/test.txt, xblock wrapt==1.11.2 # via -r requirements/test.txt, astroid +xblock-sdk==0.2.0 # via -r requirements/test.txt xblock-utils==2.1.1 # via -r requirements/test.txt xblock==1.3.1 # via -r requirements/test.txt, xblock-utils -zipp==1.1.1 # via -c requirements/constraints.txt, -r requirements/tox.txt, importlib-metadata +zipp==1.1.1 # via -c requirements/constraints.txt, -r requirements/tox.txt, importlib-metadata, importlib-resources # The following packages are considered to be unsafe in a requirements file: # setuptools