. */ namespace SP\Mgmt\Users; use Plugins\Authenticator\AuthenticatorData; use Plugins\Authenticator\AuthenticatorPlugin; use SP\Config\Config; use SP\Core\Exceptions\SPException; use SP\Core\Init; use SP\DataModel\PluginData; use SP\DataModel\UserData; use SP\DataModel\UserPreferencesData; use SP\Log\Log; use SP\Mgmt\Plugins\Plugin; use SP\Util\Util; /** * Class UserPreferencesUtil * * @package SP\Mgmt\Users */ class UserPreferencesUtil { /** * Migrar las preferencias * * @return bool * @throws \SP\Core\Exceptions\SPException * @throws \SP\Core\Exceptions\InvalidClassException * @throws \InvalidArgumentException */ public static function migrate() { $Log = new Log(); $LogMessage = $Log->getLogMessage(); $LogMessage->setAction(__FUNCTION__); $LogMessage->addDescription(__('Actualizando preferencias', false)); foreach (User::getItem()->getAll() as $User) { try { $Preferences = $User->getUserPreferences(); if (!empty($Preferences)) { $LogMessage->addDetails(__('Usuario', false), $User->getUserLogin()); /** @var UserPreferencesData $Preferences */ $Preferences = Util::castToClass(UserPreferencesData::class, $Preferences, 'SP\UserPreferences'); $User->setUserPreferences($Preferences); $Preferences->setTheme(Config::getConfig()->getSiteTheme()); if ($Preferences->isUse2Fa()) { self::migrateTwoFA($User); } } } catch (SPException $e) { $LogMessage->addDescription($e->getMessage()); $Log->setLogLevel(Log::ERROR); $Log->writeLog(); } } $LogMessage->addDescription(__('Preferencias actualizadas', false)); $Log->writeLog(); return true; } /** * Migrar la función de 2FA a plugin Authenticator * * @param UserData $UserData * @throws \SP\Core\Exceptions\SPException * @throws \SP\Core\Exceptions\InvalidClassException * @throws \InvalidArgumentException */ protected static function migrateTwoFA(UserData $UserData) { Init::loadPlugins(); /** @var AuthenticatorData $AuthenticatorData */ $AuthenticatorData = new AuthenticatorData(); $AuthenticatorData->setUserId($UserData->getUserId()); $AuthenticatorData->setIV(UserPass::getUserIVById($UserData->getId())); $AuthenticatorData->setTwofaEnabled(1); $AuthenticatorData->setDate(time()); $data[$UserData->getUserId()] = $AuthenticatorData; $PluginData = new PluginData(); $PluginData->setPluginName(AuthenticatorPlugin::PLUGIN_NAME); $PluginData->setPluginEnabled(1); $PluginData->setPluginData(serialize($data)); Plugin::getItem($PluginData)->update(); $UserPreferences = $UserData->getUserPreferences(); $UserPreferences->setUse2Fa(0); $UserPreferences->setUserId($UserData->getUserId()); UserPreferences::getItem($UserPreferences)->update(); } }