MDL-69555 tool_mobile: Allow set auto-login min request time

This commit is contained in:
Juan Leyva
2022-01-11 14:07:30 +01:00
parent 80a9eef971
commit 34ceeb4883
6 changed files with 35 additions and 3 deletions
+4
View File
@@ -306,6 +306,10 @@ class api {
$settings->tool_mobile_filetypeexclusionlist = get_config('tool_mobile', 'filetypeexclusionlist');
$settings->tool_mobile_custommenuitems = get_config('tool_mobile', 'custommenuitems');
$settings->tool_mobile_apppolicy = get_config('tool_mobile', 'apppolicy');
// This setting could be not set in some edge cases such as bad upgrade.
$mintimereq = get_config('tool_mobile', 'autologinmintimebetweenreq');
$mintimereq = empty($mintimereq) ? 6 * MINSECS : $mintimereq;
$settings->tool_mobile_autologinmintimebetweenreq = $mintimereq;
}
if (empty($section) or $section == 'calendar') {
+5 -2
View File
@@ -311,9 +311,12 @@ class external extends external_api {
// Between each request 6 minutes are required.
$last = get_user_preferences('tool_mobile_autologin_request_last', 0, $USER);
// Check if we must reset the count.
$mintimereq = get_config('tool_mobile', 'autologinmintimebetweenreq');
$mintimereq = empty($mintimereq) ? 6 * MINSECS : $mintimereq;
$timenow = time();
if ($timenow - $last < 6 * MINSECS) {
throw new moodle_exception('autologinkeygenerationlockout', 'tool_mobile');
if ($timenow - $last < $mintimereq) {
$minutes = $mintimereq / MINSECS;
throw new moodle_exception('autologinkeygenerationlockout', 'tool_mobile', $minutes);
}
set_user_preference('tool_mobile_autologin_request_last', $timenow, $USER);
+3 -1
View File
@@ -28,7 +28,9 @@ $string['androidappid_desc'] = 'This setting may be left as default unless you h
$string['apppolicy'] = 'App policy URL';
$string['apppolicy_help'] = 'The URL of a policy for app users which is listed on the About page in the app. If the field is left empty, the site policy URL will be used instead.';
$string['apprequired'] = 'This functionality is only available when accessed via the Moodle mobile or desktop app.';
$string['autologinkeygenerationlockout'] = 'Auto-login key generation is blocked. You need to wait 6 minutes between requests.';
$string['autologinkeygenerationlockout'] = 'Auto-login key generation is blocked. You need to wait {$a} minutes between requests.';
$string['autologinmintimebetweenreq'] = 'Minimum time between auto-login requests.';
$string['autologinmintimebetweenreq_desc'] = 'This setting determines the minimum time between auto-login requests from the app. You should set this setting to a low value if mobile app users are frequently asked to enter their credentials when visualising content embedded from the site.';
$string['autologinnotallowedtoadmins'] = 'Auto-login is not allowed for site admins.';
$string['cachedef_plugininfo'] = 'This stores the list of plugins with mobile addons';
$string['cachedef_subscriptiondata'] = 'This stores the Moodle app subscription information.';
+12
View File
@@ -130,6 +130,18 @@ if ($hassiteconfig) {
new lang_string('minimumversion_key', 'tool_mobile'),
new lang_string('minimumversion', 'tool_mobile'), '', PARAM_NOTAGS));
$options = [
60 => new lang_string('numminutes', '', 1),
180 => new lang_string('numminutes', '', 3),
360 => new lang_string('numminutes', '', 6),
900 => new lang_string('numminutes', '', 15),
1800 => new lang_string('numminutes', '', 30),
3600 => new lang_string('numminutes', '', 60)
];
$temp->add(new admin_setting_configselect('tool_mobile/autologinmintimebetweenreq',
new lang_string('autologinmintimebetweenreq', 'tool_mobile'),
new lang_string('autologinmintimebetweenreq_desc', 'tool_mobile'), 360, $options));
$ADMIN->add('mobileapp', $temp);
// Appearance related settings.
@@ -219,6 +219,7 @@ class tool_mobile_external_testcase extends externallib_advanced_testcase {
array('name' => 'tool_mobile_filetypeexclusionlist', 'value' => ''),
array('name' => 'tool_mobile_custommenuitems', 'value' => ''),
array('name' => 'tool_mobile_apppolicy', 'value' => ''),
array('name' => 'tool_mobile_autologinmintimebetweenreq', 'value' => 6 * MINSECS),
array('name' => 'calendartype', 'value' => $CFG->calendartype),
array('name' => 'calendar_site_timeformat', 'value' => $CFG->calendar_site_timeformat),
array('name' => 'calendar_startwday', 'value' => $CFG->calendar_startwday),
@@ -387,6 +388,15 @@ class tool_mobile_external_testcase extends externallib_advanced_testcase {
$result = external::get_autologin_key($token->privatetoken);
$result = external_api::clean_returnvalue(external::get_autologin_key_returns(), $result);
// Change min time between requests to 30 seconds.
set_config('autologinmintimebetweenreq', 30, 'tool_mobile');
// Mock a previous request, 60 seconds ago.
$mocktime = time() - MINSECS;
set_user_preference('tool_mobile_autologin_request_last', $mocktime, $USER);
$result = external::get_autologin_key($token->privatetoken); // All good, we were expecint 30 seconds or more.
$result = external_api::clean_returnvalue(external::get_autologin_key_returns(), $result);
// We just requested one token, we must wait.
$this->expectException('moodle_exception');
$this->expectExceptionMessage(get_string('autologinkeygenerationlockout', 'tool_mobile'));
+1
View File
@@ -4,6 +4,7 @@ Information provided here is intended especially for developers.
=== 4.0 ===
* The function tool_mobile\api::get_qrlogin_key() now requires as parameter an object with all the mobile plugin settings.
* The tool_mobile_external::get_config external function now returns the tool_mobile_autologinmintimebetweenreq setting.
=== 3.7 ===