From 42e8f455b221c531205a3ed2032f2d39a8ad02ac Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Fri, 9 Aug 2019 19:27:09 +0200 Subject: [PATCH] more work on oauth --- libnymea-app-core/devicemanager.cpp | 3 ++- libnymea-app-core/devicemanager.h | 2 +- libnymea-app-core/jsonrpc/jsontypes.cpp | 2 ++ libnymea-common/types/deviceclass.h | 1 + .../ui/thingconfiguration/SetupWizard.qml | 20 ++++++++++++------- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/libnymea-app-core/devicemanager.cpp b/libnymea-app-core/devicemanager.cpp index 32e4e680..93185796 100644 --- a/libnymea-app-core/devicemanager.cpp +++ b/libnymea-app-core/devicemanager.cpp @@ -373,12 +373,13 @@ void DeviceManager::pairDevice(const QUuid &deviceClassId, const QString &name, m_jsonClient->sendCommand("Devices.PairDevice", params, this, "pairDeviceResponse"); } -void DeviceManager::confirmPairing(const QUuid &pairingTransactionId, const QString &secret) +void DeviceManager::confirmPairing(const QUuid &pairingTransactionId, const QString &secret, const QString &username) { qDebug() << "JsonRpc: confirm pairing" << pairingTransactionId.toString(); QVariantMap params; params.insert("pairingTransactionId", pairingTransactionId.toString()); params.insert("secret", secret); + params.insert("username", username); m_jsonClient->sendCommand("Devices.ConfirmPairing", params, this, "confirmPairingResponse"); } diff --git a/libnymea-app-core/devicemanager.h b/libnymea-app-core/devicemanager.h index a0029bf0..49623473 100644 --- a/libnymea-app-core/devicemanager.h +++ b/libnymea-app-core/devicemanager.h @@ -70,7 +70,7 @@ public: Q_INVOKABLE void addDiscoveredDevice(const QUuid &deviceClassId, const QUuid &deviceDescriptorId, const QString &name, const QVariantList &deviceParams); Q_INVOKABLE void pairDevice(const QUuid &deviceClassId, const QUuid &deviceDescriptorId, const QString &name); Q_INVOKABLE void pairDevice(const QUuid &deviceClassId, const QString &name, const QVariantList &deviceParams); - Q_INVOKABLE void confirmPairing(const QUuid &pairingTransactionId, const QString &secret = QString()); + Q_INVOKABLE void confirmPairing(const QUuid &pairingTransactionId, const QString &secret = QString(), const QString &username = QString()); Q_INVOKABLE void removeDevice(const QUuid &deviceId, RemovePolicy policy = RemovePolicyNone); Q_INVOKABLE void editDevice(const QUuid &deviceId, const QString &name); Q_INVOKABLE void setDeviceSettings(const QUuid &deviceId, const QVariantList &settings); diff --git a/libnymea-app-core/jsonrpc/jsontypes.cpp b/libnymea-app-core/jsonrpc/jsontypes.cpp index 288e68e1..42e5c65d 100644 --- a/libnymea-app-core/jsonrpc/jsontypes.cpp +++ b/libnymea-app-core/jsonrpc/jsontypes.cpp @@ -494,6 +494,8 @@ DeviceClass::SetupMethod JsonTypes::stringToSetupMethod(const QString &setupMeth return DeviceClass::SetupMethodPushButton; } else if (setupMethodString == "SetupMethodOAuth") { return DeviceClass::SetupMethodOAuth; + } else if (setupMethodString == "SetupMethodUserAndPassword") { + return DeviceClass::SetupMethodUserAndPassword; } return DeviceClass::SetupMethodJustAdd; } diff --git a/libnymea-common/types/deviceclass.h b/libnymea-common/types/deviceclass.h index 0041bdca..eace4368 100644 --- a/libnymea-common/types/deviceclass.h +++ b/libnymea-common/types/deviceclass.h @@ -63,6 +63,7 @@ public: SetupMethodEnterPin, SetupMethodPushButton, SetupMethodOAuth, + SetupMethodUserAndPassword, }; Q_ENUM(SetupMethod) diff --git a/nymea-app/ui/thingconfiguration/SetupWizard.qml b/nymea-app/ui/thingconfiguration/SetupWizard.qml index 4b9d3334..207adfc3 100644 --- a/nymea-app/ui/thingconfiguration/SetupWizard.qml +++ b/nymea-app/ui/thingconfiguration/SetupWizard.qml @@ -73,14 +73,11 @@ Page { switch (params["setupMethod"]) { case "SetupMethodPushButton": - print("response", params["displayMessage"], d.pairingTransactionId) - internalPageStack.push(pairingPageComponent, {text: params["displayMessage"]}) - break; case "SetupMethodDisplayPin": + case "SetupMethodUserAndPassword": internalPageStack.push(pairingPageComponent, {text: params["displayMessage"], setupMethod: params["setupMethod"]}) break; case "SetupMethodOAuth": - print("OAuth URL:", params["oAuthUrl"]); internalPageStack.push(oAuthPageComponent, {oAuthUrl: params["oAuthUrl"]}) break; default: @@ -378,13 +375,14 @@ Page { case 2: case 3: case 4: + case 5: if (root.device) { // if (d.deviceDescriptor) { // engine.deviceManager.pairDevice(root.deviceClass.id, d.deviceDescriptor.id, nameTextField.text); // } else { // engine.deviceManager.pairDevice(root.deviceClass.id, nameTextField.text, params); // } - console.warn("Unhandle setupMethod!") + console.warn("Unhandled setupMethod!") return; } else { if (d.deviceDescriptor) { @@ -434,17 +432,25 @@ Page { wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter } + + TextField { + id: usernameTextField + Layout.fillWidth: true + visible: pairingPage.setupMethod === "SetupMethodUserAndPassword" + } + TextField { id: pinTextField Layout.fillWidth: true - visible: pairingPage.setupMethod === "SetupMethodDisplayPin" + visible: pairingPage.setupMethod === "SetupMethodDisplayPin" || pairingPage.setupMethod === "SetupMethodUserAndPassword" } + Button { Layout.fillWidth: true text: "OK" onClicked: { - engine.deviceManager.confirmPairing(d.pairingTransactionId, pinTextField.displayText); + engine.deviceManager.confirmPairing(d.pairingTransactionId, pinTextField.displayText, usernameTextField.displayText); } } }