General 48 group title 3 group title 48 title username password 0 2009-03-04T18:03:12 2009-03-04T18:03:40 2009-03-04T18:03:40 Never **/ /** * keepassx dom document * * @project keepassx * * @todo add correct doctype to document */ class KeepassXDbDoc extends DOMDocument { /** * @var DOMElement */ protected $db; public function __construct() { parent::__construct(); $this->registerNodeClass('DOMElement', 'KeepassXGroup'); // $this->doctype = DOMImplementation::createDocumentType('KEEPASSX_DATABASE'); $db = $this->createElement('database'); $this->appendChild($db); $this->db = $db; } public function addGroup($title) { $element = $this->createElement('group'); $this->db->appendChild($element); $element->setTitle($title); return $element; } } // end KeepassXDbDoc /** * keepassx dom element for adding a group * * @project keepassx */ class KeepassXGroup extends DOMElement { public function setTitle($title) { $element = new DOMElement('title', $title); $this->appendChild($element); } public function addGroup($title) { $class = __CLASS__; $element = new $class('group'); $this->appendChild($element); $element->setTitle($title); return $element; } public function addEntry($title, $username, $password, $url = null, $comment = null, $creation = null, $last_access = null, $last_mod = null, $expire = null) { $entry = new KeepassXEntry('entry'); $this->appendChild($entry); $entry->setTitle($title); $entry->setUsername($username); $entry->setPassword($password); $entry->setUrl($url); $entry->setComment($comment); $entry->setCreation($creation); $entry->setLastAccess($last_access); $entry->setLastMod($last_mod); $entry->setExpire($expire); return $entry; } } /** * keepassx dom element for adding an entry * * @project keepassx */ class KeepassXEntry extends DOMElement { public function setTitle($title) { $element = new DOMElement('title', $this->ampersandify($title)); $this->appendChild($element); return $element; } public function setUsername($username) { $element = new DOMElement('username', $this->ampersandify($username)); $this->appendChild($element); return $element; } public function setPassword($password) { $element = new DOMElement('password', $this->ampersandify($password)); $this->appendChild($element); return $element; } public function setUrl($url = null) { $element = new DOMElement('url', $this->ampersandify($url)); $this->appendChild($element); return $element; } public function setComment($comment = null) { $element = new DOMElement('comment', $this->ampersandify($comment)); $this->appendChild($element); return $element; } public function setCreation($timestamp = null) { $element = new DOMElement('creation', $this->formatDate($timestamp)); $this->appendChild($element); return $element; } public function setLastAccess($timestamp = null) { $element = new DOMElement('lastaccess', $this->formatDate($timestamp)); $this->appendChild($element); return $element; } public function setLastMod($timestamp = null) { $element = new DOMElement('lastmod', $this->formatDate($timestamp)); $this->appendChild($element); return $element; } public function setExpire($timestamp = null) { $element = new DOMElement('expire', $this->formatDate($timestamp)); $this->appendChild($element); return $element; } /** * Replaces ampersands with html entity * * @param string $message * @return string */ protected function ampersandify($message) { return preg_replace('/&(?!#?\w+;)/', '&', $message); } // end function ampersandify() protected function formatDate($timestamp = null) { $return_val = 'Never'; if (isset($timestamp)) { $return_val = date('c', $timestamp); } return $return_val; } } /** Converts a CSV file exported from pwmanager to keepassx format **/ $fh = fopen('php://stdin', 'r'); $prev_group = null; $kpx = new KeepassXDbDoc(); $group = null; while (($i = fgetcsv($fh)) !== false) { $entry = array( 'group' => $i[0], 'title' => $i[2], 'username' => $i[3], 'password' => $i[4], 'url' => $i[5], 'comment' => $i[7], ); if ($prev_group != $entry['group']) { $group = $kpx->addGroup($entry['group']); $prev_group = $entry['group']; } $group->addEntry($entry['title'], $entry['username'], $entry['password'], $entry['url'], $entry['comment']); } require_once 'XML/Beautifier.php'; $xb = new XML_Beautifier(); echo $xb->formatString($kpx->saveXML());