aboutsummaryrefslogtreecommitdiffstats
path: root/keyserverimportdialog.cpp
diff options
context:
space:
mode:
authornils <nils@34ebc366-c3a9-4b3c-9f84-69acf7962910>2011-03-12 00:54:11 +0000
committernils <nils@34ebc366-c3a9-4b3c-9f84-69acf7962910>2011-03-12 00:54:11 +0000
commitf8b267c2c2f5dbe5f4a8bfdf352e2e664a52bac5 (patch)
treec14e2d5075305d9c0efa21d984c37ebade635612 /keyserverimportdialog.cpp
parentupdated spanish translation (diff)
downloadgpg4usb-f8b267c2c2f5dbe5f4a8bfdf352e2e664a52bac5.tar.gz
gpg4usb-f8b267c2c2f5dbe5f4a8bfdf352e2e664a52bac5.zip
added import key from keyserver dialog
git-svn-id: http://cpunk.de/svn/src/gpg4usb/trunk@480 34ebc366-c3a9-4b3c-9f84-69acf7962910
Diffstat (limited to 'keyserverimportdialog.cpp')
-rw-r--r--keyserverimportdialog.cpp246
1 files changed, 246 insertions, 0 deletions
diff --git a/keyserverimportdialog.cpp b/keyserverimportdialog.cpp
new file mode 100644
index 0000000..76906f2
--- /dev/null
+++ b/keyserverimportdialog.cpp
@@ -0,0 +1,246 @@
+/*
+ *
+ * keyserverimportdialog.cpp
+ *
+ * Copyright 2008 gpg4usb-team <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QtGui>
+#include <QtNetwork>
+
+#include "keyserverimportdialog.h"
+
+KeyServerImportDialog::KeyServerImportDialog(QWidget *parent)
+ : QDialog(parent)
+{
+ //text = new QString();
+
+ closeButton = createButton(tr("&Close"), SLOT(close()));
+ importButton = createButton(tr("&Import"), SLOT(import()));
+ searchButton = createButton(tr("&Search"), SLOT(search()));
+ searchLineEdit = new QLineEdit();
+ keyServerComboBox = createComboBox("http://pgp.mit.edu");
+
+ searchLabel = new QLabel(tr("Seacrh string:"));
+ keyServerLabel = new QLabel(tr("Keyserver:"));
+ message = new QLabel;
+
+ createKeysTree();
+
+ QHBoxLayout *buttonsLayout = new QHBoxLayout;
+ buttonsLayout->addStretch();
+ buttonsLayout->addWidget(importButton);
+ buttonsLayout->addWidget(closeButton);
+
+ QGridLayout *mainLayout = new QGridLayout;
+ mainLayout->addWidget(searchLabel, 1, 0);
+ mainLayout->addWidget(searchLineEdit, 1, 1);
+ mainLayout->addWidget(searchButton,1, 2);
+ mainLayout->addWidget(keyServerLabel, 2, 0);
+ mainLayout->addWidget(keyServerComboBox, 2, 1);
+ mainLayout->addWidget(keysTree, 3, 0, 1, 3);
+ mainLayout->addWidget(message, 4, 0, 1, 3);
+ mainLayout->addLayout(buttonsLayout, 5, 0, 1, 3);
+ setLayout(mainLayout);
+
+ setWindowTitle(tr("Import Keys from Keyserver"));
+ resize(700, 300);
+}
+
+static void updateComboBox(QComboBox *comboBox)
+{
+ if (comboBox->findText(comboBox->currentText()) == -1)
+ comboBox->addItem(comboBox->currentText());
+}
+
+void KeyServerImportDialog::import()
+{
+ updateComboBox(keyServerComboBox);
+ message->setText("hallo");
+ message->setAutoFillBackground(true);
+ QPalette filesFoundPalette = message->palette();
+ filesFoundPalette.setColor(QPalette::Background, "#20ff20");
+ message->setPalette(filesFoundPalette);
+}
+
+void KeyServerImportDialog::showKeys(const QStringList &keys)
+{
+ /*for (int i = 0; i < keys.size(); ++i) {
+ QFile file(currentDir.absoluteFilePath(keys[i]));
+ qint64 size = QFileInfo(file).size();
+
+ QTableWidgetItem *fileNameItem = new QTableWidgetItem(keys[i]);
+ fileNameItem->setFlags(fileNameItem->flags() ^ Qt::ItemIsEditable);
+ QTableWidgetItem *sizeItem = new QTableWidgetItem(tr("%1 KB")
+ .arg(int((size + 1023) / 1024)));
+ sizeItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
+ sizeItem->setFlags(sizeItem->flags() ^ Qt::ItemIsEditable);
+
+ int row = keysTree->rowCount();
+ keysTree->insertRow(row);
+ keysTree->setItem(row, 0, fileNameItem);
+ keysTree->setItem(row, 1, sizeItem);
+ }
+ message->setText(tr("%1 key(s) found").arg(keys.size()) +
+ (" (Double click on a key to import it)"));*/
+}
+
+QPushButton *KeyServerImportDialog::createButton(const QString &text, const char *member)
+{
+ QPushButton *button = new QPushButton(text);
+ connect(button, SIGNAL(clicked()), this, member);
+ return button;
+}
+
+QComboBox *KeyServerImportDialog::createComboBox(const QString &text)
+{
+ QComboBox *comboBox = new QComboBox;
+ comboBox->setEditable(true);
+ comboBox->addItem(text);
+ comboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+ return comboBox;
+}
+
+void KeyServerImportDialog::createKeysTree()
+{
+ keysTree = new QTreeWidget();
+ keysTree->setColumnCount(2);
+
+ QStringList labels;
+ labels << tr("KeyID") << tr("UID");
+ keysTree->setHeaderLabels(labels);
+ /*keysTree->setSelectionBehavior(QAbstractItemView::SelectRows);
+ keysTree->setHorizontalHeaderLabels(labels);
+ keysTree->horizontalHeader()->setResizeMode(0, QHeaderView::Stretch);
+ keysTree->verticalHeader()->hide();
+ keysTree->setShowGrid(false);*/
+
+ //connect(keysTree, SIGNAL(cellActivated(int,int)),
+ // this, SLOT(importKeyOfItem(int,int)));
+}
+
+void KeyServerImportDialog::importKeyOfItem(int row, int /* column */)
+{
+ /*QTableWidgetItem *item = keysTree->item(row, 0);
+ QDesktopServices::openUrl(QUrl::fromLocalFile(currentDir.absoluteFilePath(item->text())));
+ */
+}
+
+/*
+ * newly added
+ */
+void KeyServerImportDialog::search()
+{
+ QString keyserver = keyServerComboBox->currentText();
+ QString searchstring = searchLineEdit->text();
+
+ QUrl url = keyserver+":11371/pks/lookup?search="+searchstring+"&op=index&options=mr";
+ reply = qnam.get(QNetworkRequest(url));
+ qDebug() << "error while download";
+ connect(reply, SIGNAL(finished()),
+ this, SLOT(searchFinished()));
+ qDebug() << "error while download";
+}
+
+void KeyServerImportDialog::setMessage(const QString &text, int type)
+{
+
+}
+
+void KeyServerImportDialog::searchFinished()
+{
+ QString firstLine = QString(reply->readLine(1024));
+
+ QVariant redirectionTarget = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
+ if (reply->error()) {
+ message->setAutoFillBackground(true);
+ QPalette filesFoundPalette = message->palette();
+ filesFoundPalette.setColor(QPalette::Background, "#20ff20");
+ message->setPalette(filesFoundPalette);
+ message->setText("Error while contacting keyserver!");
+ } else {
+ qDebug() << "downloaded";
+ }
+
+ if (firstLine.contains("Error"))
+ {
+ QString text= QString(reply->readLine(1024));
+
+ if (text.contains("Too many responses")) {
+ message->setAutoFillBackground(true);
+ QPalette filesFoundPalette = message->palette();
+ filesFoundPalette.setColor(QPalette::Background, "#20ff20");
+ message->setPalette(filesFoundPalette);
+ message->setText("Too many responses from keyserver!");
+ qDebug() << "Too many responses";
+ }
+ if (text.contains("No keys found")) {
+ message->setAutoFillBackground(true);
+ QPalette filesFoundPalette = message->palette();
+ filesFoundPalette.setColor(QPalette::Background, "#20ff20");
+ message->setPalette(filesFoundPalette);
+ message->setText("No keys found containing the search string!");
+ qDebug() << "No keys found";
+ }
+ } else {
+ char buff[1024];
+ QList <QTreeWidgetItem*> items;
+ while (reply->readLine(buff,sizeof(buff)) !=-1) {
+ QStringList line= QString(buff).split(":");
+ qDebug() << line;
+ if (line[0] == "pub") {
+ QStringList line2 = QString(reply->readLine()).split(":");
+ QStringList l;
+ l << line[1] << line2[1];
+ qDebug() << "l:" << l;
+ items.append(new QTreeWidgetItem((QTreeWidget*) 0,l));
+
+// keysTree->insertTopLevelItem(parentItem);
+
+ } else {
+ if (line[0] == "uid") {
+ QStringList l;
+ l << "" << line[1];
+ items.last()->addChild(new QTreeWidgetItem((QTreeWidget*) 0, l));
+ }
+ }
+
+ }
+ qDebug() << items.size();
+ keysTree->insertTopLevelItems(0,items);
+ }
+ reply->deleteLater();
+ reply = 0;
+
+ //qDebug() << *text;
+ // TODO linebreak OS-unabhängig machen
+ //QStringList zeilen = QString( *text ).split('\n');
+
+ //qDebug() << zeilen.count();
+ // use this line to get the key, if get request with keyid is sent
+ //QString key = zeilen[3];
+ /* int count=-1;
+ foreach (QString zeile, zeilen) {
+ count++;
+ if (zeile.startsWith("pub:",Qt::CaseSensitive)) {
+ qDebug() << "pub";
+ }
+ qDebug() << zeile;
+ }*/
+}
+