Advertisement
Guest User

Untitled

a guest
Mar 14th, 2012
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 5.24 KB | None | 0 0
  1. diff --git a/kwalleteditor.cpp b/kwalleteditor.cpp
  2. index 777ce8d..206e9c5 100644
  3. --- a/kwalleteditor.cpp
  4. +++ b/kwalleteditor.cpp
  5. @@ -61,6 +61,110 @@
  6.  #include <KAction>
  7.  #include <KTreeWidgetSearchLine>
  8.  
  9. +class ChromiumStreamParser
  10. +{
  11. +   public:
  12. +       ChromiumStreamParser(const QByteArray& data) :
  13. +           _stream(data)
  14. +       {
  15. +           _stream.setByteOrder(QDataStream::LittleEndian);
  16. +           qDebug() << data.toHex();
  17. +       }
  18. +
  19. +       QMap<QString, QString> parse()
  20. +       {
  21. +           QMap<QString, QString> map;
  22. +           quint64 length;
  23. +           quint64 count;
  24. +
  25. +           _stream >> length >> count;
  26. +           if (count > 0xFFFF)
  27. +           {
  28. +               qWarning("More than 0xFFFF passwords in one entry is not supported.");
  29. +               return map;
  30. +           }
  31. +
  32. +           //return map;
  33. +
  34. +           for (quint64 i = 0; i < count; ++i)
  35. +           {
  36. +               int scheme;
  37. +               QString originUrl, actionUrl;
  38. +               QString usernameElement, usernameValue;
  39. +               QString passwordElement, passwordValue;
  40. +               QString submitElement;
  41. +               bool sslValid, preferred, blacklistedByUser;
  42. +               qint64 dateCreated;
  43. +
  44. +               _stream >> scheme;
  45. +               originUrl = readString();
  46. +               actionUrl = readString();
  47. +               usernameElement = readString16();
  48. +               usernameValue = readString16();
  49. +               passwordElement = readString16();
  50. +               passwordValue = readString16();
  51. +               submitElement = readString16();
  52. +               sslValid = readBool();
  53. +               preferred = readBool();
  54. +               blacklistedByUser = readBool();
  55. +               _stream >> dateCreated;
  56. +
  57. +               map.insert(QString("%1_originUrl").arg(i), originUrl);
  58. +               map.insert(QString("%1_actionUrl").arg(i), actionUrl);
  59. +               map.insert(QString("%1_usernameElement").arg(i), usernameElement);
  60. +               map.insert(QString("%1_usernameValue").arg(i), usernameValue);
  61. +               map.insert(QString("%1_passwordElement").arg(i), passwordElement);
  62. +               map.insert(QString("%1_passwordValue").arg(i), passwordValue);
  63. +               map.insert(QString("%1_submitElement").arg(i), submitElement);
  64. +               map.insert(QString("%1_sslValid").arg(i), sslValid ? i18n("yes") : i18n("no"));
  65. +               map.insert(QString("%1_preferred").arg(i), preferred ? i18n("yes") : i18n("no"));
  66. +               map.insert(QString("%1_blacklistedByUser").arg(i), blacklistedByUser ? i18n("yes") : i18n("no"));
  67. +               map.insert(QString("%1_dateCreated").arg(i), QString::number(dateCreated));
  68. +           }
  69. +
  70. +           return map;
  71. +       }
  72. +
  73. +   private:
  74. +       QByteArray readRawData(int bytes)
  75. +       {
  76. +           bytes += (sizeof(int) - (bytes % sizeof(int))) % sizeof(int);
  77. +
  78. +           QByteArray byteArray(bytes, '\0');
  79. +           _stream.readRawData(byteArray.data(), byteArray.size());
  80. +
  81. +           return byteArray;
  82. +       }
  83. +
  84. +       bool readBool()
  85. +       {
  86. +           QByteArray data(readRawData(sizeof(bool)));
  87. +           return data.toInt() != 0;
  88. +       }
  89. +
  90. +       QString readString()
  91. +       {
  92. +           int length;
  93. +
  94. +           _stream >> length;
  95. +
  96. +           return QString::fromLocal8Bit(readRawData(length));
  97. +       }
  98. +
  99. +       QString readString16()
  100. +       {
  101. +           int length;
  102. +
  103. +           _stream >> length;
  104. +
  105. +           QByteArray data(readRawData(length * sizeof(ushort)));
  106. +           return QString::fromUtf16(reinterpret_cast<ushort*>(data.data()), length);
  107. +       }
  108. +
  109. +   private:
  110. +       QDataStream _stream;
  111. +};
  112. +
  113.  KWalletEditor::KWalletEditor(const QString& wallet, bool isPath, QWidget *parent, const char *name)
  114.  : KXmlGuiWindow(parent), _walletName(wallet), _nonLocal(isPath), _displayedItem(0)  {
  115.     setObjectName( QLatin1String( name ) );
  116. @@ -414,7 +518,7 @@ void KWalletEditor::entryEditted() {
  117.  void KWalletEditor::entrySelectionChanged(QTreeWidgetItem *item) {
  118.      // do not forget to save changes
  119.      if ( _ww->_saveChanges->isEnabled() && (_displayedItem != item) ){
  120. -        if ( KMessageBox::Yes ==  KMessageBox::questionYesNo(this,
  121. +        if ( KMessageBox::Yes ==  KMessageBox::questionYesNo(this,
  122.                                              i18n("The contents of the current item has changed.\nDo you want to save changes?"))) {
  123.              saveEntry();
  124.          } else {
  125. @@ -488,10 +592,28 @@ void KWalletEditor::entrySelectionChanged(QTreeWidgetItem *item) {
  126.                     _ww->_entryStack->setCurrentIndex(3);
  127.                     QByteArray ba;
  128.                     if (_w->readEntry(item->text(0), ba) == 0) {
  129. -                       _ww->_entryName->setText(i18n("Binary Data: %1",
  130. -                               item->text(0)));
  131. -                       _ww->_saveChanges->setEnabled(false);
  132. -                       _ww->_undoChanges->setEnabled(false);
  133. +                       ChromiumStreamParser chromiumParser(ba);
  134. +                       _currentMap = chromiumParser.parse();
  135. +
  136. +                       if (_w->readMap(item->text(0), _currentMap) == 0)
  137. +                       {
  138. +                           _ww->_entryStack->setCurrentIndex(2);
  139. +                           _mapEditorShowHide->setChecked(false);
  140. +                           showHideMapEditorValue(false);
  141. +
  142. +                           _mapEditor->reload();
  143. +                           _ww->_entryName->setText(i18n("Binary Data: %1", item->text(0)));
  144. +                           _ww->_saveChanges->setEnabled(false);
  145. +                           _ww->_undoChanges->setEnabled(false);
  146. +                       }
  147. +                       else
  148. +                       {
  149. +                           _ww->_entryName->setText(i18n("Binary Data: %1",
  150. +                                   item->text(0)));
  151. +                           _ww->_saveChanges->setEnabled(false);
  152. +                           _ww->_undoChanges->setEnabled(false);
  153. +                       }
  154. +
  155.                     }
  156.                 }
  157.                 break;
  158. @@ -552,7 +674,7 @@ void KWalletEditor::entrySelectionChanged(QTreeWidgetItem *item) {
  159.         _ww->_entryTitle->setText(QString::fromLatin1("<font size=\"+1\">%1</font>").arg(fi->text(0)));
  160.         _ww->_iconTitle->setPixmap(fi->getFolderIcon(KIconLoader::Toolbar));
  161.     }
  162. -  
  163. +
  164.     _displayedItem = item;
  165.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement