aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2019-09-10 11:19:36 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-09-11 21:50:41 +0100
commitd717b9d2a70ac778262ba4f525dd7d4972d348cd (patch)
treef63784e779f93112ea07fa56d4911de02719d58e
parent6ab410521125366ac75f55145b5aafc6e9434d58 (diff)
downloadsubsurface-d717b9d2a70ac778262ba4f525dd7d4972d348cd.tar.gz
Mobile: add helper function to check cloud credentials
This should do the right thing in the various situations of correct & verified credentials, credentials needing PIN verification, invalid email/password combination, incorrect PIN, correct PIN. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--mobile-widgets/qmlmanager.cpp44
-rw-r--r--mobile-widgets/qmlmanager.h1
2 files changed, 45 insertions, 0 deletions
diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp
index 605525d67..f55cb0caf 100644
--- a/mobile-widgets/qmlmanager.cpp
+++ b/mobile-widgets/qmlmanager.cpp
@@ -535,6 +535,50 @@ void QMLManager::saveCloudCredentials()
}
}
+bool QMLManager::verifyCredentials(QString email, QString password, QString pin)
+{
+ setStartPageText(tr("Testing cloud credentials"));
+ if (pin.isEmpty())
+ appendTextToLog(QStringLiteral("verify credentials for email %1 (no PIN)").arg(email, pin));
+ else
+ appendTextToLog(QStringLiteral("verify credentials for email %1 PIN %2").arg(email, pin));
+ CloudStorageAuthenticate *csa = new CloudStorageAuthenticate(this);
+ csa->backend(email, password, pin);
+ // let's wait here for the signal to avoid too many more nested functions
+ QTimer myTimer;
+ myTimer.setSingleShot(true);
+ QEventLoop loop;
+ connect(csa, &CloudStorageAuthenticate::finishedAuthenticate, &loop, &QEventLoop::quit);
+ connect(&myTimer, &QTimer::timeout, &loop, &QEventLoop::quit);
+ myTimer.start(5000);
+ loop.exec();
+ if (!myTimer.isActive()) {
+ // got no response from the server
+ setStartPageText(RED_FONT + tr("No response from cloud server to validate the credentials") + END_FONT);
+ return false;
+ }
+ myTimer.stop();
+ if (prefs.cloud_verification_status == qPrefCloudStorage::CS_INCORRECT_USER_PASSWD) {
+ appendTextToLog(QStringLiteral("Incorrect email / password combination"));
+ setStartPageText(RED_FONT + tr("Incorrect email / password combination") + END_FONT);
+ return false;
+ } else if (prefs.cloud_verification_status == qPrefCloudStorage::CS_NEED_TO_VERIFY) {
+ if (pin.isEmpty()) {
+ appendTextToLog(QStringLiteral("Cloud credentials require PIN entry"));
+ setStartPageText(RED_FONT + tr("Cloud credentials require verification PIN") + END_FONT);
+ } else {
+ appendTextToLog(QStringLiteral("PIN provided but not accepted"));
+ setStartPageText(RED_FONT + tr("Incorrect PIN, please try again") + END_FONT);
+ }
+ QMLPrefs::instance()->setShowPin(true);
+ return false;
+ } else if (prefs.cloud_verification_status == qPrefCloudStorage::CS_VERIFIED) {
+ appendTextToLog(QStringLiteral("PIN accepted"));
+ setStartPageText(RED_FONT + tr("PIN accepted, credentials verified") + END_FONT);
+ }
+ return true;
+}
+
void QMLManager::tryRetrieveDataFromBackend()
{
// if the cloud credentials are present, we should try to get the GPS Webservice ID
diff --git a/mobile-widgets/qmlmanager.h b/mobile-widgets/qmlmanager.h
index 70fd59f2b..12dbf6f8a 100644
--- a/mobile-widgets/qmlmanager.h
+++ b/mobile-widgets/qmlmanager.h
@@ -148,6 +148,7 @@ public slots:
void appInitialized();
void applicationStateChanged(Qt::ApplicationState state);
void saveCloudCredentials();
+ bool verifyCredentials(QString email, QString password, QString pin);
void tryRetrieveDataFromBackend();
void handleError(QNetworkReply::NetworkError nError);
void handleSslErrors(const QList<QSslError> &errors);