Skip to content
Snippets Groups Projects
  1. Jan 24, 2023
  2. Dec 02, 2022
  3. Nov 29, 2022
  4. Nov 16, 2022
    • michaelroytman's avatar
      feat: adds support for LTI 1.3 Proctoring Service specification in-browser proctoring launch. · 6288b2a0
      michaelroytman authored
        * Adds an Lti1p3ProctoringLaunchData data class. It should be included as an attribute of the Lti1p3LaunchData
          data class to provide necessary proctoring data for a proctoring launch.
        * Adds an LtiProctoringConsumer class. This class is used to generate LTI proctoring launch requests and to decode
          and validate the JWT send back by the Tool with the LtiStartAssessment message.
        * Adds an lti_1p3_proctoring_enabled BooleanField to the LtiConfiguration model. This field controls whether
          proctoring is enabled for a particular LTI integration.
        * Modifies the launch_gate_endpoint to support LtiStartProctoring and LtiEndAssessment LTI launch messages.
        * Adds an start_proctoring_assessment_endpoint to support LtiStartAssessment messages from the Tool.
        * Adds an LTI_1P3_PROCTORING_ASSESSMENT_STARTED signal. This signal is emitted when the LtiStartAssessment message is
          sent from the Tool to inform users of the library that the LtiStartAssessment message has been received.
      6288b2a0
  5. Nov 07, 2022
    • Andy Shultz's avatar
      fix: remove general use of load_block_as_user · 5f964f1d
      Andy Shultz authored
      For the config model we do not need to go as far as binding the block
      to the user and already get enough data out of the modulestore to
      satisfy the storage on the xblock case. Add a new function to get that
      much xblock only.
      
      For the limited cases where we are using the block more directly as a
      block we maintain the old function.
      
      Also includes a fix to test_views that was closing the wrong level
      mock and leaving an open patch into other tests.
      5f964f1d
  6. Oct 20, 2022
    • Andy Shultz's avatar
      feat: only use anonymous user if there is no other choice · c14aa1c4
      Andy Shultz authored
      Sometimes we need to load the block. Current code always rebinds the
      block to the anonymous user because we might not have a user.
      
      But in many cases we do have a user and may have already loaded and
      bound the block in question. Check for user and request and if the
      block is already bound and just use that block if possible or at least
      load the block with the user you actually have.
      c14aa1c4
  7. Oct 13, 2022
    • michaelroytman's avatar
      feat!: decouple LTI 1.3 launch from LtiConsumerXBlock · f7b9d401
      michaelroytman authored
      Purpose
      -------
      
      The purpose of these changes is to decouple the LTI 1.3 launch from the LtiConsumerXBlock. It is in accordance with the ADR "0007 Decouple LTI 1.3 Launch from XBlock and edX Platform", which is currently under review. The pull request for the ADR is here: https://github.com/openedx/xblock-lti-consumer/pull/281.
      
      The general premise of these changes is to shift the responsibility of defining key launch claims to users of the library. Such claims include user ID, user role, resource link ID, etc. Prior to this change, this context was defined directly in the launch view by referencing XBlock fields and functions, thereby tying the LTI 1.3 launch to the XBlock. By shifting the responsibility out of the view, we will be able to genericize the launch and make it functional in more contexts than just the XBlock and the XBlock runtime.
      
      In short, the key launch claims are encoded in an instance of a data class Lti1p3LaunchData. Users of the library will instantiate this class with necessary launch data to it and pass the instance to various methods of the Python API to communicate the data to the library. Please see the aforementioned ADR for more details about this decoupling strategy.
      
      Note that the majority of these changes affect only the basic LTI 1.3 launch. There have largely been no changes to LTI 1.3 Advantage Services. The one exception is the Deep Linking content launch endpoint. This is because this launch is implemented in the basic LTI 1.3 launch, and it was necessary to make the same changes to the deep linking content launch to ensure that it works properly. Otherwise, LTI 1.3 Advantage Services are out of scope of these changes.
      
      Change Summary for Developers
      -----------------------------
      
      Below is a summary of changes contained in this pull request.
      
      * added an Lti1p3LaunchData data class
      * added caching for Lti1p3LaunchData to limit data sent in request query or form parameters
      * BREAKING CHANGE: modified Python API methods to take Lti1p3LaunchData as a required argument
      ** get_lti_1p3_launch_info
      ** get_lti_1p3_launch_start_url
      ** get_lti_1p3_content_url
      * replaced references to LtiConsumerXBlock.location with Lti1p3LaunchData.config_id
      * removed definition of key LTI 1.3 claims from the launch_gate_endpoint and instantiated Lti1p3LaunchData from within the LtiConsumerXBlock instead
      * added a required launch_data_key request query parameter to the deep_linking_content_endpoint and refactored associated templates and template tags to pass this parameter in the request to the view
      
      Change Summary for Course Staff and Instructors
      -----------------------------------------------
      
      The only changes relevant for course staff and instructors is that the access token and keyset URLs displayed in Studio have changed in format.
      
      The old format was:
      
      Access Token URL: https://courses.edx.org/api/lti_consumer/v1/token/block-v1:edX+999+2022Q3+type@lti_consumer+block@714c10a5e4df452da9d058788acb56be
      Keyset URL: https://courses.edx.org/api/lti_consumer/v1/public_keysets/block-v1:edX+999+2022Q3+type@lti_consumer+block@714c10a5e4df452da9d058788acb56be
      
      The new format is:
      
      Access Token URL: https://courses.edx.org/api/lti_consumer/v1/token/c3f6af60-dbf2-4f85-8974-4ff870068d43
      Keyset URL: https://courses.edx.org/api/lti_consumer/v1/public_keysets/c3f6af60-dbf2-4f85-8974-4ff870068d43
      
      The difference is in the slug at the end of the URL. In the old format, the slug was the UsageKey of the XBlock associated with the LTI integration. In the new format, the slug is the config_id of the LtiConfiguration associated with the LTI integration. This is an iterative step toward decoupling the access_token_endpoint and the public_keyset_endpoint views from the XBlock location field. The XBlock location field appears as the usage_key parameter to both views. We cannot simply remove the usage_key parameter from the views, because existing LTI 1.3 integrations may have been created using the old format, and we need to maintain backwards compatibility. This change, however, prevents new integrations from being created that are coupled to the XBlock. In the future, we may address integrations that use the old format to fully decouple the XBlock from the views.
      
      Testing
      -------
      
      Unit tests were added for all changes.
      
      In addition, manual testing was performed using the instructions in the documents listed below.
      
      * https://github.com/openedx/xblock-lti-consumer#lti-13
      * https://openedx.atlassian.net/wiki/spaces/COMM/pages/1858601008/How+to+run+the+LTI+Validation+test
      
      Resources
      ---------
      JIRA: MST-1603: https://2u-internal.atlassian.net/browse/MST-1603
      
      BREAKING CHANGE
      f7b9d401
  8. Aug 17, 2022
    • Arunmozhi's avatar
      feat: Decouple LTI 1.3 from LTI Consumer XBlock functionality · ec43c30d
      Arunmozhi authored
      Move XBlock endpoints to Django models and implement backwards compatible views.
      
      Relevant commits:
      * refactor: move LTI 1.3 access token endpoint to plugin view
      * refactor: remove the xblock handler and add tests to api view
      * refactor: move the lti_1p3_launch_callback logic to the django view
      * feat: adds access token view for backward compatibility
      * refactor: make launch urls use config_id when block is missing
      * refactor: remove launch_callback_handler from XBlock
      Unverified
      ec43c30d
  9. Jul 18, 2022
    • michaelroytman's avatar
      feat: Add core LTI 1.3 and Advantage configuration to LTIConfiguration model · d5e98141
      michaelroytman authored
      This commit adds additional core LTI 1.3 and LTI Advantage variables to the LTIConfiguration model. The additional core LTI 1.3 variables are lti_1p3_oidc_url, lti_1p3_launch_url, lti_1p3_tool_public_key, and lti_1p3_tool_keyset_url. The additional LTI Advantage variables are lti_advantage_enable_nrps, lti_advantage_deep_linking_enabled, lti_advantage_deep_linking_launch_url, and lti_advantage_ags_mode.
      
      This commit also adds a configuration type to the LtiConsumerXBlock to support the storage of these LTI variables on the LTIConfiguration model (i.e. the database) instead of the xBlock itself.
      
      Changes that allow the use of this configuration option are behind the lti_consumer.enable_database_config CourseWaffleFlag.
      d5e98141
  10. May 09, 2022
  11. Jul 01, 2021
    • Kshitij Sobti's avatar
      refactor: Rename CourseEditLTIFieldsEnabledFlag to... · 6fb86793
      Kshitij Sobti authored
      refactor: Rename CourseEditLTIFieldsEnabledFlag to CourseAllowPIISharingInLTIFlag and use it for LTI1.3
      This commit renames the CourseEditLTIFieldsEnabledFlag to CourseAllowPIISharingInLTIFlag since the aim is to expand its scope to all LTI-related PII sharing. It also removes the current LTI1.3 waffle flag for PII sharing.
      Unverified
      6fb86793
  12. Jun 14, 2021
  13. Apr 13, 2021
  14. Jan 29, 2021
  15. Jan 21, 2021
  16. Jan 15, 2021
  17. Nov 20, 2020
    • Shimul Chowdhury's avatar
      [BD-24] [TNL-7661] [BB-3172] LTI Improvements - Use declarative grading model... · 8b72fb9a
      Shimul Chowdhury authored
      [BD-24] [TNL-7661] [BB-3172] LTI Improvements - Use declarative grading model on XBlock launch (#116)
      
      * create default LineItem, WIP grade save
      
      * add score to django admin
      
      * WIP: find user and save grade to xblock
      
      * boolean pragramatic grade interaction flag and optional params in enable_ags method
      
      * Submit grades using grade signals
      
      * lineitem urls should be optional
      
      * lineitem is now readonly in declarative method
      
      * test grade_submit called properly
      
      * quality issue
      
      * raise LTIError
      
      * moved listener to signal.py, refactored models.py, added due and start date, updated tests.
      
      * use load_block_as_anonymous_user and remove load_block, refactor tests
      
      * refactor test to fix quality issue
      
      * make lineitems_url required
      
      * refactor tests, accept_grades_past_due on check
      
      * test accept_grades_past_due
      
      * add comma to last items
      
      * refactor get_lti_ags_lineitems_url
      
      * make sure crum returns user and not None
      
      * nitpicks & use maximum score when given score is larger than maximum
      
      * fix docstring of load_block_as_anonymous_user
      Unverified
      8b72fb9a
  18. Nov 12, 2020
  19. Nov 10, 2020
  20. Oct 23, 2020
    • Patrick Cockwell's avatar
      [BD-24] Implement LTI AGS Score Publish Service and Results (#108) · 5fc16b38
      Patrick Cockwell authored
      * BD-24 Implement LTI AGS Score Publish Service and Results Service
      
      * Address PR comments and add more validation
      
      * Address PR comments
      
      * Add tests; Fix error with scoreMaximum; Fix quality issues; Adjust user_id results url slightly
      
      * Add permissions tests and address other PR comments
      
      * Fix quality test
      
      * Address PR comments
      Unverified
      5fc16b38
  21. Oct 05, 2020
  22. Sep 04, 2020
  23. Aug 26, 2020
Loading