]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
backup private key early
authorMatthieu Gallien <matthieu.gallien@nextcloud.com>
Fri, 7 Apr 2023 14:24:57 +0000 (16:24 +0200)
committerMatthieu Gallien <matthieu_gallien@yahoo.fr>
Fri, 30 Jun 2023 13:32:03 +0000 (15:32 +0200)
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
src/libsync/clientsideencryption.cpp
src/libsync/clientsideencryption.h

index 5889ef94d364b26ede6edecb8220c81365c18bf1..f8c4243b0c2ec7871ade217cef72f852e9f4c6cc 100644 (file)
@@ -1292,6 +1292,9 @@ void ClientSideEncryption::generateCSR(const AccountPtr &account, PKey keyPair)
     qCInfo(lcCse()) << "Returning the certificate";
     qCInfo(lcCse()) << output;
 
+    writeMnemonic(account);
+    writeKeyPair(account);
+
     sendSignRequestCSR(account, std::move(keyPair), output);
 }
 
@@ -1326,6 +1329,26 @@ void ClientSideEncryption::sendSignRequestCSR(const AccountPtr &account, PKey ke
     job->start();
 }
 
+bool ClientSideEncryption::writeKeyPair(const AccountPtr &account,
+                                        const PKey &keyPair)
+{
+    const QString kck = AbstractCredentials::keychainKey(
+        account->url().toString(),
+        account->credentials()->user() + e2e_private,
+        account->id()
+        );
+
+    auto *job = new WritePasswordJob(Theme::instance()->appName());
+    job->setInsecureFallback(false);
+    job->setKey(kck);
+    job->setBinaryData(_privateKey);
+    connect(job, &WritePasswordJob::finished, [](Job *incoming) {
+        Q_UNUSED(incoming);
+        qCInfo(lcCse()) << "Private key stored in keychain";
+    });
+    job->start();
+}
+
 void ClientSideEncryption::encryptPrivateKey(const AccountPtr &account)
 {
     QStringList list = WordList::getRandomWords(12);
index 4d074c965dc8f3a1c8a3de96771804c5329c7a7d..a9138b13d8b91e0b5b8a4f60aeaceb69cea525e4 100644 (file)
@@ -166,6 +166,8 @@ private slots:
 private:
     void generateCSR(const AccountPtr &account, PKey keyPair);
     void sendSignRequestCSR(const AccountPtr &account, PKey keyPair, const QByteArray &csrContent);
+    [[nodiscard]] bool writeKeyPair(const AccountPtr &account,
+                                    const PKey &keyPair);
 
     [[nodiscard]] bool checkPublicKeyValidity(const AccountPtr &account) const;
     [[nodiscard]] bool checkServerPublicKeyValidity(const QByteArray &serverPublicKeyString) const;