%PDF- %PDF-
Direktori : /home2/vacivi36/ava/mod/quiz/accessrule/seb/amd/src/ |
Current File : //home2/vacivi36/ava/mod/quiz/accessrule/seb/amd/src/validate_quiz_access.js |
// This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Validate Safe Exam Browser access keys. * * @module quizaccess_seb/validate_quiz_access * @author Andrew Madden <andrewmadden@catalyst-au.net> * @copyright 2021 Catalyst IT * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ import Ajax from 'core/ajax'; import Config from 'core/config'; import Notification from "core/notification"; import * as View from 'quizaccess_seb/view'; // SafeExamBrowser object will be automatically initialized if using the SafeExamBrowser application. window.SafeExamBrowser = window.SafeExamBrowser || null; /** * Once the keys are fetched, action checking access. * * @param {init} cmid Value of course module id of the quiz. * @param {boolean} autoreconfigure Value of Moodle setting: quizaccess_seb/autoreconfigureseb. */ const safeExamBrowserKeysUpdated = (cmid, autoreconfigure = false) => { // Action opening up the quiz. isQuizAccessValid(cmid).then((response) => { // Show the alert for an extra second to allow user to see it. setTimeout(View.clearLoadingAlert, 1000); if (response.configkey && response.browserexamkey) { View.allowAccess(); } else { // If autoreconfigureseb is enabled, attempt to reconfigure page with quiz settings. if (autoreconfigure === true && response.configkey === false) { reconfigureSafeExamBrowser(cmid); } setTimeout(View.showValidationFailedModal, 1000); } return response; }).catch(err => { Notification.exception(err); }); }; /** * Validate keys in Moodle backend. * * @param {init} cmid Value of course module id of the quiz. * @return {Promise} */ const isQuizAccessValid = (cmid) => { const request = { methodname: 'quizaccess_seb_validate_quiz_keys', args: { cmid: cmid, url: window.location.href, configkey: window.SafeExamBrowser.security.configKey, browserexamkey: window.SafeExamBrowser.security.browserExamKey }, }; return Ajax.call([request])[0]; }; /** * Check if the key is not yet set. * * @param {string} key config key or browser exam key. * @return {boolean} */ const isKeyEmpty = (key) => { // If the SafeExamBrowser object is defined, the default 'empty' value of the configKey and browserExamKey is ':'. return key === ":"; }; /** * Reload Safe Exam Browser with current quiz configuration. * * @param {init} cmid Value of course module id of the quiz. */ const reconfigureSafeExamBrowser = (cmid) => { const domain = Config.wwwroot.replace(/^http/i, 'seb'); const redirecturl = domain + '/mod/quiz/accessrule/seb/config.php?cmid=' + cmid; document.location.replace(redirecturl); }; /** * Initialize the process of fetching the keys. * * @param {init} cmid Value of course module id of the quiz. * @param {boolean} autoreconfigure Value of Moodle setting: quizaccess_seb/autoreconfigureseb. */ export const init = async(cmid, autoreconfigure = false) => { // If the SafeExamBrowser object is instantiated, try and use it to fetch the access keys. if (window.SafeExamBrowser !== null) { await View.addLoadingAlert(); // If the SEB keys are already set, we can call our callback directly. if (!isKeyEmpty(window.SafeExamBrowser.security.configKey) || !isKeyEmpty(window.SafeExamBrowser.security.browserExamKey)) { safeExamBrowserKeysUpdated(cmid, autoreconfigure); } else { window.SafeExamBrowser.security.updateKeys(safeExamBrowserKeysUpdated); } } };