/** * Set users' fields from SAML attributes. * If the user does not exist in the MediaWiki database, * it is created. wgSamlCreateUser is not respected. * * @param User $user the user * @param string[][] $attr SAML attributes */ protected static function updateUser(User $user, $attr) { global $wgSamlRealnameAttr; global $wgSamlUsernameAttr; global $wgSamlMailAttr; global $wgContLang; $changed = false; if (isset($wgSamlRealnameAttr) && isset($attr[$wgSamlRealnameAttr]) && $attr[$wgSamlRealnameAttr] && $user->getRealName() !== reset($attr[$wgSamlRealnameAttr])) { $changed = true; $user->setRealName(reset($attr[$wgSamlRealnameAttr])); } if ($attr[$wgSamlMailAttr] && $user->getEmail() !== reset($attr[$wgSamlMailAttr])) { $changed = true; $user->setEmail(reset($attr[$wgSamlMailAttr])); $user->ConfirmEmail(); } if (!$user->getId()) { $user->setName($wgContLang->ucfirst(reset($attr[$wgSamlUsernameAttr]))); $user->setPassword(null); // prevent manual login until reset $user->addToDatabase(); } elseif ($changed) { $user->saveSettings(); } }