[API] Provide an API endpoint for updating LTI 1.3 tools
This request is for institutions that do local LTI tool development. Like Instructure's Prd, Test, and Beta envirobments, most schools maintain at least two and often three separate environments for local tool development. Here at IU, our development environment is paired with Canvas Beta and our test environment is paired with Canvas test. When Canvas Test and Beta are refreshed with production data these pairings are broken for LTI 1.3 tools, because the configurations are overwritten with the production configurations.
When it comes to LTI 1.1 tools, Instructure provides two options for maintaining the proper tool configurations on test and beta. The first is the use of the "environments" extension in the tool XML as documented in https://iu.instructure.com/doc/api/file.tools_xml.html. Using the environments extension, the institution can supply separate launch URLs and domains for Canvas production, test, and beta as in the example below:
<lticm:options name="environments">
<lticm:property name="launch_url">http://test.example.com/content</lticm:property>
<lticm:property name="domain">test.example.com</lticm:property>
<lticm:property name="test_launch_url">http://test.example.com/content</lticm:property>
<lticm:property name="test_domain">test.example.com</lticm:property>
<lticm:property name="beta_launch_url">http://beta.example.com/content</lticm:property>
<lticm:property name="beta_domain">beta.example.com</lticm:property>
</lticm:options>
When production tools are copied to test and beta during the refresh, the values in the environments extensions are applied to the tool, supporting separate launch URLs and domains for each Canvas environment. We make extensive use of the environments extensions and have already submitted a feature request to provide support for something similar for LTI 1.3 tools (see https://community.canvaslms.com/t5/Idea-Conversations/Support-environment-variables-for-LTI-1-3/idi-...)
Some of our tools , however, don't work with the environment extensions. For those tools, we run a batch job at regular intervals that updates the XML via the External Tools endpoint: PUT /api/v1/accounts/:account_id/external_tools/:external_tool_id. The batch job applies an XML file with the proper launch URL and domain for each tool in test and beta.
Unfortunately neither of the above options is available for LTI 1.3 tools, which means there is no way to automate the pairing of our local dev environments with Canvas Test and Beta.
For this idea request, we'd like to see an endpoint for the Developer Keys tool that would allow us to update the "target_link_uri", "oidc_initiation_url", and "domain" to point to the proper development server. This could be done be providing the full JSON file via a URL or be specifying the necessary values in the body of the JSON call. The important bit is being able to update the 1.3 tool configurations programmatically after a refresh rather than manually updating them one tool at a time.