[SCM] kdeconnect packaging branch, master, updated. debian/0.9g-1-1183-g9d69498

Maximiliano Curia maxy at moszumanska.debian.org
Fri Oct 14 14:28:44 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/kdeconnect.git;a=commitdiff;h=0c110e4

The following commit has been merged in the master branch:
commit 0c110e4392be3646ba7a6c03afaaad21a8237eef
Author: Vineet Garg <grg.vineet at gmail.com>
Date:   Mon Jul 6 02:35:26 2015 +0530

    Added SSL encryption in file upload
    DeviceId is used for peerVerifyName
---
 core/backends/lan/landevicelink.cpp   | 22 ++++++++++++++++------
 core/backends/lan/lanlinkprovider.cpp |  6 ++----
 core/backends/lan/uploadjob.cpp       | 30 ++++++++++++++++++++----------
 core/backends/lan/uploadjob.h         | 13 +++++++------
 4 files changed, 45 insertions(+), 26 deletions(-)

diff --git a/core/backends/lan/landevicelink.cpp b/core/backends/lan/landevicelink.cpp
index c728fe0..f145382 100644
--- a/core/backends/lan/landevicelink.cpp
+++ b/core/backends/lan/landevicelink.cpp
@@ -57,9 +57,14 @@ void LanDeviceLink::setOnSsl(bool value) {
 bool LanDeviceLink::sendPackageEncrypted(QCA::PublicKey& key, NetworkPackage& np)
 {
     if (np.hasPayload()) {
-         UploadJob* job = new UploadJob(np.payload());
-         job->start();
-         np.setPayloadTransferInfo(job->getTransferInfo());
+        QVariantMap sslInfo;
+        if (onSsl) {
+            sslInfo.insert("useSsl", true);
+            sslInfo.insert("deviceId", deviceId());
+        }
+        UploadJob* job = new UploadJob(np.payload(), sslInfo);
+        job->start();
+        np.setPayloadTransferInfo(job->getTransferInfo());
     }
 
     if (!onSsl) {
@@ -77,9 +82,14 @@ bool LanDeviceLink::sendPackageEncrypted(QCA::PublicKey& key, NetworkPackage& np
 bool LanDeviceLink::sendPackage(NetworkPackage& np)
 {
     if (np.hasPayload()) {
-         UploadJob* job = new UploadJob(np.payload());
-         job->start();
-         np.setPayloadTransferInfo(job->getTransferInfo());
+        QVariantMap sslInfo;
+        if (onSsl) {
+            sslInfo.insert("useSsl", true);
+            sslInfo.insert("deviceId", deviceId());
+        }
+        UploadJob* job = new UploadJob(np.payload(), sslInfo);
+        job->start();
+        np.setPayloadTransferInfo(job->getTransferInfo());
     }
 
     int written = mSocketLineReader->write(np.serialize());
diff --git a/core/backends/lan/lanlinkprovider.cpp b/core/backends/lan/lanlinkprovider.cpp
index f7c8fb0..6f0b33e 100644
--- a/core/backends/lan/lanlinkprovider.cpp
+++ b/core/backends/lan/lanlinkprovider.cpp
@@ -204,8 +204,7 @@ void LanLinkProvider::connected()
 
             bool isDeviceTrusted = KdeConnectConfig::instance()->trustedDevices().contains(deviceId);
 
-            //TODO : Change it too device id from received package, also correct it on Android side
-            socket->setPeerVerifyName("Vineet Garg");
+            socket->setPeerVerifyName(receivedPackage->get<QString>("deviceId"));
 
             if (isDeviceTrusted) {
                 qDebug() << "Device trusted";
@@ -340,8 +339,7 @@ void LanLinkProvider::dataReceived()
 
         bool isDeviceTrusted = KdeConnectConfig::instance()->trustedDevices().contains(deviceId);
 
-        // TODO : Change it to device id of remote device, correct it on Android side too, certificate name is not set there
-        socket->setPeerVerifyName("Vineet Garg");
+        socket->setPeerVerifyName(np->get<QString>("deviceId"));
 
         if (isDeviceTrusted) {
             qDebug() << "Device trusted";
diff --git a/core/backends/lan/uploadjob.cpp b/core/backends/lan/uploadjob.cpp
index b0d35fc..6accc7f 100644
--- a/core/backends/lan/uploadjob.cpp
+++ b/core/backends/lan/uploadjob.cpp
@@ -20,17 +20,21 @@
 
 #include <qalgorithms.h>
 #include <QtGlobal>
+#include <kdeconnectconfig.h>
 
 #include "uploadjob.h"
 #include "core_debug.h"
 
-UploadJob::UploadJob(const QSharedPointer<QIODevice>& source): KJob()
+UploadJob::UploadJob(const QSharedPointer<QIODevice>& source, QVariantMap sslInfo): KJob()
 {
     mInput = source;
-    mServer = new QTcpServer(this);
+    mServer = new Server(this);
     mSocket = 0;
     mPort = 0;
 
+    // We will use this info if link is on ssl, to send encrypted payload
+    this->sslInfo = sslInfo;
+
     connect(mInput.data(), SIGNAL(readyRead()), this, SLOT(readyRead()));
     connect(mInput.data(), SIGNAL(aboutToClose()), this, SLOT(aboutToClose()));
 }
@@ -46,27 +50,33 @@ void UploadJob::start()
             return;
         }
     }
-    connect(mServer, SIGNAL(newConnection()), this, SLOT(newConnection()));
+    connect(mServer, SIGNAL(newConnection(QSslSocket*)), this, SLOT(newConnection(QSslSocket*)));
 }
 
-void UploadJob::newConnection()
+void UploadJob::newConnection(QSslSocket* socket)
 {
-
-    if (mSocket || !mServer->hasPendingConnections()) return;
-
     if (!mInput->open(QIODevice::ReadOnly)) {
         qWarning() << "error when opening the input to upload";
         return; //TODO: Handle error, clean up...
     }
 
-    mSocket = mServer->nextPendingConnection();
+    mSocket = socket;
+
+    if (sslInfo.value("useSsl", false).toBool()) {
+        mSocket->setLocalCertificate(KdeConnectConfig::instance()->certificate());
+        mSocket->setPrivateKey(KdeConnectConfig::instance()->privateKeyPath());
+        mSocket->setProtocol(QSsl::TlsV1_2);
+        mSocket->setPeerVerifyName(sslInfo.value("deviceId").toString());
+        mSocket->addCaCertificate(QSslCertificate(KdeConnectConfig::instance()->getTrustedDevice(sslInfo.value("deviceId").toString()).certificate.toLatin1()));
+        mSocket->startServerEncryption();
+        mSocket->waitForEncrypted();
+    }
+
     readyRead();
 }
 
 void UploadJob::readyRead()
 {
-    //TODO: Implement payload encryption
-
     while ( mInput->bytesAvailable() > 0 )
     {
         qint64 bytes = qMin(mInput->bytesAvailable(), (qint64)4096);
diff --git a/core/backends/lan/uploadjob.h b/core/backends/lan/uploadjob.h
index 12b6f7e..e7fd833 100644
--- a/core/backends/lan/uploadjob.h
+++ b/core/backends/lan/uploadjob.h
@@ -25,28 +25,29 @@
 
 #include <QIODevice>
 #include <QVariantMap>
-#include <QTcpServer>
-#include <QTcpSocket>
 #include <QSharedPointer>
+#include <QSslSocket>
+#include "server.h"
 
 class UploadJob
     : public KJob
 {
     Q_OBJECT
 public:
-    UploadJob(const QSharedPointer<QIODevice>& source);
+    UploadJob(const QSharedPointer<QIODevice>& source, QVariantMap sslInfo);
     virtual void start();
     QVariantMap getTransferInfo();
 
 private:
     QSharedPointer<QIODevice> mInput;
-    QTcpServer* mServer;
-    QTcpSocket* mSocket;
+    Server* mServer;
+    QSslSocket* mSocket;
     quint16 mPort;
+    QVariantMap sslInfo;
 
 private Q_SLOTS:
     void readyRead();
-    void newConnection();
+    void newConnection(QSslSocket*);
     void aboutToClose();
 };
 

-- 
kdeconnect packaging



More information about the pkg-kde-commits mailing list