From eebf6de1528f01b4f1f7d77a8fc9640c58b8cc80 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Tue, 23 Oct 2018 00:31:36 +0200 Subject: [PATCH] allow overriding the used AWS user pool with styling --- libnymea-app-core/connection/awsclient.cpp | 89 ++++++++++--------- libnymea-app-core/connection/awsclient.h | 12 +-- nymea-app/styles/dark/ApplicationWindow.qml | 3 +- nymea-app/styles/light/ApplicationWindow.qml | 2 + nymea-app/ui/Nymea.qml | 2 +- nymea-app/ui/RootItem.qml | 2 +- .../ui/appsettings/DeveloperOptionsPage.qml | 6 +- 7 files changed, 65 insertions(+), 51 deletions(-) diff --git a/libnymea-app-core/connection/awsclient.cpp b/libnymea-app-core/connection/awsclient.cpp index f73f0f3b..caff54d5 100644 --- a/libnymea-app-core/connection/awsclient.cpp +++ b/libnymea-app-core/connection/awsclient.cpp @@ -70,7 +70,7 @@ AWSClient::AWSClient(QObject *parent) : QObject(parent), config.region = "eu-west-1"; config.apiEndpoint = "api-cloud.guh.io"; config.pushNotificationSystem = pushSystem; - m_configs.append(config); + m_configs.insert("Community", config); // Testing environment config.clientId = "8rjhfdlf9jf1suok2jcrltd6v"; @@ -83,7 +83,7 @@ AWSClient::AWSClient(QObject *parent) : QObject(parent), config.region = "eu-west-1"; config.apiEndpoint = "testapi-cloud.guh.io"; config.pushNotificationSystem = pushSystem == "APNS" ? pushSystem + "_SANDBOX" : pushSystem; - m_configs.append(config); + m_configs.insert("Testing", config); // Marantec environment config.clientId = "7rf6da8pcqi1qi8tp1evf933h2"; @@ -97,7 +97,7 @@ AWSClient::AWSClient(QObject *parent) : QObject(parent), config.region = "eu-west-1"; config.apiEndpoint = "api-cloud.guh.io"; config.pushNotificationSystem = pushSystem; - m_configs.append(config); + m_configs.insert("Marantec", config); QSettings settings; settings.beginGroup("cloud"); @@ -165,7 +165,7 @@ void AWSClient::login(const QString &username, const QString &password, int atte // Ideally we'd use the refresh token and not store the password at all (see: refreshAccessToken()) m_password = password; - QString host = QString("cognito-idp.%1.amazonaws.com").arg(m_configs.at(m_usedConfigIndex).region); + QString host = QString("cognito-idp.%1.amazonaws.com").arg(m_configs.value(m_usedConfig).region); QUrl url(QString("https://%1/").arg(host)); QUrlQuery query; @@ -180,7 +180,7 @@ void AWSClient::login(const QString &username, const QString &password, int atte QVariantMap params; params.insert("AuthFlow", "USER_PASSWORD_AUTH"); - params.insert("ClientId", m_configs.at(m_usedConfigIndex).clientId); + params.insert("ClientId", m_configs.value(m_usedConfig).clientId); QVariantMap authParams; authParams.insert("USERNAME", username); @@ -258,7 +258,7 @@ void AWSClient::signup(const QString &username, const QString &password) m_username = username; m_password = password; - QString host = QString("cognito-idp.%1.amazonaws.com").arg(m_configs.at(m_usedConfigIndex).region); + QString host = QString("cognito-idp.%1.amazonaws.com").arg(m_configs.value(m_usedConfig).region); QUrl url(QString("https://%1/").arg(host)); QUrlQuery query; @@ -272,7 +272,7 @@ void AWSClient::signup(const QString &username, const QString &password) request.setRawHeader("X-Amz-Target", "AWSCognitoIdentityProviderService.SignUp"); QVariantMap params; - params.insert("ClientId", m_configs.at(m_usedConfigIndex).clientId); + params.insert("ClientId", m_configs.value(m_usedConfig).clientId); params.insert("Username", m_userId); params.insert("Password", password); @@ -317,7 +317,7 @@ void AWSClient::signup(const QString &username, const QString &password) void AWSClient::confirmRegistration(const QString &code) { - QString host = QString("cognito-idp.%1.amazonaws.com").arg(m_configs.at(m_usedConfigIndex).region); + QString host = QString("cognito-idp.%1.amazonaws.com").arg(m_configs.value(m_usedConfig).region); QUrl url(QString("https://%1/").arg(host)); QUrlQuery query; @@ -331,7 +331,7 @@ void AWSClient::confirmRegistration(const QString &code) request.setRawHeader("X-Amz-Target", "AWSCognitoIdentityProviderService.ConfirmSignUp"); QVariantMap params; - params.insert("ClientId", m_configs.at(m_usedConfigIndex).clientId); + params.insert("ClientId", m_configs.value(m_usedConfig).clientId); params.insert("Username", m_userId); params.insert("ConfirmationCode", code); @@ -376,7 +376,7 @@ void AWSClient::confirmRegistration(const QString &code) void AWSClient::forgotPassword(const QString &username) { - QString host = QString("cognito-idp.%1.amazonaws.com").arg(m_configs.at(m_usedConfigIndex).region); + QString host = QString("cognito-idp.%1.amazonaws.com").arg(m_configs.value(m_usedConfig).region); QUrl url(QString("https://%1/").arg(host)); QUrlQuery query; @@ -390,7 +390,7 @@ void AWSClient::forgotPassword(const QString &username) request.setRawHeader("X-Amz-Target", "AWSCognitoIdentityProviderService.ForgotPassword"); QVariantMap params; - params.insert("ClientId", m_configs.at(m_usedConfigIndex).clientId); + params.insert("ClientId", m_configs.value(m_usedConfig).clientId); params.insert("Username", username); QJsonDocument jsonDoc = QJsonDocument::fromVariant(params); @@ -425,7 +425,7 @@ void AWSClient::forgotPassword(const QString &username) void AWSClient::confirmForgotPassword(const QString &username, const QString &code, const QString &newPassword) { - QString host = QString("cognito-idp.%1.amazonaws.com").arg(m_configs.at(m_usedConfigIndex).region); + QString host = QString("cognito-idp.%1.amazonaws.com").arg(m_configs.value(m_usedConfig).region); QUrl url(QString("https://%1/").arg(host)); QUrlQuery query; @@ -439,7 +439,7 @@ void AWSClient::confirmForgotPassword(const QString &username, const QString &co request.setRawHeader("X-Amz-Target", "AWSCognitoIdentityProviderService.ConfirmForgotPassword"); QVariantMap params; - params.insert("ClientId", m_configs.at(m_usedConfigIndex).clientId); + params.insert("ClientId", m_configs.value(m_usedConfig).clientId); params.insert("ConfirmationCode", code); params.insert("Username", username); params.insert("Password", newPassword); @@ -480,7 +480,7 @@ void AWSClient::deleteAccount() } qDebug() << "Deleting account"; - QUrl url(QString("https://%1/users/profiles/%2").arg(m_configs.at(m_usedConfigIndex).apiEndpoint).arg(m_userId)); + QUrl url(QString("https://%1/users/profiles/%2").arg(m_configs.value(m_usedConfig).apiEndpoint).arg(m_userId)); QNetworkRequest request(url); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); request.setRawHeader("x-api-idToken", m_idToken); @@ -526,7 +526,7 @@ void AWSClient::unpairDevice(const QString &boxId) return; } qDebug() << "unpairing device"; - QUrl url(QString("https://%1/users/devices/%2").arg(m_configs.at(m_usedConfigIndex).apiEndpoint).arg(boxId)); + QUrl url(QString("https://%1/users/devices/%2").arg(m_configs.value(m_usedConfig).apiEndpoint).arg(boxId)); QNetworkRequest request(url); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); request.setRawHeader("x-api-idToken", m_idToken); @@ -555,7 +555,7 @@ void AWSClient::unpairDevice(const QString &boxId) void AWSClient::getId() { - QString host = QString("cognito-identity.%1.amazonaws.com").arg(m_configs.at(m_usedConfigIndex).region); + QString host = QString("cognito-identity.%1.amazonaws.com").arg(m_configs.value(m_usedConfig).region); QUrl url(QString("https://%1/").arg(host)); QUrlQuery query; @@ -569,10 +569,10 @@ void AWSClient::getId() request.setRawHeader("X-Amz-Target", "AWSCognitoIdentityService.GetId"); QVariantMap logins; - logins.insert(QString("cognito-idp.%1.amazonaws.com/%2").arg(m_configs.at(m_usedConfigIndex).region).arg(m_configs.at(m_usedConfigIndex).poolId).toUtf8(), m_idToken); + logins.insert(QString("cognito-idp.%1.amazonaws.com/%2").arg(m_configs.value(m_usedConfig).region).arg(m_configs.value(m_usedConfig).poolId).toUtf8(), m_idToken); QVariantMap params; - params.insert("IdentityPoolId", m_configs.at(m_usedConfigIndex).identityPoolId.toUtf8()); + params.insert("IdentityPoolId", m_configs.value(m_usedConfig).identityPoolId.toUtf8()); params.insert("Logins", logins); QJsonDocument jsonDoc = QJsonDocument::fromVariant(params); @@ -615,7 +615,7 @@ void AWSClient::registerPushNotificationEndpoint(const QString ®istrationId, return; } - QUrl url(QString("https://%1/notifications/endpoints/%2").arg(m_configs.at(m_usedConfigIndex).apiEndpoint).arg(m_userId)); + QUrl url(QString("https://%1/notifications/endpoints/%2").arg(m_configs.value(m_usedConfig).apiEndpoint).arg(m_userId)); QNetworkRequest request(url); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); request.setRawHeader("x-api-idToken", m_idToken); @@ -623,7 +623,7 @@ void AWSClient::registerPushNotificationEndpoint(const QString ®istrationId, QVariantMap payload; payload.insert("registrationId", registrationId); - payload.insert("channel", m_configs.at(m_usedConfigIndex).pushNotificationSystem); + payload.insert("channel", m_configs.value(m_usedConfig).pushNotificationSystem); payload.insert("mobileDeviceDisplayName", deviceDisplayName); payload.insert("mobileDeviceUuid", mobileDeviceId); QJsonDocument jsonDoc = QJsonDocument::fromVariant(payload); @@ -663,13 +663,13 @@ void AWSClient::fetchCertificate(const QString &uuid, std::functionget(request); - qDebug() << "Fetching certificate for vendor:" << m_configs.at(m_usedConfigIndex).certificateVendorId << "device id:" << fixedUuid; + qDebug() << "Fetching certificate for vendor:" << m_configs.value(m_usedConfig).certificateVendorId << "device id:" << fixedUuid; connect(reply, &QNetworkReply::finished, this, [this, reply, callback]() { reply->deleteLater(); QByteArray data = reply->readAll(); @@ -690,28 +690,37 @@ void AWSClient::fetchCertificate(const QString &uuid, std::function callback); - int config() const; - void setConfig(int index); + QStringList availableConfigs() const; + QString config() const; + void setConfig(const QString &config); signals: void loginResult(LoginError error); @@ -204,8 +206,8 @@ private: QList m_callQueue; - QList m_configs; - int m_usedConfigIndex = 0; + QHash m_configs; + QString m_usedConfig = "community"; AWSDevices *m_devices; }; diff --git a/nymea-app/styles/dark/ApplicationWindow.qml b/nymea-app/styles/dark/ApplicationWindow.qml index 451c3478..25256474 100644 --- a/nymea-app/styles/dark/ApplicationWindow.qml +++ b/nymea-app/styles/dark/ApplicationWindow.qml @@ -33,5 +33,6 @@ ApplicationWindow { "pressuresensor": "grey" } - property bool industrialSetup: true + // Optional: Set this to override the cloud environment + //property string cloudEnvironment: "Community" } diff --git a/nymea-app/styles/light/ApplicationWindow.qml b/nymea-app/styles/light/ApplicationWindow.qml index 9bb576e7..001b0667 100644 --- a/nymea-app/styles/light/ApplicationWindow.qml +++ b/nymea-app/styles/light/ApplicationWindow.qml @@ -31,4 +31,6 @@ ApplicationWindow { "pressuresensor": "grey" } + // Optional: Set this to override the cloud environment + //property string cloudEnvironment: "Community" } diff --git a/nymea-app/ui/Nymea.qml b/nymea-app/ui/Nymea.qml index 9979e97f..dd88c856 100644 --- a/nymea-app/ui/Nymea.qml +++ b/nymea-app/ui/Nymea.qml @@ -39,7 +39,7 @@ ApplicationWindow { property string style: "light" property int currentMainViewIndex: 0 property bool showHiddenOptions: false - property int cloudEnvironment: 0 + property string cloudEnvironment: "community" property bool showConnectionTabs: false property int tabCount: 1 } diff --git a/nymea-app/ui/RootItem.qml b/nymea-app/ui/RootItem.qml index ba10a727..f2dd08d0 100644 --- a/nymea-app/ui/RootItem.qml +++ b/nymea-app/ui/RootItem.qml @@ -83,7 +83,7 @@ Item { Binding { target: AWSClient property: "config" - value: settings.cloudEnvironment + value: "cloudEnvironment" in app ? app.cloudEnvironment : settings.cloudEnvironment } Component.onCompleted: { diff --git a/nymea-app/ui/appsettings/DeveloperOptionsPage.qml b/nymea-app/ui/appsettings/DeveloperOptionsPage.qml index 267770f4..c167d2b4 100644 --- a/nymea-app/ui/appsettings/DeveloperOptionsPage.qml +++ b/nymea-app/ui/appsettings/DeveloperOptionsPage.qml @@ -24,10 +24,10 @@ Page { } ComboBox { - currentIndex: app.settings.cloudEnvironment - model: [qsTr("Community"), qsTr("Testing"), qsTr("Marantec")] + currentIndex: model.indexOf(app.settings.cloudEnvironment) + model: AWSClient.availableConfigs onActivated: { - app.settings.cloudEnvironment = index; + app.settings.cloudEnvironment = model[index]; } } }