. * */ namespace SP\Import; use SimpleXMLElement; use SP\DataModel\AccountData; use SP\Core\Crypt; use SP\Core\Exceptions\SPException; defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); /** * Esta clase es la encargada de importar cuentas desde KeePassX */ class KeepassXImport extends XmlImportBase { /** * @var int */ private $customerId = 0; /** * @var int */ private $categoryId = 0; /** * Iniciar la importación desde KeePassX. * * @throws \SP\Core\Exceptions\SPException * @return bool */ public function doImport() { $this->setCustomerName('KeePassX'); $this->customerId = $this->addCustomer(); self::processCategories($this->xml); } /** * Obtener los grupos y procesar lan entradas de KeePass. * * @param SimpleXMLElement $xml con objeto XML del archivo de KeePass */ protected function processCategories(SimpleXMLElement $xml) { foreach ($xml as $node) { if ($node->group) { foreach ($node->group as $group) { // Analizar grupo if ($node->group->entry) { // Crear la categoría $this->setCategoryName($group->title); $this->categoryId = $this->addCategory(); // Crear cuentas $this->processAccounts($group->entry); } if ($group->group) { // Analizar subgrupo $this->processCategories($group); } } } if ($node->entry) { // Crear la categoría $this->setCategoryName($node->title); $this->categoryId = $this->addCategory(); // Crear cuentas $this->processAccounts($node->entry); } } } /** * Obtener los datos de las entradas de KeePass. * * @param SimpleXMLElement $entries El objeto XML con las entradas */ protected function processAccounts(SimpleXMLElement $entries) { foreach ($entries as $entry) { $notes = (isset($entry->comment)) ? (string)$entry->comment : ''; $password = (isset($entry->password)) ? (string)$entry->password : ''; $name = (isset($entry->title)) ? (string)$entry->title : ''; $url = (isset($entry->url)) ? (string)$entry->url : ''; $username = (isset($entry->username)) ? (string)$entry->username : ''; $passData = Crypt::encryptData($password); $AccountData = new AccountData(); $AccountData->setAccountPass($passData['data']); $AccountData->setAccountIV($passData['iv']); $AccountData->setAccountNotes($notes); $AccountData->setAccountName($name); $AccountData->setAccountUrl($url); $AccountData->setAccountLogin($username); $AccountData->setAccountCustomerId($this->customerId); $AccountData->setAccountCategoryId($this->categoryId); $this->addAccount($AccountData); } } }