diff --git a/auth/lti/classes/local/ltiadvantage/event/event_handler.php b/auth/lti/classes/local/ltiadvantage/event/event_handler.php new file mode 100644 index 00000000000..a3817f7e46e --- /dev/null +++ b/auth/lti/classes/local/ltiadvantage/event/event_handler.php @@ -0,0 +1,50 @@ +. + +namespace auth_lti\local\ltiadvantage\event; + +use auth_lti\local\ltiadvantage\utility\cookie_helper; +use core\event\user_loggedin; + +/** + * Event handler for auth_lti. + * + * @package auth_lti + * @copyright 2024 Jake Dallimore + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class event_handler { + + /** + * Allows the plugin to augment Set-Cookie headers when the user_loggedin event is fired as part of complete_user_login() calls. + * + * @param user_loggedin $event the event + * @return void + */ + public static function handle_user_loggedin(user_loggedin $event): void { + // The event data isn't important here. The intent of this listener is to ensure that the MoodleSession cookie gets the + // 'Partitioned' attribute, when required - an opt-in flag needed to use Chrome's partitioning mechanism, CHIPS. During LTI + // auth, the auth class (auth/lti/auth.php) calls complete_user_login(), which generates a new session cookie as part of its + // login process. This handler makes sure that this new cookie is intercepted and partitioned, if needed. + if (cookie_helper::cookies_supported()) { + if (cookie_helper::get_cookies_supported_method() == cookie_helper::COOKIE_METHOD_EXPLICIT_PARTITIONING) { + global $CFG; + cookie_helper::add_attributes_to_cookie_response_header('MoodleSession' . $CFG->sessioncookie, + ['Partitioned', 'Secure']); + } + } + } +} diff --git a/auth/lti/db/events.php b/auth/lti/db/events.php new file mode 100644 index 00000000000..19b4df8e344 --- /dev/null +++ b/auth/lti/db/events.php @@ -0,0 +1,33 @@ +. + +/** + * LTI Auth plugin event handler definition. + * + * @package auth_lti + * @category event + * @copyright 2024 Jake Dallimore + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$observers = [ + [ + 'eventname' => '\core\event\user_loggedin', + 'callback' => '\auth_lti\local\ltiadvantage\event\event_handler::handle_user_loggedin', + ], +]; diff --git a/auth/lti/version.php b/auth/lti/version.php index a36052b1299..a1ba6bc7189 100644 --- a/auth/lti/version.php +++ b/auth/lti/version.php @@ -24,6 +24,6 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2023100900; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2024020700; // The current plugin version (Date: YYYYMMDDXX). $plugin->requires = 2023100400; // Requires this Moodle version. $plugin->component = 'auth_lti'; // Full name of the plugin (used for diagnostics).