2023-01-12 12:37:37 +00:00
|
|
|
import QtQuick 2.14
|
|
|
|
import QtQuick.Controls 2.14
|
|
|
|
import QtQuick.Layouts 1.14
|
2022-06-28 18:11:18 +00:00
|
|
|
|
|
|
|
import StatusQ.Core 0.1
|
|
|
|
import StatusQ.Core.Theme 0.1
|
|
|
|
import StatusQ.Controls 0.1
|
|
|
|
import StatusQ.Popups 0.1
|
|
|
|
|
|
|
|
import shared.controls 1.0
|
|
|
|
import shared.views.chat 1.0
|
|
|
|
|
2023-01-12 12:37:37 +00:00
|
|
|
import utils 1.0
|
|
|
|
|
2022-06-28 18:11:18 +00:00
|
|
|
StatusModal {
|
|
|
|
id: root
|
|
|
|
|
2022-12-02 13:02:41 +00:00
|
|
|
property var contactsStore
|
|
|
|
property string publicKey
|
2022-06-28 18:11:18 +00:00
|
|
|
|
|
|
|
signal verificationRefused(string senderPublicKey)
|
|
|
|
signal responseSent(string senderPublicKey, string response)
|
|
|
|
|
2022-12-09 12:33:20 +00:00
|
|
|
function updateVerificationDetails() {
|
2022-12-02 13:02:41 +00:00
|
|
|
try {
|
|
|
|
const request = root.contactsStore.getVerificationDetailsFromAsJson(root.publicKey)
|
|
|
|
|
|
|
|
if (request.requestStatus === Constants.verificationStatus.canceled) {
|
|
|
|
root.close()
|
|
|
|
}
|
|
|
|
|
2023-01-03 23:38:16 +00:00
|
|
|
d.senderPublicKey = request.from
|
2022-12-02 13:02:41 +00:00
|
|
|
d.senderDisplayName = request.displayName
|
|
|
|
d.senderIcon = request.icon
|
|
|
|
d.challengeText = request.challenge
|
|
|
|
d.responseText = request.response
|
|
|
|
d.messageTimestamp = request.requestedAt
|
|
|
|
d.responseTimestamp = request.repliedAt
|
|
|
|
} catch (e) {
|
|
|
|
console.error("Error getting or parsing verification data", e)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Connections {
|
|
|
|
target: root.contactsStore.receivedContactRequestsModel
|
2022-12-09 12:33:20 +00:00
|
|
|
|
|
|
|
function onItemChanged(pubKey) {
|
|
|
|
if (pubKey === root.publicKey)
|
|
|
|
root.updateVerificationDetails()
|
2022-12-02 13:02:41 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
QtObject {
|
|
|
|
id: d
|
|
|
|
|
|
|
|
property string senderPublicKey: ""
|
|
|
|
property string senderDisplayName: ""
|
|
|
|
property string senderIcon: ""
|
|
|
|
property string challengeText: ""
|
|
|
|
property string responseText: ""
|
|
|
|
property string messageTimestamp: ""
|
|
|
|
property string responseTimestamp: ""
|
|
|
|
}
|
|
|
|
|
|
|
|
header.title: qsTr("%1 is asking you to verify your identity").arg(d.senderDisplayName)
|
2022-06-28 18:11:18 +00:00
|
|
|
width: 480
|
|
|
|
|
|
|
|
onOpened: {
|
2022-12-09 12:33:20 +00:00
|
|
|
root.updateVerificationDetails()
|
2022-06-28 18:11:18 +00:00
|
|
|
verificationResponse.input.edit.forceActiveFocus(Qt.MouseFocusReason)
|
|
|
|
}
|
|
|
|
|
2023-01-12 12:37:37 +00:00
|
|
|
contentItem: StatusScrollView {
|
|
|
|
padding: Style.current.padding
|
|
|
|
|
|
|
|
ColumnLayout {
|
|
|
|
id: contentColumn
|
|
|
|
width: root.width - Style.current.padding * 2
|
|
|
|
spacing: Style.current.padding
|
|
|
|
|
|
|
|
StatusBaseText {
|
|
|
|
id: description
|
|
|
|
color: Theme.palette.directColor1
|
|
|
|
wrapMode: Text.WordWrap
|
|
|
|
text: qsTr("%1 would like to verify your identity. Answer the question to prove your identity to %2")
|
|
|
|
.arg(d.senderDisplayName).arg(d.senderDisplayName)
|
|
|
|
font.pixelSize: 15
|
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.topMargin: Style.current.padding
|
|
|
|
}
|
2022-06-28 18:11:18 +00:00
|
|
|
|
2023-01-12 12:37:37 +00:00
|
|
|
MessageView {
|
|
|
|
id: verificationMessage
|
|
|
|
isMessage: true
|
|
|
|
amIChatAdmin: false
|
|
|
|
placeholderMessage: true
|
|
|
|
senderId: d.senderPublicKey
|
|
|
|
senderDisplayName: d.senderDisplayName
|
|
|
|
senderIsEnsVerified: d.senderPublicKey !== "" && Utils.isEnsVerified(d.senderPublicKey)
|
|
|
|
senderIcon: d.senderIcon
|
|
|
|
messageText: d.challengeText
|
|
|
|
messageContentType: Constants.messageContentType.messageType
|
|
|
|
Layout.fillWidth: true
|
|
|
|
}
|
2022-06-28 18:11:18 +00:00
|
|
|
|
2023-01-12 12:37:37 +00:00
|
|
|
StatusInput {
|
|
|
|
id: verificationResponse
|
|
|
|
visible: !d.responseText
|
|
|
|
input.multiline: true
|
|
|
|
placeholderText: qsTr("Provide answer to verification request from this contact.")
|
|
|
|
minimumHeight: 152
|
|
|
|
maximumHeight: 152
|
|
|
|
input.verticalAlignment: TextEdit.AlignTop
|
|
|
|
leftPadding: 0
|
|
|
|
rightPadding: 0
|
|
|
|
charLimit: 280
|
|
|
|
Layout.fillWidth: true
|
|
|
|
}
|
2022-06-28 18:11:18 +00:00
|
|
|
|
2023-01-12 12:37:37 +00:00
|
|
|
MessageView {
|
|
|
|
id: responseMessage
|
|
|
|
width: parent.width
|
|
|
|
visible: !!d.responseText
|
|
|
|
isMessage: true
|
|
|
|
amIChatAdmin: false
|
|
|
|
placeholderMessage: true
|
|
|
|
senderId: userProfile.pubKey
|
|
|
|
senderDisplayName: userProfile.displayName
|
|
|
|
senderIsEnsVerified: !!userProfile.preferredName
|
|
|
|
senderIcon: userProfile.icon
|
|
|
|
messageText: d.responseText
|
|
|
|
messageContentType: Constants.messageContentType.messageType
|
|
|
|
Layout.fillWidth: true
|
|
|
|
}
|
2022-06-28 18:11:18 +00:00
|
|
|
|
2023-01-12 12:37:37 +00:00
|
|
|
StatusBaseText {
|
|
|
|
id: responseSent
|
|
|
|
visible: !!d.responseText
|
|
|
|
color: Theme.palette.baseColor1
|
|
|
|
wrapMode: Text.WordWrap
|
|
|
|
text: qsTr("Your answer has been sent to %1.").arg(d.senderDisplayName)
|
|
|
|
font.pixelSize: 13
|
|
|
|
horizontalAlignment: Text.AlignHCenter
|
|
|
|
Layout.fillWidth: true
|
|
|
|
}
|
2022-06-28 18:11:18 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
rightButtons: [
|
|
|
|
StatusButton {
|
2022-12-02 13:02:41 +00:00
|
|
|
visible: !d.responseText
|
2022-06-28 18:11:18 +00:00
|
|
|
text: qsTr("Refuse Verification")
|
|
|
|
onClicked: {
|
2022-12-02 13:02:41 +00:00
|
|
|
root.verificationRefused(d.senderPublicKey)
|
2022-06-28 18:11:18 +00:00
|
|
|
root.close();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
StatusButton {
|
|
|
|
text: qsTr("Send Answer")
|
2022-12-02 13:02:41 +00:00
|
|
|
visible: !d.responseText
|
2022-06-28 18:11:18 +00:00
|
|
|
enabled: verificationResponse.text !== ""
|
|
|
|
onClicked: {
|
2022-12-02 13:02:41 +00:00
|
|
|
root.responseSent(d.senderPublicKey, Utils.escapeHtml(verificationResponse.text))
|
|
|
|
d.responseText = verificationResponse.text
|
|
|
|
d.responseTimestamp = Date.now()
|
2022-06-28 18:11:18 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
StatusFlatButton {
|
2022-12-02 13:02:41 +00:00
|
|
|
visible: d.responseText
|
2022-06-28 18:11:18 +00:00
|
|
|
text: qsTr("Change answer")
|
|
|
|
onClicked: {
|
2022-12-02 13:02:41 +00:00
|
|
|
d.responseText = ""
|
2022-06-28 18:11:18 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
StatusButton {
|
2022-12-02 13:02:41 +00:00
|
|
|
visible: d.responseText
|
2022-06-28 18:11:18 +00:00
|
|
|
text: qsTr("Close")
|
|
|
|
onClicked: root.close()
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|