. * */ namespace SP; defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo')); /** * Esta clase es la encargada de importar cuentas desde KeePass */ class KeepassImport extends XmlImportBase { /** * Iniciar la importación desde KeePass */ public function doImport() { $this->setCustomerName('KeePass'); $this->setCustomerId($this->addCustomer()); $this->processCategories($this->_xml->Root->Group); } /** * Obtener los grupos y procesar lan entradas de KeePass. * * @param \SimpleXMLElement $xml El 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->Name); $this->setCategoryId($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->Name); $this->setCategoryId($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) { foreach ($entry->String as $account) { $value = (isset($account->Value)) ? (string)$account->Value : ''; switch ($account->Key) { case 'Notes': $this->setAccountNotes($value); break; case 'Password': $passData = Crypt::encryptData($value); $this->setAccountPass($passData['data']); $this->setAccountPassIV($passData['iv']); break; case 'Title': $this->setAccountName($value); break; case 'URL': $this->setAccountUrl($value); break; case 'UserName': $this->setAccountLogin($value); break; } } $this->addAccount(); } } }