Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/kwalleteditor.cpp b/kwalleteditor.cpp
- index 777ce8d..206e9c5 100644
- --- a/kwalleteditor.cpp
- +++ b/kwalleteditor.cpp
- @@ -61,6 +61,110 @@
- #include <KAction>
- #include <KTreeWidgetSearchLine>
- +class ChromiumStreamParser
- +{
- + public:
- + ChromiumStreamParser(const QByteArray& data) :
- + _stream(data)
- + {
- + _stream.setByteOrder(QDataStream::LittleEndian);
- + qDebug() << data.toHex();
- + }
- +
- + QMap<QString, QString> parse()
- + {
- + QMap<QString, QString> map;
- + quint64 length;
- + quint64 count;
- +
- + _stream >> length >> count;
- + if (count > 0xFFFF)
- + {
- + qWarning("More than 0xFFFF passwords in one entry is not supported.");
- + return map;
- + }
- +
- + //return map;
- +
- + for (quint64 i = 0; i < count; ++i)
- + {
- + int scheme;
- + QString originUrl, actionUrl;
- + QString usernameElement, usernameValue;
- + QString passwordElement, passwordValue;
- + QString submitElement;
- + bool sslValid, preferred, blacklistedByUser;
- + qint64 dateCreated;
- +
- + _stream >> scheme;
- + originUrl = readString();
- + actionUrl = readString();
- + usernameElement = readString16();
- + usernameValue = readString16();
- + passwordElement = readString16();
- + passwordValue = readString16();
- + submitElement = readString16();
- + sslValid = readBool();
- + preferred = readBool();
- + blacklistedByUser = readBool();
- + _stream >> dateCreated;
- +
- + map.insert(QString("%1_originUrl").arg(i), originUrl);
- + map.insert(QString("%1_actionUrl").arg(i), actionUrl);
- + map.insert(QString("%1_usernameElement").arg(i), usernameElement);
- + map.insert(QString("%1_usernameValue").arg(i), usernameValue);
- + map.insert(QString("%1_passwordElement").arg(i), passwordElement);
- + map.insert(QString("%1_passwordValue").arg(i), passwordValue);
- + map.insert(QString("%1_submitElement").arg(i), submitElement);
- + map.insert(QString("%1_sslValid").arg(i), sslValid ? i18n("yes") : i18n("no"));
- + map.insert(QString("%1_preferred").arg(i), preferred ? i18n("yes") : i18n("no"));
- + map.insert(QString("%1_blacklistedByUser").arg(i), blacklistedByUser ? i18n("yes") : i18n("no"));
- + map.insert(QString("%1_dateCreated").arg(i), QString::number(dateCreated));
- + }
- +
- + return map;
- + }
- +
- + private:
- + QByteArray readRawData(int bytes)
- + {
- + bytes += (sizeof(int) - (bytes % sizeof(int))) % sizeof(int);
- +
- + QByteArray byteArray(bytes, '\0');
- + _stream.readRawData(byteArray.data(), byteArray.size());
- +
- + return byteArray;
- + }
- +
- + bool readBool()
- + {
- + QByteArray data(readRawData(sizeof(bool)));
- + return data.toInt() != 0;
- + }
- +
- + QString readString()
- + {
- + int length;
- +
- + _stream >> length;
- +
- + return QString::fromLocal8Bit(readRawData(length));
- + }
- +
- + QString readString16()
- + {
- + int length;
- +
- + _stream >> length;
- +
- + QByteArray data(readRawData(length * sizeof(ushort)));
- + return QString::fromUtf16(reinterpret_cast<ushort*>(data.data()), length);
- + }
- +
- + private:
- + QDataStream _stream;
- +};
- +
- KWalletEditor::KWalletEditor(const QString& wallet, bool isPath, QWidget *parent, const char *name)
- : KXmlGuiWindow(parent), _walletName(wallet), _nonLocal(isPath), _displayedItem(0) {
- setObjectName( QLatin1String( name ) );
- @@ -414,7 +518,7 @@ void KWalletEditor::entryEditted() {
- void KWalletEditor::entrySelectionChanged(QTreeWidgetItem *item) {
- // do not forget to save changes
- if ( _ww->_saveChanges->isEnabled() && (_displayedItem != item) ){
- - if ( KMessageBox::Yes == KMessageBox::questionYesNo(this,
- + if ( KMessageBox::Yes == KMessageBox::questionYesNo(this,
- i18n("The contents of the current item has changed.\nDo you want to save changes?"))) {
- saveEntry();
- } else {
- @@ -488,10 +592,28 @@ void KWalletEditor::entrySelectionChanged(QTreeWidgetItem *item) {
- _ww->_entryStack->setCurrentIndex(3);
- QByteArray ba;
- if (_w->readEntry(item->text(0), ba) == 0) {
- - _ww->_entryName->setText(i18n("Binary Data: %1",
- - item->text(0)));
- - _ww->_saveChanges->setEnabled(false);
- - _ww->_undoChanges->setEnabled(false);
- + ChromiumStreamParser chromiumParser(ba);
- + _currentMap = chromiumParser.parse();
- +
- + if (_w->readMap(item->text(0), _currentMap) == 0)
- + {
- + _ww->_entryStack->setCurrentIndex(2);
- + _mapEditorShowHide->setChecked(false);
- + showHideMapEditorValue(false);
- +
- + _mapEditor->reload();
- + _ww->_entryName->setText(i18n("Binary Data: %1", item->text(0)));
- + _ww->_saveChanges->setEnabled(false);
- + _ww->_undoChanges->setEnabled(false);
- + }
- + else
- + {
- + _ww->_entryName->setText(i18n("Binary Data: %1",
- + item->text(0)));
- + _ww->_saveChanges->setEnabled(false);
- + _ww->_undoChanges->setEnabled(false);
- + }
- +
- }
- }
- break;
- @@ -552,7 +674,7 @@ void KWalletEditor::entrySelectionChanged(QTreeWidgetItem *item) {
- _ww->_entryTitle->setText(QString::fromLatin1("<font size=\"+1\">%1</font>").arg(fi->text(0)));
- _ww->_iconTitle->setPixmap(fi->getFolderIcon(KIconLoader::Toolbar));
- }
- -
- +
- _displayedItem = item;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement