in classes/loginflow/rocreds.php [67:135]
public function loginpage_hook(&$frm, &$user) {
global $DB;
if (empty($frm)) {
$frm = data_submitted();
}
if (empty($frm)) {
return true;
}
$username = $frm->username;
$password = $frm->password;
$auth = 'oidc';
$username = $this->check_objects($username);
if ($username !== $frm->username) {
$success = $this->user_login($username, $password);
if ($success === true) {
$existinguser = $DB->get_record('user', ['username' => $username]);
if (!empty($existinguser)) {
$user = $existinguser;
return true;
}
}
}
$autoappend = get_config('auth_oidc', 'autoappend');
if (empty($autoappend)) {
// If we're not doing autoappend, just let things flow naturally.
return true;
}
$existinguser = $DB->get_record('user', ['username' => $username]);
if (!empty($existinguser)) {
// We don't want to prevent access to existing accounts.
return true;
}
$username .= $autoappend;
$success = $this->user_login($username, $password);
if ($success !== true) {
// No o365 user, continue normally.
return false;
}
$existinguser = $DB->get_record('user', ['username' => $username]);
if (!empty($existinguser)) {
$user = $existinguser;
return true;
}
// The user is authenticated but user creation may be disabled.
if (!empty($CFG->authpreventaccountcreation)) {
$failurereason = AUTH_LOGIN_UNAUTHORISED;
// Trigger login failed event.
$event = \core\event\user_login_failed::create(array('other' => array('username' => $username,
'reason' => $failurereason)));
$event->trigger();
debugging('[client '.getremoteaddr()."] $CFG->wwwroot Unknown user, can not create new accounts: $username ".
$_SERVER['HTTP_USER_AGENT']);
return false;
}
$user = create_user_record($username, $password, $auth);
return true;
}