From a36f0d8ce83ed9a29c1016e4146a272729725fe5 Mon Sep 17 00:00:00 2001 From: Alexandra Betouni <31625338+alexandraB99@users.noreply.github.com> Date: Mon, 31 Jul 2023 18:56:00 +0300 Subject: [PATCH] feat(Communities): changes in import popup for private keys Closes #11245 --- .../doc/src/images/status_warning_box.png | Bin 0 -> 37261 bytes .../src/StatusQ/Controls/StatusWarningBox.qml | 111 ++++++++++++ ui/StatusQ/src/StatusQ/Controls/qmldir | 1 + ui/StatusQ/src/assets.qrc | 1 + ui/StatusQ/src/assets/img/icons/caution.svg | 3 + ui/StatusQ/src/statusq.qrc | 1 + .../Communities/stores/CommunitiesStore.qml | 6 +- ui/app/AppLayouts/stores/RootStore.qml | 1 + ui/app/mainui/Popups.qml | 3 +- .../shared/popups/ImportCommunityPopup.qml | 171 +++++++++++------- 10 files changed, 231 insertions(+), 67 deletions(-) create mode 100644 ui/StatusQ/doc/src/images/status_warning_box.png create mode 100644 ui/StatusQ/src/StatusQ/Controls/StatusWarningBox.qml create mode 100644 ui/StatusQ/src/assets/img/icons/caution.svg diff --git a/ui/StatusQ/doc/src/images/status_warning_box.png b/ui/StatusQ/doc/src/images/status_warning_box.png new file mode 100644 index 0000000000000000000000000000000000000000..98e6bc2b813fe2b0c83bcad7f1526a3389a65c61 GIT binary patch literal 37261 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/twemoji/svg/e50a.svg assets/twemoji/LICENSE assets/twemoji/twemoji.js + assets/img/icons/caution.svg diff --git a/ui/StatusQ/src/assets/img/icons/caution.svg b/ui/StatusQ/src/assets/img/icons/caution.svg new file mode 100644 index 0000000000..65d87c4aa6 --- /dev/null +++ b/ui/StatusQ/src/assets/img/icons/caution.svg @@ -0,0 +1,3 @@ + + + diff --git a/ui/StatusQ/src/statusq.qrc b/ui/StatusQ/src/statusq.qrc index 4bb10358cd..53e93f4a4e 100644 --- a/ui/StatusQ/src/statusq.qrc +++ b/ui/StatusQ/src/statusq.qrc @@ -224,5 +224,6 @@ StatusQ/Core/Utils/big.min.mjs StatusQ/Controls/StatusBlockProgressBar.qml StatusQ/Components/StatusInfoBoxPanel.qml + StatusQ/Controls/StatusWarningBox.qml diff --git a/ui/app/AppLayouts/Communities/stores/CommunitiesStore.qml b/ui/app/AppLayouts/Communities/stores/CommunitiesStore.qml index 07fff2d640..ea103642ab 100644 --- a/ui/app/AppLayouts/Communities/stores/CommunitiesStore.qml +++ b/ui/app/AppLayouts/Communities/stores/CommunitiesStore.qml @@ -57,7 +57,7 @@ QtObject { property string communityTags: communitiesModuleInst.tags signal importingCommunityStateChanged(string communityId, int state, string errorMsg) - + signal communityPrivateKeyRemoved(string communityId) signal communityInfoAlreadyRequested() @@ -96,6 +96,10 @@ QtObject { root.communitiesModuleInst.importCommunity(communityKey); } + function getCommunityPublicKeyFromPrivateKey(privateKey) { + return root.communitiesModuleInst.getCommunityPublicKeyFromPrivateKey(privateKey); + } + function requestCommunityInfo(communityKey, importing = false) { const publicKey = Utils.isCompressedPubKey(communityKey) ? Utils.changeCommunityKeyCompression(communityKey) diff --git a/ui/app/AppLayouts/stores/RootStore.qml b/ui/app/AppLayouts/stores/RootStore.qml index 7c8232a775..7b3ded4820 100644 --- a/ui/app/AppLayouts/stores/RootStore.qml +++ b/ui/app/AppLayouts/stores/RootStore.qml @@ -4,6 +4,7 @@ import utils 1.0 import SortFilterProxyModel 0.2 import AppLayouts.Wallet.stores 1.0 as WalletStore + import "../Profile/stores" QtObject { diff --git a/ui/app/mainui/Popups.qml b/ui/app/mainui/Popups.qml index ed9823cdf1..d3a8949b06 100644 --- a/ui/app/mainui/Popups.qml +++ b/ui/app/mainui/Popups.qml @@ -18,6 +18,7 @@ import shared.popups 1.0 import shared.status 1.0 import utils 1.0 +import AppLayouts.Wallet.stores 1.0 as WalletStore QtObject { id: root @@ -518,7 +519,7 @@ QtObject { id: communityIntroDialog property string communityId loginType: root.rootStore.loginType - walletAccountsModel: root.rootStore.receiveAccounts + walletAccountsModel: root.rootStore.walletAccountsModel permissionsModel: root.rootStore.permissionsModel assetsModel: root.rootStore.assetsModel collectiblesModel: root.rootStore.collectiblesModel diff --git a/ui/imports/shared/popups/ImportCommunityPopup.qml b/ui/imports/shared/popups/ImportCommunityPopup.qml index df3e1c69c6..d5a1c6aa55 100644 --- a/ui/imports/shared/popups/ImportCommunityPopup.qml +++ b/ui/imports/shared/popups/ImportCommunityPopup.qml @@ -23,13 +23,24 @@ StatusDialog { QtObject { id: d property string importErrorMessage - readonly property bool communityFound: (d.isPublicKey && !!d.communityDetails) - readonly property var communityDetails: root.store.getCommunityDetails(publicKey) + + readonly property bool communityFound: (d.communityDetails !== null && !!d.communityDetails.name) + readonly property var communityDetails: { + if (isInputValid) { + let key = isPublicKey ? Utils.getCompressedPk(publicKey) : + root.store.getCommunityPublicKeyFromPrivateKey(inputKey); + return root.store.getCommunityDetails(key); + } else { + return null; + } + } + readonly property string inputErrorMessage: isInputValid ? "" : qsTr("Invalid key") readonly property string errorMessage: importErrorMessage || inputErrorMessage readonly property string inputKey: keyInput.text.trim() readonly property bool isPrivateKey: (Utils.isPrivateKey(inputKey)) readonly property bool isPublicKey: (publicKey !== "") + readonly property string privateKey: inputKey readonly property string publicKey: { if (!Utils.isStatusDeepLink(inputKey)) { const key = Utils.dropCommunityLinkPrefix(inputKey) @@ -49,19 +60,15 @@ StatusDialog { rightButtons: ObjectModel { StatusButton { id: importButton - enabled: d.isInputValid - loading: (d.isPublicKey && !d.communityFound) - text: d.isPrivateKey ? qsTr("Make this an Owner Node") - : qsTr("Import") + enabled: (d.isInputValid && (d.isPrivateKey && d.communityFound ? agreeToKeepOnline.checked : true)) + loading: (enabled && !d.communityFound) + text: !d.publicKey ? qsTr("Make this device the control node for %1").arg((!loading && !!d.communityDetails) ? d.communityDetails.name : "") + : qsTr("Import") onClicked: { if (d.isPrivateKey) { - const communityKey = d.inputKey - if (!communityKey.startsWith("0x")) { - communityKey = "0x" + communityKey; - } - root.store.importCommunity(communityKey); + root.store.importCommunity(d.privateKey); root.close(); - } else if (d.communityFound) { + } else if (d.isPublicKey) { root.joinCommunity(d.publicKey, d.communityDetails); } } @@ -69,65 +76,99 @@ StatusDialog { } } - ColumnLayout { + + StatusScrollView { + id: scrollContent anchors.fill: parent - spacing: Style.current.padding + anchors.leftMargin: Style.current.halfPadding + contentWidth: (root.width-Style.current.bigPadding-Style.current.padding) + padding: 0 - StatusBaseText { - id: infoText1 - Layout.fillWidth: true - text: qsTr("Enter the public key of the community you wish to access, or enter the private key of a community you own. Remember to always keep any private key safe and never share a private key with anyone else.") - wrapMode: Text.WordWrap - font.pixelSize: 13 - color: Theme.palette.baseColor1 - } + ColumnLayout { + width: (scrollContent.width-Style.current.padding) + spacing: Style.current.halfPadding - StatusBaseText { - id: inputLabel - text: qsTr("Community key") - color: Theme.palette.directColor1 - font.pixelSize: 15 - } - - StatusTextArea { - id: keyInput - Layout.fillWidth: true - implicitHeight: 110 - placeholderText: "0x0..." - wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere - onTextChanged: d.importErrorMessage = "" - } - RowLayout { - Layout.fillWidth: true - Layout.fillHeight: true - StatusChatInfoButton { - visible: (d.communityFound && d.isPublicKey) - title: !!d.communityDetails.name ? d.communityDetails.name : "" - subTitle: !!d.communityDetails.nbMembers ? qsTr("%n member(s)", "", d.communityDetails.nbMembers) : "" - asset.emoji: "1f918" - asset.emojiSize: "24x24" - asset.name: !!d.communityDetails.image ? d.communityDetails.image : "" - asset.isImage: (asset.name !== "") - asset.color: !!d.communityDetails.color ? d.communityDetails.color : "" - } - Item { Layout.fillWidth: true } StatusBaseText { - id: detectionLabel - Layout.alignment: Qt.AlignRight + id: infoText1 + Layout.fillWidth: true + text: qsTr("Enter the public key of the community you wish to access, or enter the private key of a community you own. Remember to always keep any private key safe and never share a private key with anyone else.") + wrapMode: Text.WordWrap font.pixelSize: 13 - visible: keyInput.text.trim() !== "" - text: { - if (d.errorMessage !== "") { - return d.errorMessage - } - if (d.isPrivateKey) { - return qsTr("Private key detected") - } - if (d.isPublicKey) { - return qsTr("Public key detected") - } + color: Theme.palette.baseColor1 + } + + StatusBaseText { + id: inputLabel + text: qsTr("Community key") + color: Theme.palette.directColor1 + font.pixelSize: 15 + } + + StatusTextArea { + id: keyInput + Layout.fillWidth: true + implicitHeight: 108 + placeholderText: "0x0..." + wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere + onTextChanged: d.importErrorMessage = "" + } + RowLayout { + Layout.fillWidth: true + Layout.minimumHeight: 46 + Layout.maximumHeight: 46 + StatusChatInfoButton { + visible: d.communityFound + title: visible ? d.communityDetails.name : "" + subTitle: visible ? qsTr("%n member(s)", "", d.communityDetails.nbMembers) : "" + asset.name: visible ? d.communityDetails.image : "" + asset.isImage: (asset.name !== "") + asset.color: visible ? d.communityDetails.color : "" + } + Item { Layout.fillWidth: true } + StatusBaseText { + id: detectionLabel + Layout.alignment: Qt.AlignRight + font.pixelSize: 13 + visible: keyInput.text.trim() !== "" + text: { + if (d.errorMessage !== "") { + return d.errorMessage + } + if (d.isPrivateKey) { + return qsTr("Private key detected") + } + if (d.isPublicKey) { + return qsTr("Public key detected") + } + } + color: d.errorMessage === "" ? Theme.palette.successColor1 : Theme.palette.dangerColor1 + } + } + ColumnLayout { + Layout.fillWidth: true + Layout.fillHeight: true + visible: (d.communityFound && d.isPrivateKey) + Layout.topMargin: 12 + spacing: Style.current.padding + StatusWarningBox { + Layout.fillWidth: true + icon: "caution" + text: qsTr("Another device might currently have the control node for this Community. Running multiple control nodes will cause unforeseen issues. Make sure you delete the private key in that other device in the community management tab.") + bgColor: borderColor + } + StatusDialogDivider { Layout.fillWidth: true; Layout.topMargin: Style.current.padding } + StatusBaseText { + Layout.topMargin: Style.current.halfPadding + visible: (d.communityFound && d.isPrivateKey) + font.pixelSize: Style.current.primaryTextFontSize + text: qsTr("I acknowledge that...") + } + StatusCheckBox { + id: agreeToKeepOnline + Layout.fillWidth: true + font.pixelSize: Style.current.primaryTextFontSize + text: qsTr("I must keep this device online and running Status for the Community to function") } - color: d.errorMessage === "" ? Theme.palette.successColor1 : Theme.palette.dangerColor1 } } }