Openedx LTI Store
A plugin for openedx-platform to store LTI configurations centrally. This allows course creators to add LTI components without having to enter the details like secrets, keys and URLs everytime the component block is created.
Development
The development instructions are written with the Open edX Devstack as reference.
- Clone the repostiory to
<devstack_root>/src/directorycd <devstack_root>/src/ git clone git@github.com:open-craft/openedx-ltistore.git
- Install the plugin inside the Studio container and run migrations
cd <devstack_root>/devstack/ make studio-shell pip install -e /edx/src/openedx-ltistore python manage.py cms migrate lti_store exit
- Install the plugin inside the LMS Container
make lms-shell pip install -e /edx/src/openedx-ltistore exit
- The LTI Consumer XBlock can fetch configurations to LTI Tools using
openedx-filtersmechanism. It calls the filterorg.openedx.xblock.lti_consumer.configuration.listed.v1whenever it wants to fetch the configurations from external tools like plugins. In order for LTI Store to send available LTI Tools, add the following to any existingopenedx-filtersconfigurations for both LMS (edx-platform/lms/envs/devstack.pyorprivate.py) and studio (edx-platform/cms/envs/devstack.py):OPEN_EDX_FILTERS_CONFIG = { "org.openedx.xblock.lti_consumer.configuration.listed.v1": { "fail_silently": False, "pipeline": [ "lti_store.pipelines.GetLtiConfigurations" ] } }
- Restart the LMS & Studio for the latest config to take effect
make lms-restart make studio-restart
Now any changes made to the source code should reflect in the application
Adding LTI Tools to the store
- Go to
http://localhost:18000/admin - Look for
LTI_STOREand add External lti configurations by clicking+ Addbutton
Use configuration on LTI consumer XBlock
- Go to
http://localhost:18000/admin - Look for
LTI_STOREand go to External lti configurations - On the list of external LTI configurations, note down the "Filter Key" value
of the configuration to use (Example:
lti_store:1). - Copy "Filter Key" to the "External ID" field on the LTI consumer XBlock.
Linting
The project uses Black for linting. To lint the code
make lint
Testing
Unit tests can be run with
make test
Change Log
Unreleased
1.1.4 - 2025-11-18
Fixed
- Fixes the migration conflict described in #37 where two migrations had the same number (0003).
1.1.3 - 2025-10-06
Fixed
- Updated the readable name for LTI 1.1 fields. Making for a nicer admin experience.
1.1.2 - 2025-09-19
Fixed
- Fixed issue with LTI 1.3 public JWK not being included in serialized config.
1.1.0 – 2025-05-21
Added
- Initial release to PyPI.
- CI pipelines.
- Django 5.2 support.
Metadata
Release files for openedx-ltistore 1.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| openedx_ltistore-1.1.4.tar.gz | 24.5 kB | Without provenance | Details for openedx_ltistore-1.1.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| openedx_ltistore-1.1.4-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details for openedx_ltistore-1.1.4-py2.py3-none-any.whl |
Total release size: 47.9 kB
Release files / openedx_ltistore-1.1.4.tar.gz
| Download URL | openedx_ltistore-1.1.4.tar.gz |
|---|---|
| Size | 24.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d5791c1d43ad84c8e2e07e07193f2fe6f1185d3a080ef7e49605230b40f74f53
|
|
BLAKE2b-256 checksum How to use checksums |
27719686b204ac3a69748c2ac73c3aa1cf1aea92dabda51ebe11ae3fea33a861
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / openedx_ltistore-1.1.4-py2.py3-none-any.whl
| Download URL | openedx_ltistore-1.1.4-py2.py3-none-any.whl |
|---|---|
| Size | 23.3 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
905f1548d9f6fc741f201f091f971e6ae6eac713032c5771df72fbfff99261c0
|
|
BLAKE2b-256 checksum How to use checksums |
88b211168c0a5ecd2fdb9b6113e187dd060a32507383da25640a3fc0a804eb95
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Security for openedx-ltistore 1.1.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.