diff --git a/storybook/qmlTests/tests/tst_DAppsWorkflow.qml b/storybook/qmlTests/tests/tst_DAppsWorkflow.qml index 23538c71f..c8922453a 100644 --- a/storybook/qmlTests/tests/tst_DAppsWorkflow.qml +++ b/storybook/qmlTests/tests/tst_DAppsWorkflow.qml @@ -78,6 +78,7 @@ Item { // Component { // id: dappsStoreComponent + // DAppsStore { // property string dappsListReceivedJsonStr: '[]' @@ -133,7 +134,7 @@ Item { // emoji: "😋" // color: "#2A4AF5" // } - // ListElement { address: "0x3" } + // ListElement { address: "0x3a" } // } // readonly property ListModel ownAccounts: accounts // } @@ -183,6 +184,23 @@ Item { // compare(store.signMessageCalls.length, 1, "expected a call to store.signMessage") // compare(store.signMessageCalls[0].message, td.request.data) // } + + // function test_onSessionRequestEventDifferentCaseForAddress() { + // let sdk = handler.sdk + + // let testAddressUpper = "0x3A" + // let chainId = 2 + // let method = "personal_sign" + // let message = "hello world" + // let params = [Helpers.strToHex(message), testAddressUpper] + // let topic = "b536a" + // let session = JSON.parse(Testing.formatSessionRequest(chainId, method, params, topic)) + // // Expect to have calls to getActiveSessions from service initialization + // let prevRequests = sdk.getActiveSessionsCallbacks.length + // sdk.sessionRequestEvent(session) + + // compare(sdk.getActiveSessionsCallbacks.length, 1, "expected DAppsRequestHandler call sdk.getActiveSessions") + // } // } // TestCase { @@ -298,7 +316,7 @@ Item { // let walletStore = service.walletStore // let store = service.store - // let testAddress = "0x3" + // let testAddress = "0x3a" // let chainId = 2 // let method = "personal_sign" // let message = "hello world" diff --git a/ui/StatusQ/src/StatusQ/Core/Utils/ModelUtils.qml b/ui/StatusQ/src/StatusQ/Core/Utils/ModelUtils.qml index ea509e53f..bf6a7f700 100644 --- a/ui/StatusQ/src/StatusQ/Core/Utils/ModelUtils.qml +++ b/ui/StatusQ/src/StatusQ/Core/Utils/ModelUtils.qml @@ -138,4 +138,22 @@ QtObject { function roleNames(model) { return Internal.ModelUtils.roleNames(model) } + + /// Returns the first model entry that satisfies the condition function or null if none is found. + function getFirstModelEntryIf(model, conditionFn) { + if (!model) + return null + + const count = model.rowCount() + + for (let i = 0; i < count; i++) { + const modelItem = Internal.ModelUtils.get(model, i) + + if (conditionFn(modelItem)) { + return modelItem + } + } + + return null + } } diff --git a/ui/app/AppLayouts/Wallet/services/dapps/DAppsRequestHandler.qml b/ui/app/AppLayouts/Wallet/services/dapps/DAppsRequestHandler.qml index 5848b700a..930cbc0f4 100644 --- a/ui/app/AppLayouts/Wallet/services/dapps/DAppsRequestHandler.qml +++ b/ui/app/AppLayouts/Wallet/services/dapps/DAppsRequestHandler.qml @@ -112,8 +112,20 @@ QObject { function resolveAsync(event) { let method = event.params.request.method let account = lookupAccountFromEvent(event, method) + if(!account) { + console.error("Error finding account for event", JSON.stringify(event)) + return null + } let network = lookupNetworkFromEvent(event, method) + if(!network) { + console.error("Error finding network for event", JSON.stringify(event)) + return null + } let data = extractMethodData(event, method) + if(!data) { + console.error("Error in event data lookup", JSON.stringify(event)) + return null + } let obj = sessionRequestComponent.createObject(null, { event, topic: event.topic, @@ -175,7 +187,9 @@ QObject { } address = event.params.request.params[0].from } - return ModelUtils.getByKey(walletStore.ownAccounts, "address", address) + return ModelUtils.getFirstModelEntryIf(walletStore.ownAccounts, (account) => { + return account.address.toLowerCase() === address.toLowerCase() + }) } /// Returns null if the network is not found