Skip to content
This repository was archived by the owner on Mar 4, 2023. It is now read-only.

Commit 68f4a5c

Browse files
committed
more deprecation
1 parent ae2a02d commit 68f4a5c

File tree

8 files changed

+75
-46
lines changed

8 files changed

+75
-46
lines changed

examples/datasync/Example/mainwidget.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ void MainWidget::setup()
114114
connect(ui->resyncButton, &QPushButton::clicked,
115115
sync, &QtDataSync::SyncController::triggerResync);
116116

117-
model = new QtDataSync::DataStoreModel(store, this);//TODO here
117+
model = new QtDataSync::DataStoreModel(store, this);
118118
model->setTypeId<SampleData*>();
119119
ui->dataTreeView->setModel(model);
120120
connect(ui->dataTreeView->selectionModel(), &QItemSelectionModel::currentChanged,
@@ -166,6 +166,7 @@ void MainWidget::on_deleteButton_clicked()
166166

167167
void MainWidget::on_changeUserButton_clicked()
168168
{
169+
//TODO change to import/export dialog
169170
auto auth = QtDataSync::Setup::authenticatorForSetup<QtDataSync::WsAuthenticator>(this);
170171
auto user = auth->userIdentity();
171172
auto ok = false;
@@ -179,9 +180,9 @@ void MainWidget::on_changeUserButton_clicked()
179180
user = str.toUtf8();
180181
QtDataSync::GenericTask<void> task;
181182
if(user.isEmpty())
182-
task = auth->resetUserIdentity();
183+
task = auth->resetUserData();
183184
else
184-
task = auth->setUserIdentity(user);
185+
task = auth->importUserData(user);
185186
task.onResult(this, [auth](){
186187
qDebug() << "Changed userId to" << auth->userIdentity();
187188
auth->deleteLater();

src/datasync/qtinyaesencryptor.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,15 @@ void QTinyAesEncryptor::setKey(const QByteArray &key)
5555
_defaults->settings()->setValue(QStringLiteral("encryption/key"), _key);
5656
}
5757

58+
void QTinyAesEncryptor::resetKey()
59+
{
60+
QMutexLocker _(&_keyMutex);
61+
QRng secureRng;
62+
secureRng.setSecurityLevel(QRng::HighSecurity);
63+
_key = secureRng.generateRandom(QTinyAes::KEYSIZE);
64+
_defaults->settings()->setValue(QStringLiteral("encryption/key"), _key);
65+
}
66+
5867
QJsonValue QTinyAesEncryptor::encrypt(const ObjectKey &key, const QJsonObject &object, const QByteArray &keyProperty) const
5968
{
6069
auto salt = QRng().generateRandom(28);//224 bits

src/datasync/qtinyaesencryptor_p.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class Q_DATASYNC_EXPORT QTinyAesEncryptor : public Encryptor
4141

4242
public Q_SLOTS:
4343
void setKey(const QByteArray &key) override;
44+
void resetKey();
4445

4546
private:
4647
Defaults *_defaults;

src/datasync/task.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class Q_DATASYNC_EXPORT Task : public QFuture<QVariant>
4040

4141
protected:
4242
//! Constructor with future interface
43-
Task(QFutureInterface<QVariant> d); //TODO make public
43+
Task(QFutureInterface<QVariant> d); //MAJOR make public
4444
};
4545

4646
//! Generic version of the Task

src/datasync/wsauthenticator.cpp

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,34 +20,6 @@ WsAuthenticator::WsAuthenticator(WsRemoteConnector *connector, Defaults *default
2020

2121
WsAuthenticator::~WsAuthenticator() {}
2222

23-
void WsAuthenticator::exportUserDataImpl(QIODevice *device) const
24-
{
25-
QJsonObject data;
26-
data[QStringLiteral("key")] = QString::fromUtf8(d->connector->cryptor()->key().toBase64());
27-
data[QStringLiteral("identity")] = QString::fromUtf8(userIdentity());
28-
29-
device->write(QJsonDocument(data).toJson(QJsonDocument::Indented));
30-
}
31-
32-
GenericTask<void> WsAuthenticator::importUserDataImpl(QIODevice *device)
33-
{
34-
QJsonParseError error;
35-
auto data = QJsonDocument::fromJson(device->readAll(), &error);
36-
if(error.error != QJsonParseError::NoError) {
37-
QFutureInterface<QVariant> futureInterface;
38-
futureInterface.reportStarted();
39-
futureInterface.reportException(InvalidDataException(error.errorString()));
40-
futureInterface.reportFinished();
41-
return futureInterface;
42-
}
43-
44-
auto obj = data.object();
45-
auto key = QByteArray::fromBase64(obj[QStringLiteral("key")].toString().toUtf8());
46-
QMetaObject::invokeMethod(d->connector->cryptor(), "setKey", Qt::QueuedConnection,
47-
Q_ARG(QByteArray, key));
48-
return setUserIdentity(obj[QStringLiteral("identity")].toString().toUtf8());
49-
}
50-
5123
QUrl WsAuthenticator::remoteUrl() const
5224
{
5325
return d->settings->value(WsRemoteConnector::keyRemoteUrl).toUrl();
@@ -111,13 +83,22 @@ void WsAuthenticator::setValidateServerCertificate(bool validateServerCertificat
11183
d->settings->sync();
11284
}
11385

86+
GenericTask<void> WsAuthenticator::resetUserData(bool clearLocalStore)
87+
{
88+
return resetIdentity(QVariant(), clearLocalStore);
89+
}
90+
11491
GenericTask<void> WsAuthenticator::setUserIdentity(QByteArray userIdentity, bool clearLocalStore)
11592
{
93+
qWarning() << "Method setUserIdentity is unsafe, as it does not set the key."
94+
<< "Use importUserData instead!";
11695
return resetIdentity(userIdentity, clearLocalStore);
11796
}
11897

11998
GenericTask<void> WsAuthenticator::resetUserIdentity(bool clearLocalStore)
12099
{
100+
qWarning() << "Method resetUserIdentity is unsafe, as it does not reset the key."
101+
<< "Use resetUserData instead!";
121102
return resetIdentity(QVariant(), clearLocalStore);
122103
}
123104

@@ -132,6 +113,34 @@ RemoteConnector *WsAuthenticator::connector()
132113
return d->connector;
133114
}
134115

116+
void WsAuthenticator::exportUserDataImpl(QIODevice *device) const
117+
{
118+
QJsonObject data;
119+
data[QStringLiteral("key")] = QString::fromUtf8(d->connector->cryptor()->key().toBase64());
120+
data[QStringLiteral("identity")] = QString::fromUtf8(userIdentity());
121+
122+
device->write(QJsonDocument(data).toJson(QJsonDocument::Indented));
123+
}
124+
125+
GenericTask<void> WsAuthenticator::importUserDataImpl(QIODevice *device)
126+
{
127+
QJsonParseError error;
128+
auto data = QJsonDocument::fromJson(device->readAll(), &error);
129+
if(error.error != QJsonParseError::NoError) {
130+
QFutureInterface<QVariant> futureInterface;
131+
futureInterface.reportStarted();
132+
futureInterface.reportException(InvalidDataException(error.errorString()));
133+
futureInterface.reportFinished();
134+
return futureInterface;
135+
}
136+
137+
auto obj = data.object();
138+
auto key = QByteArray::fromBase64(obj[QStringLiteral("key")].toString().toUtf8());
139+
QMetaObject::invokeMethod(d->connector->cryptor(), "setKey", Qt::QueuedConnection,
140+
Q_ARG(QByteArray, key));
141+
return resetIdentity(obj[QStringLiteral("identity")].toString().toUtf8(), true);
142+
}
143+
135144
void WsAuthenticator::updateConnected(int connected)
136145
{
137146
auto cOld = d->connected;

src/datasync/wsauthenticator.h

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ class Q_DATASYNC_EXPORT WsAuthenticator : public Authenticator
2525
Q_PROPERTY(QHash<QByteArray, QByteArray> customHeaders READ customHeaders WRITE setCustomHeaders)
2626
//! Specify, whether server certificates should be validated
2727
Q_PROPERTY(bool validateServerCertificate READ validateServerCertificate WRITE setValidateServerCertificate)
28-
//! Holds the current user identity, i.e. the account
29-
Q_PROPERTY(QByteArray userIdentity READ userIdentity WRITE setUserIdentity RESET resetUserIdentity)
28+
//! Holds the current users data, i.e. the account and encryption keys
29+
Q_PROPERTY(QByteArray userData READ exportUserData WRITE importUserData RESET resetUserData)
3030
//! Holds the secret that is required to use the server
3131
Q_PROPERTY(QString serverSecret READ serverSecret WRITE setServerSecret)
3232
//! Specifies, whether the remote is currently connected or not
@@ -40,16 +40,13 @@ class Q_DATASYNC_EXPORT WsAuthenticator : public Authenticator
4040
//! Destructor
4141
~WsAuthenticator();
4242

43-
void exportUserDataImpl(QIODevice *device) const override;
44-
GenericTask<void> importUserDataImpl(QIODevice *device) override;
45-
4643
//! @readAcFn{WsAuthenticator::remoteUrl}
4744
QUrl remoteUrl() const;
4845
//! @readAcFn{WsAuthenticator::customHeaders}
4946
QHash<QByteArray, QByteArray> customHeaders() const;
5047
//! @readAcFn{WsAuthenticator::validateServerCertificate}
5148
bool validateServerCertificate() const;
52-
//! @readAcFn{WsAuthenticator::userIdentity}
49+
//! Returns the users remote identity
5350
QByteArray userIdentity() const;
5451
//! @readAcFn{WsAuthenticator::serverSecret}
5552
QString serverSecret() const;
@@ -66,20 +63,24 @@ public Q_SLOTS:
6663
void setCustomHeaders(QHash<QByteArray, QByteArray> customHeaders);
6764
//! @writeAcFn{WsAuthenticator::validateServerCertificate}
6865
void setValidateServerCertificate(bool validateServerCertificate);
69-
//! @writeAcFn{WsAuthenticator::userIdentity}
70-
GenericTask<void> setUserIdentity(QByteArray userIdentity, bool clearLocalStore = true);
71-
//! @resetAcFn{WsAuthenticator::userIdentity}
72-
GenericTask<void> resetUserIdentity(bool clearLocalStore = true);
66+
//! @reseteAcFn{WsAuthenticator::userData}
67+
GenericTask<void> resetUserData(bool clearLocalStore = true);
7368
//! @writeAcFn{WsAuthenticator::serverSecret}
7469
void setServerSecret(QString serverSecret);
7570

71+
QT_DEPRECATED GenericTask<void> setUserIdentity(QByteArray userIdentity, bool clearLocalStore = true);
72+
QT_DEPRECATED GenericTask<void> resetUserIdentity(bool clearLocalStore = true);
73+
7674
Q_SIGNALS:
7775
//! @notifyAcFn{WsAuthenticator::connected}
7876
void connectedChanged(bool connected);
7977

8078
protected:
8179
RemoteConnector *connector() override;
8280

81+
void exportUserDataImpl(QIODevice *device) const override;
82+
GenericTask<void> importUserDataImpl(QIODevice *device) override;
83+
8384
private Q_SLOTS:
8485
void updateConnected(int connected);
8586

src/datasync/wsremoteconnector.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "defaults.h"
22
#include "wsauthenticator.h"
33
#include "wsremoteconnector_p.h"
4+
#include "qtinyaesencryptor_p.h"
45

56
#include <QtCore/QDebug>
67
#include <QtCore/QJsonDocument>
@@ -256,6 +257,13 @@ void WsRemoteConnector::resetUserData(const QVariant &extraData, const QByteArra
256257
settings->setValue(keyUserIdentity, extraData);
257258
else
258259
settings->remove(keyUserIdentity);
260+
261+
//MAJOR remove next major
262+
//reset the encryption key, if possible...
263+
auto tCr = qobject_cast<QTinyAesEncryptor*>(cryptor());
264+
if(tCr)
265+
tCr->resetKey();
266+
259267
reconnect();
260268
}
261269

tests/auto/datasync/WsRemoteConnectorTest/tst_wsremoteconnector.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ void WsRemoteConnectorTest::testServerConnecting()
8989
//empty store -> used INVALID id
9090
auth->setRemoteUrl(QStringLiteral("ws://localhost:4242"));
9191
auth->setServerSecret(QStringLiteral("baum42"));
92-
auth->setUserIdentity("invalid");
92+
auth->importUserData("{\"identity\": \"invalid\",\"key\": \"invalid\"}");
9393
auth->reconnect();
9494

9595
for(auto i = 0; i < 10 && syncSpy.count() < 3; i++)
@@ -104,7 +104,7 @@ void WsRemoteConnectorTest::testServerConnecting()
104104
//now connect again, but reset id first
105105
conSpy.clear();
106106
syncSpy.clear();
107-
auth->resetUserIdentity();
107+
auth->resetUserData();
108108
auth->reconnect();
109109

110110
QVERIFY(conSpy.wait());
@@ -293,7 +293,7 @@ void WsRemoteConnectorTest::testSecondDevice()
293293
QSignalSpy syncSpy(controller, &SyncController::syncStateChanged);
294294
QSignalSpy conSpy(auth, &WsAuthenticator::connectedChanged);
295295

296-
auth->setUserIdentity(auth->userIdentity());//reset device trick...
296+
auth->importUserData(auth->exportUserData());//reset device trick...
297297
auth->reconnect();
298298

299299
QVERIFY(conSpy.wait());
@@ -327,7 +327,7 @@ void WsRemoteConnectorTest::testExportImport()
327327
auto data = auth->exportUserData();
328328

329329
//after export: test with different user to reset
330-
auth->resetUserIdentity();//reset device trick...
330+
auth->resetUserData();//reset device trick...
331331
auth->reconnect();
332332

333333
QVERIFY(conSpy.wait());

0 commit comments

Comments
 (0)