. */ namespace SP\Mgmt\Users; use Plugins\Authenticator\AuthenticatorData; use Plugins\Authenticator\AuthenticatorPlugin; use SP\Bootstrap; use SP\Config\ConfigData; use SP\Core\Exceptions\SPException; use SP\Core\Plugin\PluginUtil; 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 \Psr\Container\NotFoundExceptionInterface * @throws \Psr\Container\ContainerExceptionInterface * @throws \SP\Core\Exceptions\SPException */ public static function migrate() { $Container = Bootstrap::getContainer(); /** @var ConfigData $ConfigData */ $ConfigData = $Container->get(ConfigData::class); /** @var Log $Log */ $Log = $Container->get(Log::class); $LogMessage = $Log->getLogMessage(); $LogMessage->setAction(__FUNCTION__); $LogMessage->addDescription(__('Actualizando preferencias', false)); foreach (User::getItem()->getAll() as $User) { try { $Preferences = $User->getPreferences(); if (!empty($Preferences)) { $LogMessage->addDetails(__('Usuario', false), $User->getLogin()); /** @var UserPreferencesData $Preferences */ $Preferences = Util::unserialize(UserPreferencesData::class, $Preferences, 'SP\UserPreferences'); $User->setPreferences($Preferences); // FIXME $Preferences->setTheme($ConfigData->getSiteTheme()); if ($Preferences->isUse2Fa()) { self::migrateTwoFA($User); $Preferences->setUse2Fa(0); } $Preferences->setUserId($User->getId()); UserPreferences::getItem($Preferences)->update(); } } 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 */ protected static function migrateTwoFA(UserData $UserData) { PluginUtil::loadPlugins(); /** @var AuthenticatorData $AuthenticatorData */ $AuthenticatorData = new AuthenticatorData(); $AuthenticatorData->setUserId($UserData->getId()); $AuthenticatorData->setIV(UserPass::getUserIVById($UserData->getId())); $AuthenticatorData->setTwofaEnabled(1); $AuthenticatorData->setDate(time()); $data[$UserData->getId()] = $AuthenticatorData; $PluginData = new PluginData(); $PluginData->setName(AuthenticatorPlugin::PLUGIN_NAME); $PluginData->setEnabled(1); $PluginData->setData(serialize($data)); Plugin::getItem($PluginData)->update(); } }