} // Check if the plugin is properly configured. $typeoflogin = get_config('tool_mobile', 'typeoflogin'); if ($typeoflogin != tool_mobile\api::LOGIN_VIA_BROWSER and $typeoflogin != tool_mobile\api::LOGIN_VIA_EMBEDDED_BROWSER) { throw new moodle_exception('pluginnotenabledorconfigured', 'tool_mobile'); } // Check if the service exists and is enabled. $service = $DB->get_record('external_services', array('shortname' => $serviceshortname, 'enabled' => 1)); if (empty($service)) { throw new moodle_exception('servicenotavailable', 'webservice'); } require_login(0, false); // Require an active user: not guest, not suspended. core_user::require_active_user($USER); // Get an existing token or create a new one. $token = external_generate_token_for_current_user($service); // Log token access. $DB->set_field('external_tokens', 'lastaccess', time(), array('id' => $token->id)); $params = array('objectid' => $token->id); $event = \core\event\webservice_token_sent::create($params); $event->add_record_snapshot('external_tokens', $token); $event->trigger(); // Passport is generated in the mobile app, so the app opening can be validated using that variable. // Passports are valid only one time, it's deleted in the app once used. $siteid = md5($CFG->wwwroot . $passport); $apptoken = base64_encode($siteid . ':::' . $token->token); // Redirect using the custom URL scheme checking first if a URL scheme is forced in the site settings. $forcedurlscheme = get_config('tool_mobile', 'forcedurlscheme'); if (!empty($forcedurlscheme)) { $urlscheme = $forcedurlscheme; }
/** * Test get_autologin_key locked. */ public function test_get_autologin_key_missing_locked() { global $CFG, $DB, $USER; $this->resetAfterTest(true); $user = $this->getDataGenerator()->create_user(); $this->setUser($user); $CFG->enablewebservices = 1; $CFG->enablemobilewebservice = 1; $CFG->httpswwwroot = str_replace('http:', 'https:', $CFG->httpswwwroot); $service = $DB->get_record('external_services', array('shortname' => MOODLE_OFFICIAL_MOBILE_SERVICE)); $token = external_generate_token_for_current_user($service); $_GET['wstoken'] = $token->token; // Mock parameters. $result = external::get_autologin_key($token->privatetoken); $result = external_api::clean_returnvalue(external::get_autologin_key_returns(), $result); // Mock last time request. $mocktime = time() - 7 * MINSECS; set_user_preference('tool_mobile_autologin_request_last', $mocktime, $USER); $result = external::get_autologin_key($token->privatetoken); $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')); $result = external::get_autologin_key($token->privatetoken); }