A base url of http://localhost/mod/lti/contentitem_return.php?course=2&id=39&sesskey=BP0AlkCbZq results in the following return value from LtiMessage::toUrl() (which is invalid because of the double ?).
http://localhost/mod/lti/contentitem_return.php?course=2&id=39&sesskey=BP0AlkCbZq?JWT=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjU1ZmQwNzIxMWY5ZDQ4MGVhOWVjNGIwNTU5ZGFiNzMwZGNlZmU4MjZhMDdmZjU5YjA5NDgxN2Q1NmRjZjJlNzYifQ.eyJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2x0aS1kbC9jbGFpbS9kYXRhIjpudWxsLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2x0aS1kbC9jbGFpbS9tc2ciOiIxIGl0ZW0ocykgcHJvdmlkZWQiLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2x0aS1kbC9jbGFpbS9sb2ciOiIxIGl0ZW0ocykgcHJvdmlkZWQiLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2x0aS1kbC9jbGFpbS9jb250ZW50X2l0ZW1zIjpbeyJ1cmwiOiJodHRwOi8vaG9zdC5kb2NrZXIuaW50ZXJuYWw6ODA4MC9sdGkvbGF1bmNoIiwidGl0bGUiOiJteSBmYW5jeSBweXRob24gdG9vbCIsInR5cGUiOiJsdGlSZXNvdXJjZUxpbmsifV0sImlzcyI6IlFZWXQ1WU5GQ1NRZEJ2byIsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3QiLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2x0aS9jbGFpbS92ZXJzaW9uIjoiMS4zLjAiLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2x0aS9jbGFpbS9tZXNzYWdlX3R5cGUiOiJMdGlEZWVwTGlua2luZ1Jlc3BvbnNlIiwiaHR0cHM6Ly9wdXJsLmltc2dsb2JhbC5vcmcvc3BlYy9sdGkvY2xhaW0vZGVwbG95bWVudF9pZCI6IjM5Iiwibm9uY2UiOiIxYjRjYWRiZi1kOWQ5LTQ5NWItOGU1MC1jNjY0MzYzZDBjNGQiLCJqdGkiOiI0ZmNiOTgwMi04ODVhLTQ1ZWYtYjNlMC05YThkMDY4OTlmNjciLCJpYXQiOjE2MjcyMzM5ODEuMjYwMDA3LCJuYmYiOjE2MjcyMzM5ODEuMjYwMDA3LCJleHAiOjE2MjcyMzQ1ODEuMjYwMDA3fQ.D1_vl22-Vdgyenl9A8koxSb_Sj_GyNWmOqL3uzOSdlePDWSs5OsJYyHxKPuR79bxrNCDzuP5jATylYe-w5NxT2qFGL-BwXtrSCqd3hCGdrq-cyx8gqs-iUQkfUASG5giDspiV8IeEqQkEbGW9HCySyun_R_I1WOloToXBHqt-AqG0jMRG9ZDjVYsZ0Fjh68IHmE8uC37Yz7Fv8pNfNPJBAp8ac8V_G_o-0JHKMtOEOeMp_RSPHlSA-bcD73098UTBR9jroalPlDFBTNkgI3yQDRmuFF1FqSBS7FQ9FuX6HBjz2gZD7v7ImCYQ6qnMwiZlZy0EfDDioLxvhSZu8nJArcTCPCVCxZVRn4SGsnmSKWu1zTZ3nrLjm0AE3mzU6FHWX-E1BSW5y1wzX-ofoqLHCkWioflfzNJ37rMlFpIYGC1nGPlN-sImJCiZTwOxMKvXe_3Mufl3pPAqSao_3ba0prr9aYBN3cl3rVHp4aWvAJMhttovOs2LxWTojM5n0TVMfDpwtkRNHpIS7JDD-oBxcAV-OVR-2yl02qJntPKFRdyN37_NZiWc7IcywBCefjpeNHRHLAfV2lkCiEEmo7w7BF_hz-fAQc7aExfvFqj3T55cglIA_4JJ4ZPY2ng1KKRg1SeFhM3CHz3WjVtX0gYmbDSvUKmmFqNhCMA1PMzvP4
As the title of this issue says: The
LtiMessage::toUrl()
method should generate a valid URL if the base URL already contains a query string. https://github.com/oat-sa/lib-lti1p3-core/blob/d840ce93ecd7511c2c03bd16cd09388eaba9101f/src/Message/LtiMessage.php#L80A base url of
http://localhost/mod/lti/contentitem_return.php?course=2&id=39&sesskey=BP0AlkCbZq
results in the following return value fromLtiMessage::toUrl()
(which is invalid because of the double?
).http://localhost/mod/lti/contentitem_return.php?course=2&id=39&sesskey=BP0AlkCbZq?JWT=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjU1ZmQwNzIxMWY5ZDQ4MGVhOWVjNGIwNTU5ZGFiNzMwZGNlZmU4MjZhMDdmZjU5YjA5NDgxN2Q1NmRjZjJlNzYifQ.eyJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2x0aS1kbC9jbGFpbS9kYXRhIjpudWxsLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2x0aS1kbC9jbGFpbS9tc2ciOiIxIGl0ZW0ocykgcHJvdmlkZWQiLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2x0aS1kbC9jbGFpbS9sb2ciOiIxIGl0ZW0ocykgcHJvdmlkZWQiLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2x0aS1kbC9jbGFpbS9jb250ZW50X2l0ZW1zIjpbeyJ1cmwiOiJodHRwOi8vaG9zdC5kb2NrZXIuaW50ZXJuYWw6ODA4MC9sdGkvbGF1bmNoIiwidGl0bGUiOiJteSBmYW5jeSBweXRob24gdG9vbCIsInR5cGUiOiJsdGlSZXNvdXJjZUxpbmsifV0sImlzcyI6IlFZWXQ1WU5GQ1NRZEJ2byIsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3QiLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2x0aS9jbGFpbS92ZXJzaW9uIjoiMS4zLjAiLCJodHRwczovL3B1cmwuaW1zZ2xvYmFsLm9yZy9zcGVjL2x0aS9jbGFpbS9tZXNzYWdlX3R5cGUiOiJMdGlEZWVwTGlua2luZ1Jlc3BvbnNlIiwiaHR0cHM6Ly9wdXJsLmltc2dsb2JhbC5vcmcvc3BlYy9sdGkvY2xhaW0vZGVwbG95bWVudF9pZCI6IjM5Iiwibm9uY2UiOiIxYjRjYWRiZi1kOWQ5LTQ5NWItOGU1MC1jNjY0MzYzZDBjNGQiLCJqdGkiOiI0ZmNiOTgwMi04ODVhLTQ1ZWYtYjNlMC05YThkMDY4OTlmNjciLCJpYXQiOjE2MjcyMzM5ODEuMjYwMDA3LCJuYmYiOjE2MjcyMzM5ODEuMjYwMDA3LCJleHAiOjE2MjcyMzQ1ODEuMjYwMDA3fQ.D1_vl22-Vdgyenl9A8koxSb_Sj_GyNWmOqL3uzOSdlePDWSs5OsJYyHxKPuR79bxrNCDzuP5jATylYe-w5NxT2qFGL-BwXtrSCqd3hCGdrq-cyx8gqs-iUQkfUASG5giDspiV8IeEqQkEbGW9HCySyun_R_I1WOloToXBHqt-AqG0jMRG9ZDjVYsZ0Fjh68IHmE8uC37Yz7Fv8pNfNPJBAp8ac8V_G_o-0JHKMtOEOeMp_RSPHlSA-bcD73098UTBR9jroalPlDFBTNkgI3yQDRmuFF1FqSBS7FQ9FuX6HBjz2gZD7v7ImCYQ6qnMwiZlZy0EfDDioLxvhSZu8nJArcTCPCVCxZVRn4SGsnmSKWu1zTZ3nrLjm0AE3mzU6FHWX-E1BSW5y1wzX-ofoqLHCkWioflfzNJ37rMlFpIYGC1nGPlN-sImJCiZTwOxMKvXe_3Mufl3pPAqSao_3ba0prr9aYBN3cl3rVHp4aWvAJMhttovOs2LxWTojM5n0TVMfDpwtkRNHpIS7JDD-oBxcAV-OVR-2yl02qJntPKFRdyN37_NZiWc7IcywBCefjpeNHRHLAfV2lkCiEEmo7w7BF_hz-fAQc7aExfvFqj3T55cglIA_4JJ4ZPY2ng1KKRg1SeFhM3CHz3WjVtX0gYmbDSvUKmmFqNhCMA1PMzvP4