From cb8bf134d2e8d0aaf60e136c51f79201b62f67f9 Mon Sep 17 00:00:00 2001 From: Diadlo Date: Wed, 30 Dec 2015 18:45:46 +0300 Subject: [PATCH 01/16] feat(toxme): Add ToxMe registration Add some features in Toxme class and new section in profile form --- src/net/toxme.cpp | 36 ++++++++++++ src/widget/form/profileform.cpp | 48 ++++++++++++++++ src/widget/form/profileform.h | 2 + src/widget/form/profileform.ui | 98 +++++++++++++++++++++++++++++++-- 4 files changed, 179 insertions(+), 5 deletions(-) diff --git a/src/net/toxme.cpp b/src/net/toxme.cpp index d912a3857..9e34dafa9 100644 --- a/src/net/toxme.cpp +++ b/src/net/toxme.cpp @@ -334,3 +334,39 @@ QString Toxme::getErrorMessage(int errorCode) return QObject::tr("Unknown error (%1)").arg(errorCode); } } + +QString Toxme::getErrorMessage(int errorCode) +{ + switch (errorCode) { + case -1: + return "You must send POST requests to /api"; + case -2: + return "Please try again using a HTTPS connection"; + case -3: + return "I was unable to read your encrypted payload"; + case -4: + return "You're making too many requests. Wait an hour and try again"; + case -25: + return "This name is already in use"; + case -26: + return "This Tox ID is already registered under another name"; + case -27: + return "Please don't use a space in your name"; + case -28: + return "Password incorrect"; + case -29: + return "You can't use this name"; + case -30: + return "Name not found"; + case -31: + return "Tox ID not sent"; + case -41: + return "Lookup failed because the other server replied with invalid data"; + case -42: + return "That user does not exist"; + case -43: + return "Internal lookup error. Please file a bug"; + default: + return "Unknow error" + errorCode; + } +} diff --git a/src/widget/form/profileform.cpp b/src/widget/form/profileform.cpp index f03747b5a..c66ee1390 100644 --- a/src/widget/form/profileform.cpp +++ b/src/widget/form/profileform.cpp @@ -46,6 +46,7 @@ #include #include #include +#include ProfileForm::ProfileForm(QWidget *parent) : QWidget{parent}, qr{nullptr} @@ -80,6 +81,9 @@ ProfileForm::ProfileForm(QWidget *parent) : QVBoxLayout *toxIdGroup = qobject_cast(bodyUI->toxGroup->layout()); delete toxIdGroup->replaceWidget(bodyUI->toxId, toxId); // Original toxId is in heap, delete it bodyUI->toxId->hide(); + bodyUI->password->hide(); + bodyUI->passwordLabel->hide(); + bodyUI->serversList->addItem("toxme.io"); bodyUI->qrLabel->setWordWrap(true); @@ -111,6 +115,7 @@ ProfileForm::ProfileForm(QWidget *parent) : connect(bodyUI->changePassButton, &QPushButton::clicked, this, &ProfileForm::onChangePassClicked); connect(bodyUI->saveQr, &QPushButton::clicked, this, &ProfileForm::onSaveQrClicked); connect(bodyUI->copyQr, &QPushButton::clicked, this, &ProfileForm::onCopyQrClicked); + connect(bodyUI->registerButton, &QPushButton::clicked, this, &ProfileForm::onRegisterButtonClicked); connect(core, &Core::usernameSet, this, [=](const QString& val) { bodyUI->userName->setText(val); }); connect(core, &Core::statusMessageSet, this, [=](const QString& val) { bodyUI->statusMessage->setText(val); }); @@ -416,3 +421,46 @@ void ProfileForm::retranslateUi() // We have to add the toxId tooltip here and not in the .ui or Qt won't know how to translate it dynamically toxId->setToolTip(tr("This bunch of characters tells other Tox clients how to contact you.\nShare it with your friends to communicate.")); } + +void ProfileForm::onRegisterButtonClicked() +{ + QString name = bodyUI->toxmeUsername->text(); + if (name.isEmpty()) + return; + + bodyUI->toxmeRegisterButton->setEnabled(false); + bodyUI->toxmeUpdateButton->setEnabled(false); + bodyUI->toxmeRegisterButton->setText(tr("Register (processing)")); + bodyUI->toxmeUpdateButton->setText(tr("Update (processing)")); + + QString id = toxId->text(); + QString bio = bodyUI->toxmeBio->text(); + QString server = bodyUI->toxmeServersList->currentText(); + bool privacy = bodyUI->toxmePrivacy->isChecked(); + if (name.isEmpty()) + return; + + Toxme::ExecCode code = Toxme::ExecCode::Ok; + QString response = Toxme::createAddress(code, server, id, name, privacy, bio); + + switch (code) { + case Toxme::Updated: + QMessageBox::information(this, tr("Done!"), tr("Account %1@%2 updated successfully").arg(name, server), "Ok"); + Settings::getInstance().setToxme(name, server, bio, privacy); + showExistenToxme(); + break; + case Toxme::Ok: + QMessageBox::information(this, tr("Done!"), tr("Successfully added %1@%2 to the database. Save your password").arg(name, server), "Ok"); + Settings::getInstance().setToxme(name, server, bio, privacy, response); + showExistenToxme(); + break; + default: + QString errorMessage = Toxme::getErrorMessage(code); + QMessageBox::warning(this, tr("Toxme error"), errorMessage, "Ok"); + } + + bodyUI->toxmeRegisterButton->setEnabled(true); + bodyUI->toxmeUpdateButton->setEnabled(true); + bodyUI->toxmeRegisterButton->setText(tr("Register")); + bodyUI->toxmeUpdateButton->setText(tr("Update")); +} diff --git a/src/widget/form/profileform.h b/src/widget/form/profileform.h index 1f6ee0942..9169e8b41 100644 --- a/src/widget/form/profileform.h +++ b/src/widget/form/profileform.h @@ -81,6 +81,8 @@ private slots: void onAvatarClicked(); void showProfilePictureContextMenu(const QPoint &point); + void onRegisterButtonClicked(); + private: void retranslateUi(); void prFileLabelUpdate(); diff --git a/src/widget/form/profileform.ui b/src/widget/form/profileform.ui index 88ba39849..b66cc0041 100644 --- a/src/widget/form/profileform.ui +++ b/src/widget/form/profileform.ui @@ -6,7 +6,7 @@ 0 0 - 442 + 584 659 @@ -39,11 +39,11 @@ 0 0 - 585 - 625 + 542 + 792 - + 9 @@ -86,6 +86,90 @@ + + + + Toxme register + + + + + + + + Biography + + + + + + + + + + + + + false + + + true + + + false + + + + + + + true + + + Your password + + + + + + + Hide my name from the public list + + + + + + + Register + + + + + + + Username + + + + + + + -1 + + + + + + + Server + + + + + + + + @@ -104,7 +188,11 @@ Share it with your friends to communicate. - + + + true + + From 9565a8175558d64c9ffdc2ec6b64e69d9ecdc58d Mon Sep 17 00:00:00 2001 From: Diadlo Date: Wed, 30 Dec 2015 23:51:28 +0300 Subject: [PATCH 02/16] fix(toxme): Translation fixs --- src/net/toxme.cpp | 30 +++++++++++++++--------------- src/widget/form/addfriendform.cpp | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/net/toxme.cpp b/src/net/toxme.cpp index 9e34dafa9..02517af61 100644 --- a/src/net/toxme.cpp +++ b/src/net/toxme.cpp @@ -339,34 +339,34 @@ QString Toxme::getErrorMessage(int errorCode) { switch (errorCode) { case -1: - return "You must send POST requests to /api"; + return QObject::tr("You must send POST requests to /api"); case -2: - return "Please try again using a HTTPS connection"; + return QObject::tr("Please try again using a HTTPS connection"); case -3: - return "I was unable to read your encrypted payload"; + return QObject::tr("I was unable to read your encrypted payload"); case -4: - return "You're making too many requests. Wait an hour and try again"; + return QObject::tr("You're making too many requests. Wait an hour and try again"); case -25: - return "This name is already in use"; + return QObject::tr("This name is already in use"); case -26: - return "This Tox ID is already registered under another name"; + return QObject::tr("This Tox ID is already registered under another name"); case -27: - return "Please don't use a space in your name"; + return QObject::tr("Please don't use a space in your name"); case -28: - return "Password incorrect"; + return QObject::tr("Password incorrect"); case -29: - return "You can't use this name"; + return QObject::tr("You can't use this name"); case -30: - return "Name not found"; + return QObject::tr("Name not found"); case -31: - return "Tox ID not sent"; + return QObject::tr("Tox ID not sent"); case -41: - return "Lookup failed because the other server replied with invalid data"; + return QObject::tr("Lookup failed because the other server replied with invalid data"); case -42: - return "That user does not exist"; + return QObject::tr("That user does not exist"); case -43: - return "Internal lookup error. Please file a bug"; + return QObject::tr("Internal lookup error. Please file a bug"); default: - return "Unknow error" + errorCode; + return QObject::tr("Unknow error") + errorCode; } } diff --git a/src/widget/form/addfriendform.cpp b/src/widget/form/addfriendform.cpp index 96d8edc8d..7e581c5bf 100644 --- a/src/widget/form/addfriendform.cpp +++ b/src/widget/form/addfriendform.cpp @@ -18,7 +18,6 @@ */ #include "addfriendform.h" - #include #include #include @@ -32,6 +31,7 @@ #include "src/core/core.h" #include "src/core/cdata.h" #include "src/net/toxdns.h" +#include "src/net/toxme.h" #include "src/persistence/settings.h" #include "src/widget/gui.h" #include "src/widget/translator.h" From 65ab1f4e14d3ebc9dd13d4308988d999c83a5a47 Mon Sep 17 00:00:00 2001 From: Diadlo Date: Thu, 31 Dec 2015 00:09:42 +0300 Subject: [PATCH 03/16] fix(profileform): Fix tab order, fix loop --- src/widget/form/profileform.ui | 38 +++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/src/widget/form/profileform.ui b/src/widget/form/profileform.ui index b66cc0041..1f841b387 100644 --- a/src/widget/form/profileform.ui +++ b/src/widget/form/profileform.ui @@ -40,7 +40,7 @@ 0 0 542 - 792 + 802 @@ -101,12 +101,6 @@ - - - - - - @@ -165,6 +159,16 @@ + + + + false + + + + + + @@ -406,6 +410,26 @@ Profile does not contain your history.
src/widget/tool/croppinglabel.h
+ + scrollArea + userName + statusMessage + dnsUsername + bio + serversList + privacy + registerButton + password + toxId + saveQr + copyQr + renameButton + deleteButton + logoutButton + exportButton + deletePassButton + changePassButton + From fc2a5723092ed1c2fe6b0991d9bd9def6ec24a98 Mon Sep 17 00:00:00 2001 From: Diadlo Date: Thu, 31 Dec 2015 00:27:15 +0300 Subject: [PATCH 04/16] fix(toxme): Use format strings --- src/net/toxme.cpp | 2 +- src/widget/form/profileform.cpp | 1 - src/widget/form/profileform.h | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/net/toxme.cpp b/src/net/toxme.cpp index 02517af61..979d89764 100644 --- a/src/net/toxme.cpp +++ b/src/net/toxme.cpp @@ -367,6 +367,6 @@ QString Toxme::getErrorMessage(int errorCode) case -43: return QObject::tr("Internal lookup error. Please file a bug"); default: - return QObject::tr("Unknow error") + errorCode; + return QObject::tr("Unknown error (%1)").arg(errorCode); } } diff --git a/src/widget/form/profileform.cpp b/src/widget/form/profileform.cpp index c66ee1390..a9906b254 100644 --- a/src/widget/form/profileform.cpp +++ b/src/widget/form/profileform.cpp @@ -458,7 +458,6 @@ void ProfileForm::onRegisterButtonClicked() QString errorMessage = Toxme::getErrorMessage(code); QMessageBox::warning(this, tr("Toxme error"), errorMessage, "Ok"); } - bodyUI->toxmeRegisterButton->setEnabled(true); bodyUI->toxmeUpdateButton->setEnabled(true); bodyUI->toxmeRegisterButton->setText(tr("Register")); diff --git a/src/widget/form/profileform.h b/src/widget/form/profileform.h index 9169e8b41..3187f454c 100644 --- a/src/widget/form/profileform.h +++ b/src/widget/form/profileform.h @@ -80,7 +80,6 @@ private slots: void onChangePassClicked(); void onAvatarClicked(); void showProfilePictureContextMenu(const QPoint &point); - void onRegisterButtonClicked(); private: From 41c5d4bf14986348f04f9e60f538e79c1edc4a04 Mon Sep 17 00:00:00 2001 From: Diadlo Date: Sat, 2 Jan 2016 03:00:21 +0300 Subject: [PATCH 05/16] feat(profileform): Added ability to change toxme server Combo box set editable. Now user can enter server himself --- src/widget/form/profileform.ui | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/widget/form/profileform.ui b/src/widget/form/profileform.ui index 1f841b387..9c21bec52 100644 --- a/src/widget/form/profileform.ui +++ b/src/widget/form/profileform.ui @@ -6,7 +6,7 @@ 0 0 - 584 + 574 659 @@ -39,7 +39,7 @@ 0 0 - 542 + 536 802 @@ -136,6 +136,15 @@ Register + + false + + + false + + + false + @@ -147,6 +156,12 @@ + + true + + + true + -1 From 204fe1d3dec00c0f4408f8a98c100377759f1218 Mon Sep 17 00:00:00 2001 From: Diadlo Date: Sun, 24 Jan 2016 00:50:57 +0300 Subject: [PATCH 06/16] feat(toxme): Add save toxme info --- src/net/toxme.cpp | 7 +- src/net/toxme.h | 4 +- src/persistence/settings.cpp | 80 +++++++++++ src/persistence/settings.h | 21 +++ src/widget/form/profileform.cpp | 49 ++++++- src/widget/form/profileform.h | 2 + src/widget/form/profileform.ui | 234 +++++++++++++++++--------------- 7 files changed, 278 insertions(+), 119 deletions(-) diff --git a/src/net/toxme.cpp b/src/net/toxme.cpp index 979d89764..835c778f1 100644 --- a/src/net/toxme.cpp +++ b/src/net/toxme.cpp @@ -39,7 +39,7 @@ QByteArray Toxme::makeJsonRequest(QString url, QString json, QNetworkReply::Netw netman.setProxy(Settings::getInstance().getProxy()); QNetworkRequest request{url}; request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); - QNetworkReply* reply = netman.post(request,json.toUtf8()); + QNetworkReply* reply = netman.post(request, json.toUtf8()); while (!reply->isFinished()) { @@ -239,7 +239,7 @@ QString Toxme::createAddress(ExecCode &code, QString server, ToxId id, QString a qDebug() << response; code = extractError(response); - if ((code != Registered && code != Updated) || error != QNetworkReply::NoError) + if ((code != Ok && code != Updated) || error != QNetworkReply::NoError) return QString(); return getPass(response, code); @@ -276,7 +276,7 @@ QString Toxme::getPass(QString json, ExecCode &code) { return json; } -int Toxme::deleteAddress(QString server, ToxId id) +Toxme::ExecCode Toxme::deleteAddress(QString server, ToxId id) { const QString payload{"{\"public_key\":\""+id.toString().left(64)+"\"," "\"timestamp\":"+QString().setNum(time(0))+"}"}; @@ -285,6 +285,7 @@ int Toxme::deleteAddress(QString server, ToxId id) if (!server.contains("://")) server = "https://" + server; + qDebug() << payload; QString pubkeyUrl = server + "/pk"; QString apiUrl = server + "/api"; QNetworkReply::NetworkError error = QNetworkReply::NoError; diff --git a/src/net/toxme.h b/src/net/toxme.h index 9d5a2e709..4ca630fb3 100644 --- a/src/net/toxme.h +++ b/src/net/toxme.h @@ -38,7 +38,7 @@ class Toxme public: enum ExecCode { ExecError = -50, - Registered = 0, + Ok = 0, Updated = 1, ServerError = 2, IncorrectResponse = 3, @@ -54,7 +54,7 @@ public: static QString createAddress(ExecCode &code, QString server, ToxId id, QString address, bool keepPrivate=true, QString bio=QString()); /// Deletes the address associated with your current Tox ID - static int deleteAddress(QString server, ToxId id); + static ExecCode deleteAddress(QString server, ToxId id); /// Return string of the corresponding error code static QString getErrorMessage(int errorCode); diff --git a/src/persistence/settings.cpp b/src/persistence/settings.cpp index 8c5a40559..3dcbfcf5f 100644 --- a/src/persistence/settings.cpp +++ b/src/persistence/settings.cpp @@ -359,6 +359,13 @@ void Settings::loadPersonal(Profile* profile) } ps.endArray(); ps.endGroup(); + + ps.beginGroup("Toxme"); + toxmeInfo = ps.value("info", "").toString(); + toxmeBio = ps.value("bio", "").toString(); + toxmePriv = ps.value("priv", false).toBool(); + toxmePass = ps.value("pass", "").toString(); + ps.endGroup(); } void Settings::saveGlobal() @@ -555,6 +562,13 @@ void Settings::savePersonal(QString profileName, QString password) ps.setValue("enableLogging", enableLogging); ps.endGroup(); + ps.beginGroup("Toxme"); + ps.setValue("info", toxmeInfo); + ps.setValue("bio", toxmeBio); + ps.setValue("priv", toxmePriv); + ps.setValue("pass", toxmePass); + ps.endGroup(); + ps.save(); } @@ -838,6 +852,72 @@ void Settings::setTranslation(QString newValue) translation = newValue; } +void Settings::deleteToxme() +{ + setToxmeInfo(""); + setToxmeBio(""); + setToxmePriv(""); + setToxmePass(""); +} + +void Settings::setToxme(QString name, QString server, QString bio, bool priv, QString pass) +{ + setToxmeInfo(name + "@" + server); + setToxmeBio(bio); + setToxmePriv(priv); + if (!pass.isEmpty()) + setToxmePass(pass); +} + +QString Settings::getToxmeInfo() const +{ + QMutexLocker locker{&bigLock}; + return toxmeInfo; +} + +void Settings::setToxmeInfo(QString info) +{ + QMutexLocker locker{&bigLock}; + if (info.split("@").size() == 2) + toxmeInfo = info; +} + +QString Settings::getToxmeBio() const +{ + QMutexLocker locker{&bigLock}; + return toxmeBio; +} + +void Settings::setToxmeBio(QString bio) +{ + QMutexLocker locker{&bigLock}; + toxmeBio = bio; +} + +bool Settings::getToxmePriv() const +{ + QMutexLocker locker{&bigLock}; + return toxmePriv; +} + +void Settings::setToxmePriv(bool priv) +{ + QMutexLocker locker{&bigLock}; + toxmePriv = priv; +} + +QString Settings::getToxmePass() const +{ + QMutexLocker locker{&bigLock}; + return toxmePass; +} + +void Settings::setToxmePass(QString pass) +{ + QMutexLocker locker{&bigLock}; + toxmePass = pass; +} + bool Settings::getForceTCP() const { QMutexLocker locker{&bigLock}; diff --git a/src/persistence/settings.h b/src/persistence/settings.h index d029085c9..4e2ed014a 100644 --- a/src/persistence/settings.h +++ b/src/persistence/settings.h @@ -108,6 +108,21 @@ public: QString getTranslation() const; void setTranslation(QString newValue); + // Toxme + void deleteToxme(); + void setToxme(QString name, QString server, QString bio, bool priv, QString pass = ""); + QString getToxmeInfo() const; + void setToxmeInfo(QString info); + + QString getToxmeBio() const; + void setToxmeBio(QString bio); + + bool getToxmePriv() const; + void setToxmePriv(bool priv); + + QString getToxmePass() const; + void setToxmePass(QString pass); + void setAutoSaveEnabled(bool newValue); bool getAutoSaveEnabled() const; @@ -359,6 +374,12 @@ private: QString currentProfile; uint32_t currentProfileId; + // Toxme Info + QString toxmeInfo; // name@server + QString toxmeBio; + bool toxmePriv; + QString toxmePass; + bool enableLogging; int autoAwayTime; diff --git a/src/widget/form/profileform.cpp b/src/widget/form/profileform.cpp index a9906b254..30f0f57e1 100644 --- a/src/widget/form/profileform.cpp +++ b/src/widget/form/profileform.cpp @@ -81,9 +81,15 @@ ProfileForm::ProfileForm(QWidget *parent) : QVBoxLayout *toxIdGroup = qobject_cast(bodyUI->toxGroup->layout()); delete toxIdGroup->replaceWidget(bodyUI->toxId, toxId); // Original toxId is in heap, delete it bodyUI->toxId->hide(); - bodyUI->password->hide(); - bodyUI->passwordLabel->hide(); - bodyUI->serversList->addItem("toxme.io"); + + /* Toxme section init */ + bodyUI->toxmeServersList->addItem("toxme.io"); + bodyUI->toxmeServersList->addItem("toxme.io"); + QString toxmeInfo = Settings::getInstance().getToxmeInfo(); + if (toxmeInfo.isEmpty()) // User not registered + showRegisterToxme(); + else + showExistenToxme(); bodyUI->qrLabel->setWordWrap(true); @@ -115,7 +121,8 @@ ProfileForm::ProfileForm(QWidget *parent) : connect(bodyUI->changePassButton, &QPushButton::clicked, this, &ProfileForm::onChangePassClicked); connect(bodyUI->saveQr, &QPushButton::clicked, this, &ProfileForm::onSaveQrClicked); connect(bodyUI->copyQr, &QPushButton::clicked, this, &ProfileForm::onCopyQrClicked); - connect(bodyUI->registerButton, &QPushButton::clicked, this, &ProfileForm::onRegisterButtonClicked); + connect(bodyUI->toxmeRegisterButton, &QPushButton::clicked, this, &ProfileForm::onRegisterButtonClicked); + connect(bodyUI->toxmeUpdateButton, &QPushButton::clicked, this, &ProfileForm::onRegisterButtonClicked); connect(core, &Core::usernameSet, this, [=](const QString& val) { bodyUI->userName->setText(val); }); connect(core, &Core::statusMessageSet, this, [=](const QString& val) { bodyUI->statusMessage->setText(val); }); @@ -422,6 +429,39 @@ void ProfileForm::retranslateUi() toxId->setToolTip(tr("This bunch of characters tells other Tox clients how to contact you.\nShare it with your friends to communicate.")); } +void ProfileForm::showRegisterToxme() +{ + bodyUI->toxmeUsername->setText(""); + bodyUI->toxmeBio->setText(""); + bodyUI->toxmePrivacy->setChecked(false); + + bodyUI->toxmeRegisterButton->show(); + bodyUI->toxmeUpdateButton->hide(); + bodyUI->toxmePassword->hide(); + bodyUI->toxmePasswordLabel->hide(); +} + +void ProfileForm::showExistenToxme() +{ + QStringList info = Settings::getInstance().getToxmeInfo().split("@"); + bodyUI->toxmeUsername->setText(info[0]); + bodyUI->toxmeServersList->addItem(info[1]); + + QString bio = Settings::getInstance().getToxmeBio(); + bodyUI->toxmeBio->setText(bio); + + bool priv = Settings::getInstance().getToxmePriv(); + bodyUI->toxmePrivacy->setChecked(priv); + + QString pass = Settings::getInstance().getToxmePass(); + bodyUI->toxmePassword->setText(pass); + bodyUI->toxmePassword->show(); + bodyUI->toxmePasswordLabel->show(); + + bodyUI->toxmeRegisterButton->hide(); + bodyUI->toxmeUpdateButton->show(); +} + void ProfileForm::onRegisterButtonClicked() { QString name = bodyUI->toxmeUsername->text(); @@ -458,6 +498,7 @@ void ProfileForm::onRegisterButtonClicked() QString errorMessage = Toxme::getErrorMessage(code); QMessageBox::warning(this, tr("Toxme error"), errorMessage, "Ok"); } + bodyUI->toxmeRegisterButton->setEnabled(true); bodyUI->toxmeUpdateButton->setEnabled(true); bodyUI->toxmeRegisterButton->setText(tr("Register")); diff --git a/src/widget/form/profileform.h b/src/widget/form/profileform.h index 3187f454c..450ffe491 100644 --- a/src/widget/form/profileform.h +++ b/src/widget/form/profileform.h @@ -83,6 +83,7 @@ private slots: void onRegisterButtonClicked(); private: + void showExistenToxme(); void retranslateUi(); void prFileLabelUpdate(); @@ -98,6 +99,7 @@ private: bool hasCheck = false; QRWidget *qr; ClickableTE* toxId; + void showRegisterToxme(); }; #endif diff --git a/src/widget/form/profileform.ui b/src/widget/form/profileform.ui index 9c21bec52..9118a4c6c 100644 --- a/src/widget/form/profileform.ui +++ b/src/widget/form/profileform.ui @@ -40,7 +40,7 @@ 0 0 536 - 802 + 844 @@ -86,109 +86,6 @@ - - - - Toxme register - - - - - - - - Biography - - - - - - - false - - - true - - - false - - - - - - - true - - - Your password - - - - - - - Hide my name from the public list - - - - - - - Register - - - false - - - false - - - false - - - - - - - Username - - - - - - - true - - - true - - - -1 - - - - - - - Server - - - - - - - false - - - - - - - - - - - @@ -256,6 +153,123 @@ Share it with your friends to communicate. + + + + Toxme register + + + + + + + + Username + + + + + + + false + + + + + + + Biography + + + + + + + + + + Server + + + + + + + true + + + true + + + -1 + + + + + + + Hide my name from the public list + + + + + + + true + + + Register + + + false + + + false + + + false + + + + + + + true + + + Your password + + + + + + + false + + + true + + + false + + + + + + + + + Update + + + + + + + + + + @@ -429,12 +443,12 @@ Profile does not contain your history. scrollArea userName statusMessage - dnsUsername - bio - serversList - privacy - registerButton - password + toxmeUsername + toxmeBio + toxmeServersList + toxmePrivacy + toxmeRegisterButton + toxmePassword toxId saveQr copyQr From 11ec3947f566e7083a6345ce2eea317f31219c5e Mon Sep 17 00:00:00 2001 From: Diadlo Date: Mon, 28 Mar 2016 22:05:10 +0300 Subject: [PATCH 07/16] fix(toxme): Fix possible segfault --- src/net/toxme.cpp | 37 +------------------------------------ 1 file changed, 1 insertion(+), 36 deletions(-) diff --git a/src/net/toxme.cpp b/src/net/toxme.cpp index 835c778f1..d24321cc6 100644 --- a/src/net/toxme.cpp +++ b/src/net/toxme.cpp @@ -86,6 +86,7 @@ QByteArray Toxme::getServerPubkey(QString url, QNetworkReply::NetworkError &erro static const QByteArray pattern{"key\":\""}; QString json = reply->readAll(); + delete reply; json = json.remove(' '); int start = json.indexOf(pattern) + pattern.length(); int end = json.indexOf("\"", start); @@ -335,39 +336,3 @@ QString Toxme::getErrorMessage(int errorCode) return QObject::tr("Unknown error (%1)").arg(errorCode); } } - -QString Toxme::getErrorMessage(int errorCode) -{ - switch (errorCode) { - case -1: - return QObject::tr("You must send POST requests to /api"); - case -2: - return QObject::tr("Please try again using a HTTPS connection"); - case -3: - return QObject::tr("I was unable to read your encrypted payload"); - case -4: - return QObject::tr("You're making too many requests. Wait an hour and try again"); - case -25: - return QObject::tr("This name is already in use"); - case -26: - return QObject::tr("This Tox ID is already registered under another name"); - case -27: - return QObject::tr("Please don't use a space in your name"); - case -28: - return QObject::tr("Password incorrect"); - case -29: - return QObject::tr("You can't use this name"); - case -30: - return QObject::tr("Name not found"); - case -31: - return QObject::tr("Tox ID not sent"); - case -41: - return QObject::tr("Lookup failed because the other server replied with invalid data"); - case -42: - return QObject::tr("That user does not exist"); - case -43: - return QObject::tr("Internal lookup error. Please file a bug"); - default: - return QObject::tr("Unknown error (%1)").arg(errorCode); - } -} From 8f4b6869f178c12a43d7d37336f32f8ecf7b1427 Mon Sep 17 00:00:00 2001 From: Diadlo Date: Fri, 8 Apr 2016 02:06:03 +0300 Subject: [PATCH 08/16] fix(toxme): Fixed potential memory leaks --- src/net/toxme.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/net/toxme.cpp b/src/net/toxme.cpp index d24321cc6..1d0b0ff95 100644 --- a/src/net/toxme.cpp +++ b/src/net/toxme.cpp @@ -54,7 +54,9 @@ QByteArray Toxme::makeJsonRequest(QString url, QString json, QNetworkReply::Netw return QByteArray(); } - return reply->readAll(); + QByteArray result = reply->readAll(); + delete reply; + return result; } QByteArray Toxme::getServerPubkey(QString url, QNetworkReply::NetworkError &error) @@ -236,7 +238,8 @@ QString Toxme::createAddress(ExecCode &code, QString server, ToxId id, QString a QString pubkeyUrl = server + "/pk"; QString apiUrl = server + "/api"; QNetworkReply::NetworkError error = QNetworkReply::NoError; - QByteArray response = makeJsonRequest(apiUrl, prepareEncryptedJson(pubkeyUrl, 1, payload), error); + QByteArray encrypted = prepareEncryptedJson(pubkeyUrl, 1, payload); + QByteArray response = makeJsonRequest(apiUrl, encrypted, error); qDebug() << response; code = extractError(response); From 2e9295f420fc6832091337813010319166450270 Mon Sep 17 00:00:00 2001 From: Diadlo Date: Fri, 8 Apr 2016 02:06:39 +0300 Subject: [PATCH 09/16] fix(profileform): Fixed segfault on logut --- src/widget/form/profileform.cpp | 41 ++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/widget/form/profileform.cpp b/src/widget/form/profileform.cpp index 30f0f57e1..d50541239 100644 --- a/src/widget/form/profileform.cpp +++ b/src/widget/form/profileform.cpp @@ -483,24 +483,27 @@ void ProfileForm::onRegisterButtonClicked() Toxme::ExecCode code = Toxme::ExecCode::Ok; QString response = Toxme::createAddress(code, server, id, name, privacy, bio); - switch (code) { - case Toxme::Updated: - QMessageBox::information(this, tr("Done!"), tr("Account %1@%2 updated successfully").arg(name, server), "Ok"); - Settings::getInstance().setToxme(name, server, bio, privacy); - showExistenToxme(); - break; - case Toxme::Ok: - QMessageBox::information(this, tr("Done!"), tr("Successfully added %1@%2 to the database. Save your password").arg(name, server), "Ok"); - Settings::getInstance().setToxme(name, server, bio, privacy, response); - showExistenToxme(); - break; - default: - QString errorMessage = Toxme::getErrorMessage(code); - QMessageBox::warning(this, tr("Toxme error"), errorMessage, "Ok"); - } + if (Core::getInstance()) + { + switch (code) { + case Toxme::Updated: + QMessageBox::information(this, tr("Done!"), tr("Account %1@%2 updated successfully").arg(name, server), "Ok"); + Settings::getInstance().setToxme(name, server, bio, privacy); + showExistenToxme(); + break; + case Toxme::Ok: + QMessageBox::information(this, tr("Done!"), tr("Successfully added %1@%2 to the database. Save your password").arg(name, server), "Ok"); + Settings::getInstance().setToxme(name, server, bio, privacy, response); + showExistenToxme(); + break; + default: + QString errorMessage = Toxme::getErrorMessage(code); + QMessageBox::warning(this, tr("Toxme error"), errorMessage, "Ok"); + } - bodyUI->toxmeRegisterButton->setEnabled(true); - bodyUI->toxmeUpdateButton->setEnabled(true); - bodyUI->toxmeRegisterButton->setText(tr("Register")); - bodyUI->toxmeUpdateButton->setText(tr("Update")); + bodyUI->toxmeRegisterButton->setEnabled(true); + bodyUI->toxmeUpdateButton->setEnabled(true); + bodyUI->toxmeRegisterButton->setText(tr("Register")); + bodyUI->toxmeUpdateButton->setText(tr("Update")); + } } From 88de3a0a7a09b89b0a621452e53b4d6d4ec3bfe8 Mon Sep 17 00:00:00 2001 From: Diadlo Date: Tue, 12 Apr 2016 01:59:03 +0300 Subject: [PATCH 10/16] fix(profileform): Fixed very quick relogin segfault --- src/widget/form/profileform.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/widget/form/profileform.cpp b/src/widget/form/profileform.cpp index d50541239..e99ae9629 100644 --- a/src/widget/form/profileform.cpp +++ b/src/widget/form/profileform.cpp @@ -480,25 +480,28 @@ void ProfileForm::onRegisterButtonClicked() if (name.isEmpty()) return; + Core* oldCore = Core::getInstance(); + Toxme::ExecCode code = Toxme::ExecCode::Ok; QString response = Toxme::createAddress(code, server, id, name, privacy, bio); - if (Core::getInstance()) + Core* newCore = Core::getInstance(); + if (oldCore == newCore) { switch (code) { case Toxme::Updated: - QMessageBox::information(this, tr("Done!"), tr("Account %1@%2 updated successfully").arg(name, server), "Ok"); + GUI::showInfo(tr("Done!"), tr("Account %1@%2 updated successfully").arg(name, server)); Settings::getInstance().setToxme(name, server, bio, privacy); showExistenToxme(); break; case Toxme::Ok: - QMessageBox::information(this, tr("Done!"), tr("Successfully added %1@%2 to the database. Save your password").arg(name, server), "Ok"); + GUI::showInfo(tr("Done!"), tr("Successfully added %1@%2 to the database. Save your password").arg(name, server)); Settings::getInstance().setToxme(name, server, bio, privacy, response); showExistenToxme(); break; default: QString errorMessage = Toxme::getErrorMessage(code); - QMessageBox::warning(this, tr("Toxme error"), errorMessage, "Ok"); + GUI::showWarning(tr("Toxme error"), errorMessage); } bodyUI->toxmeRegisterButton->setEnabled(true); From 1f7e23d007887a0e198b8643961f391a06faf36c Mon Sep 17 00:00:00 2001 From: Polshakov Dmitry Date: Tue, 12 Apr 2016 11:53:59 +0300 Subject: [PATCH 11/16] fix(profileform): Deleted extra check and extra url --- src/widget/form/profileform.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/widget/form/profileform.cpp b/src/widget/form/profileform.cpp index e99ae9629..84c71ef2d 100644 --- a/src/widget/form/profileform.cpp +++ b/src/widget/form/profileform.cpp @@ -84,7 +84,6 @@ ProfileForm::ProfileForm(QWidget *parent) : /* Toxme section init */ bodyUI->toxmeServersList->addItem("toxme.io"); - bodyUI->toxmeServersList->addItem("toxme.io"); QString toxmeInfo = Settings::getInstance().getToxmeInfo(); if (toxmeInfo.isEmpty()) // User not registered showRegisterToxme(); @@ -477,8 +476,6 @@ void ProfileForm::onRegisterButtonClicked() QString bio = bodyUI->toxmeBio->text(); QString server = bodyUI->toxmeServersList->currentText(); bool privacy = bodyUI->toxmePrivacy->isChecked(); - if (name.isEmpty()) - return; Core* oldCore = Core::getInstance(); From 132f87c05e89e21824efa2c4dfef83d807e0f5bf Mon Sep 17 00:00:00 2001 From: Polshakov Dmitry Date: Tue, 12 Apr 2016 12:27:21 +0300 Subject: [PATCH 12/16] fix(profileform): Add toxme username limitation --- src/widget/form/profileform.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/widget/form/profileform.cpp b/src/widget/form/profileform.cpp index 84c71ef2d..a76d43c34 100644 --- a/src/widget/form/profileform.cpp +++ b/src/widget/form/profileform.cpp @@ -92,6 +92,10 @@ ProfileForm::ProfileForm(QWidget *parent) : bodyUI->qrLabel->setWordWrap(true); + QRegExp re("[^@ ]+"); + QRegExpValidator* validator = new QRegExpValidator(re); + bodyUI->toxmeUsername->setValidator(validator); + profilePicture = new MaskablePixmapWidget(this, QSize(64, 64), ":/img/avatar_mask.svg"); profilePicture->setPixmap(QPixmap(":/img/contact_dark.svg")); profilePicture->setContextMenuPolicy(Qt::CustomContextMenu); From 2dc3dd69645bdc18da9b5e10390e81110fc67630 Mon Sep 17 00:00:00 2001 From: Polshakov Dmitry Date: Wed, 13 Apr 2016 00:48:19 +0300 Subject: [PATCH 13/16] style(profileform): Changed local include brackets type --- src/widget/form/profileform.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/widget/form/profileform.cpp b/src/widget/form/profileform.cpp index a76d43c34..bd30539fb 100644 --- a/src/widget/form/profileform.cpp +++ b/src/widget/form/profileform.cpp @@ -24,15 +24,16 @@ #include "src/widget/form/settingswidget.h" #include "src/widget/maskablepixmapwidget.h" #include "src/widget/form/setpassworddialog.h" -#include "src/persistence/settings.h" #include "src/widget/contentlayout.h" #include "src/widget/tool/croppinglabel.h" #include "src/widget/widget.h" #include "src/widget/gui.h" #include "src/widget/style.h" +#include "src/widget/translator.h" #include "src/persistence/profilelocker.h" #include "src/persistence/profile.h" -#include "src/widget/translator.h" +#include "src/persistence/settings.h" +#include "src/net/toxme.h" #include #include #include @@ -46,7 +47,6 @@ #include #include #include -#include ProfileForm::ProfileForm(QWidget *parent) : QWidget{parent}, qr{nullptr} From a146c43a1ebf8ff7fdb4ae389cdc863cdb1d1577 Mon Sep 17 00:00:00 2001 From: Polshakov Dmitry Date: Wed, 13 Apr 2016 01:20:16 +0300 Subject: [PATCH 14/16] refactor(profileform): Small changes * Renamed function * Added comment --- src/widget/form/profileform.cpp | 10 ++++++---- src/widget/form/profileform.h | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/widget/form/profileform.cpp b/src/widget/form/profileform.cpp index bd30539fb..4e5d83dad 100644 --- a/src/widget/form/profileform.cpp +++ b/src/widget/form/profileform.cpp @@ -88,7 +88,7 @@ ProfileForm::ProfileForm(QWidget *parent) : if (toxmeInfo.isEmpty()) // User not registered showRegisterToxme(); else - showExistenToxme(); + showExistingToxme(); bodyUI->qrLabel->setWordWrap(true); @@ -444,7 +444,7 @@ void ProfileForm::showRegisterToxme() bodyUI->toxmePasswordLabel->hide(); } -void ProfileForm::showExistenToxme() +void ProfileForm::showExistingToxme() { QStringList info = Settings::getInstance().getToxmeInfo().split("@"); bodyUI->toxmeUsername->setText(info[0]); @@ -487,18 +487,20 @@ void ProfileForm::onRegisterButtonClicked() QString response = Toxme::createAddress(code, server, id, name, privacy, bio); Core* newCore = Core::getInstance(); + // Make sure the user didn't logout (or logout and login) + // before the request is finished, else qTox will crash. if (oldCore == newCore) { switch (code) { case Toxme::Updated: GUI::showInfo(tr("Done!"), tr("Account %1@%2 updated successfully").arg(name, server)); Settings::getInstance().setToxme(name, server, bio, privacy); - showExistenToxme(); + showExistingToxme(); break; case Toxme::Ok: GUI::showInfo(tr("Done!"), tr("Successfully added %1@%2 to the database. Save your password").arg(name, server)); Settings::getInstance().setToxme(name, server, bio, privacy, response); - showExistenToxme(); + showExistingToxme(); break; default: QString errorMessage = Toxme::getErrorMessage(code); diff --git a/src/widget/form/profileform.h b/src/widget/form/profileform.h index 450ffe491..9575655cc 100644 --- a/src/widget/form/profileform.h +++ b/src/widget/form/profileform.h @@ -83,7 +83,7 @@ private slots: void onRegisterButtonClicked(); private: - void showExistenToxme(); + void showExistingToxme(); void retranslateUi(); void prFileLabelUpdate(); From d1b706a4b3926fc3bd1f7af115358cf171080021 Mon Sep 17 00:00:00 2001 From: Diadlo Date: Sat, 16 Apr 2016 01:32:37 +0300 Subject: [PATCH 15/16] fix(toxme): Delete extra check Result is checked in response "c" value --- src/net/toxme.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/net/toxme.cpp b/src/net/toxme.cpp index 1d0b0ff95..9a7e3d567 100644 --- a/src/net/toxme.cpp +++ b/src/net/toxme.cpp @@ -47,13 +47,6 @@ QByteArray Toxme::makeJsonRequest(QString url, QString json, QNetworkReply::Netw qApp->processEvents(); } - error = reply->error(); - if (error) - { - qWarning() << "makeJsonRequest: A network error occured:" << reply->errorString(); - return QByteArray(); - } - QByteArray result = reply->readAll(); delete reply; return result; From ed606eadb456037e74b3c86975285cba7e5b1373 Mon Sep 17 00:00:00 2001 From: Diadlo Date: Sat, 16 Apr 2016 01:42:21 +0300 Subject: [PATCH 16/16] refactor(toxme): Deleted old debug messages --- src/net/toxme.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/net/toxme.cpp b/src/net/toxme.cpp index 9a7e3d567..5a91d1e29 100644 --- a/src/net/toxme.cpp +++ b/src/net/toxme.cpp @@ -227,13 +227,11 @@ QString Toxme::createAddress(ExecCode &code, QString server, ToxId id, QString a "\"bio\":\""+bio+"\"," "\"timestamp\":"+QString().setNum(time(0))+"}"}; - qDebug() << payload; QString pubkeyUrl = server + "/pk"; QString apiUrl = server + "/api"; QNetworkReply::NetworkError error = QNetworkReply::NoError; QByteArray encrypted = prepareEncryptedJson(pubkeyUrl, 1, payload); QByteArray response = makeJsonRequest(apiUrl, encrypted, error); - qDebug() << response; code = extractError(response); if ((code != Ok && code != Updated) || error != QNetworkReply::NoError) @@ -282,7 +280,6 @@ Toxme::ExecCode Toxme::deleteAddress(QString server, ToxId id) if (!server.contains("://")) server = "https://" + server; - qDebug() << payload; QString pubkeyUrl = server + "/pk"; QString apiUrl = server + "/api"; QNetworkReply::NetworkError error = QNetworkReply::NoError;