diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml
index 3f72a7dd..1dbe7c1a 100644
--- a/resources/qml/TimelineView.qml
+++ b/resources/qml/TimelineView.qml
@@ -106,19 +106,7 @@ Page {
Connections {
target: TimelineManager
function onNewDeviceVerificationRequest(flow,transactionId,userId,deviceId,isRequest) {
- flow.userId = userId;
- flow.sender = false;
- flow.deviceId = deviceId;
- switch(flow.type){
- case DeviceVerificationFlow.ToDevice:
- flow.tranId = transactionId;
- deviceVerificationList.add(flow.tranId);
- break;
- case DeviceVerificationFlow.RoomMsg:
- deviceVerificationList.add(flow.tranId);
- break;
- }
- var dialog = deviceVerificationDialog.createObject(timelineRoot, {flow: flow,isRequest: isRequest,tran_id: flow.tranId});
+ var dialog = deviceVerificationDialog.createObject(timelineRoot, {flow: flow});
dialog.show();
}
}
diff --git a/resources/qml/UserProfile.qml b/resources/qml/UserProfile.qml
index dc6bc165..e7dcc777 100644
--- a/resources/qml/UserProfile.qml
+++ b/resources/qml/UserProfile.qml
@@ -15,24 +15,12 @@ ApplicationWindow{
width: 420
minimumHeight: 420
- modality: Qt.WindowModal
palette: colors
- Connections{
- target: deviceVerificationList
- function onUpdateProfile() {
- profile.fetchDeviceList(profile.userid)
- }
- }
-
Component {
id: deviceVerificationDialog
DeviceVerification {}
}
- Component{
- id: deviceVerificationFlow
- DeviceVerificationFlow {}
- }
ColumnLayout{
id: contentL
@@ -73,14 +61,7 @@ ApplicationWindow{
enabled: !profile.isUserVerified
visible: !profile.isUserVerified
- onClicked: {
- var newFlow = profile.createFlow(true);
- newFlow.userId = profile.userid;
- newFlow.sender = true;
- deviceVerificationList.add(newFlow.tranId);
- var dialog = deviceVerificationDialog.createObject(userProfileDialog, {flow: newFlow,isRequest: true,tran_id: newFlow.tranId});
- dialog.show();
- }
+ onClicked: profile.verify()
}
RowLayout {
@@ -172,17 +153,11 @@ ApplicationWindow{
id: verifyButton
text: (model.verificationStatus != VerificationStatus.VERIFIED)?"Verify":"Unverify"
onClicked: {
- var newFlow = profile.createFlow(false);
- newFlow.userId = profile.userid;
- newFlow.sender = true;
- newFlow.deviceId = model.deviceId;
if(model.verificationStatus == VerificationStatus.VERIFIED){
- newFlow.unverify();
+ profile.unverify(model.deviceId)
deviceVerificationList.updateProfile(newFlow.userId);
}else{
- deviceVerificationList.add(newFlow.tranId);
- var dialog = deviceVerificationDialog.createObject(userProfileDialog, {flow: newFlow,isRequest:false,tran_id: newFlow.tranId});
- dialog.show();
+ profile.verify(model.deviceId);
}
}
}
diff --git a/resources/qml/device-verification/AcceptNewVerificationRequest.qml b/resources/qml/device-verification/AcceptNewVerificationRequest.qml
deleted file mode 100644
index 5bdbc4a6..00000000
--- a/resources/qml/device-verification/AcceptNewVerificationRequest.qml
+++ /dev/null
@@ -1,49 +0,0 @@
-import QtQuick 2.3
-import QtQuick.Controls 2.10
-import QtQuick.Layouts 1.10
-
-import im.nheko 1.0
-
-Pane {
- property string title: qsTr("Recieving Device Verification Request")
- Component {
- id: awaitingVerificationRequestAccept
- AwaitingVerificationRequest {}
- }
- ColumnLayout {
- spacing: 16
- Label {
- Layout.maximumWidth: 400
- Layout.fillHeight: true
- Layout.fillWidth: true
- wrapMode: Text.Wrap
- text: qsTr("The device was requested to be verified")
- color:colors.text
- verticalAlignment: Text.AlignVCenter
- }
- RowLayout {
- Button {
- Layout.alignment: Qt.AlignLeft
- text: qsTr("Deny")
-
- onClicked: {
- flow.cancelVerification(DeviceVerificationFlow.User);
- deviceVerificationList.remove(tran_id);
- dialog.destroy();
- }
- }
- Item {
- Layout.fillWidth: true
- }
- Button {
- Layout.alignment: Qt.AlignRight
- text: qsTr("Accept")
-
- onClicked: {
- stack.replace(awaitingVerificationRequestAccept);
- flow.sender ?flow.sendVerificationReady():flow.acceptVerificationRequest();
- }
- }
- }
- }
-}
diff --git a/resources/qml/device-verification/AwaitingVerificationConfirmation.qml b/resources/qml/device-verification/AwaitingVerificationConfirmation.qml
index aaebba6a..cd8ccfd9 100644
--- a/resources/qml/device-verification/AwaitingVerificationConfirmation.qml
+++ b/resources/qml/device-verification/AwaitingVerificationConfirmation.qml
@@ -27,9 +27,8 @@ Pane {
text: qsTr("Cancel")
onClicked: {
- flow.cancelVerification(DeviceVerificationFlow.User);
- deviceVerificationList.remove(tran_id);
- dialog.destroy();
+ flow.cancel();
+ dialog.close();
}
}
Item {
diff --git a/resources/qml/device-verification/DeviceVerification.qml b/resources/qml/device-verification/DeviceVerification.qml
index ca980987..4e93df06 100644
--- a/resources/qml/device-verification/DeviceVerification.qml
+++ b/resources/qml/device-verification/DeviceVerification.qml
@@ -18,36 +18,31 @@ ApplicationWindow {
height: stack.implicitHeight
width: stack.implicitWidth
- Component{
- id: newVerificationRequest
- NewVerificationRequest {}
- }
-
- Component{
- id: acceptNewVerificationRequest
- AcceptNewVerificationRequest {}
- }
-
StackView {
id: stack
- initialItem: flow.sender == true?newVerificationRequest:acceptNewVerificationRequest
+ initialItem: newVerificationRequest
implicitWidth: currentItem.implicitWidth
implicitHeight: currentItem.implicitHeight
}
+ Component{
+ id: newVerificationRequest
+ NewVerificationRequest {}
+ }
+
Component {
- id: partnerAborted
- PartnerAborted {}
+ id: waiting
+ Waiting {}
}
Component {
- id: timedout
- TimedOut {}
+ id: success
+ Success {}
}
Component {
- id: verificationSuccess
- VerificationSuccess {}
+ id: failed
+ Failed {}
}
Component {
@@ -60,19 +55,42 @@ ApplicationWindow {
EmojiVerification {}
}
- Connections {
- target: flow
- onVerificationCanceled: stack.replace(partnerAborted)
- onTimedout: stack.replace(timedout)
- onDeviceVerified: stack.replace(verificationSuccess)
-
- onVerificationRequestAccepted: switch(method) {
- case DeviceVerificationFlow.Decimal: stack.replace(digitVerification); break;
- case DeviceVerificationFlow.Emoji: stack.replace(emojiVerification); break;
+ Item {
+ state: flow.state
+
+ states: [
+ State {
+ name: "PromptStartVerification"
+ StateChangeScript { script: stack.replace(newVerificationRequest) }
+ },
+ State {
+ name: "CompareEmoji"
+ StateChangeScript { script: stack.replace(emojiVerification) }
+ },
+ State {
+ name: "CompareNumber"
+ StateChangeScript { script: stack.replace(digitVerification) }
+ },
+ State {
+ name: "WaitingForKeys"
+ StateChangeScript { script: stack.replace(waiting) }
+ },
+ State {
+ name: "WaitingForOtherToAccept"
+ StateChangeScript { script: stack.replace(waiting) }
+ },
+ State {
+ name: "WaitingForMac"
+ StateChangeScript { script: stack.replace(waiting) }
+ },
+ State {
+ name: "Success"
+ StateChangeScript { script: stack.replace(success) }
+ },
+ State {
+ name: "Failed"
+ StateChangeScript { script: stack.replace(failed); }
}
-
- onRefreshProfile: {
- deviceVerificationList.updateProfile(flow.userId);
- }
- }
+ ]
+}
}
diff --git a/resources/qml/device-verification/DigitVerification.qml b/resources/qml/device-verification/DigitVerification.qml
index f3b1f5cf..ff878a50 100644
--- a/resources/qml/device-verification/DigitVerification.qml
+++ b/resources/qml/device-verification/DigitVerification.qml
@@ -6,10 +6,7 @@ import im.nheko 1.0
Pane {
property string title: qsTr("Verification Code")
- Component {
- id: awaitingVerificationConfirmation
- AwaitingVerificationConfirmation {}
- }
+
ColumnLayout {
spacing: 16
Label {
@@ -45,9 +42,8 @@ Pane {
text: qsTr("They do not match!")
onClicked: {
- flow.cancelVerification(DeviceVerificationFlow.MismatchedSAS);
- deviceVerificationList.remove(tran_id);
- dialog.destroy();
+ flow.cancel();
+ dialog.close();
}
}
Item {
@@ -57,7 +53,7 @@ Pane {
Layout.alignment: Qt.AlignRight
text: qsTr("They match!")
- onClicked: { stack.replace(awaitingVerificationConfirmation); flow.sendVerificationMac(); }
+ onClicked: flow.next();
}
}
}
diff --git a/resources/qml/device-verification/EmojiVerification.qml b/resources/qml/device-verification/EmojiVerification.qml
index 19faf1b7..ed7727aa 100644
--- a/resources/qml/device-verification/EmojiVerification.qml
+++ b/resources/qml/device-verification/EmojiVerification.qml
@@ -6,10 +6,7 @@ import im.nheko 1.0
Pane {
property string title: qsTr("Verification Code")
- Component {
- id: awaitingVerificationConfirmation
- AwaitingVerificationConfirmation{}
- }
+
ColumnLayout {
spacing: 16
Label {
@@ -125,9 +122,8 @@ Pane {
text: qsTr("They do not match!")
onClicked: {
- flow.cancelVerification(DeviceVerificationFlow.MismatchedSAS);
- deviceVerificationList.remove(tran_id);
- dialog.destroy();
+ flow.cancel();
+ dialog.close();
}
}
Item {
@@ -137,7 +133,7 @@ Pane {
Layout.alignment: Qt.AlignRight
text: qsTr("They match!")
- onClicked: { stack.replace(awaitingVerificationConfirmation); flow.sendVerificationMac(); }
+ onClicked: flow.next()
}
}
}
diff --git a/resources/qml/device-verification/TimedOut.qml b/resources/qml/device-verification/Failed.qml
index 7dd0ab69..6b5d57ef 100644
--- a/resources/qml/device-verification/TimedOut.qml
+++ b/resources/qml/device-verification/Failed.qml
@@ -12,7 +12,14 @@ Pane {
Layout.fillWidth: true
wrapMode: Text.Wrap
id: content
- text: qsTr("Device verification timed out.")
+ text: switch (flow.error) {
+ case VerificationStatus.UnknownMethod: return qsTr("Device verification timed out.")
+ case VerificationStatus.MismatchedCommitment: return qsTr("Device verification timed out.")
+ case VerificationStatus.MismatchedSAS: return qsTr("Device verification timed out.")
+ case VerificationStatus.KeyMismatch: return qsTr("Device verification timed out.")
+ case VerificationStatus.Timeout: return qsTr("Device verification timed out.")
+ case VerificationStatus.OutOfOrder: return qsTr("Device verification timed out.")
+ }
color:colors.text
verticalAlignment: Text.AlignVCenter
}
@@ -27,7 +34,7 @@ Pane {
onClicked: {
deviceVerificationList.remove(tran_id);
flow.deleteFlow();
- dialog.destroy()
+ dialog.close()
}
}
}
diff --git a/resources/qml/device-verification/NewVerificationRequest.qml b/resources/qml/device-verification/NewVerificationRequest.qml
index ef730b13..bd25bb90 100644
--- a/resources/qml/device-verification/NewVerificationRequest.qml
+++ b/resources/qml/device-verification/NewVerificationRequest.qml
@@ -2,12 +2,11 @@ import QtQuick 2.3
import QtQuick.Controls 2.10
import QtQuick.Layouts 1.10
+import im.nheko 1.0
+
Pane {
- property string title: qsTr("Sending Device Verification Request")
- Component {
- id: awaitingVerificationRequestAccept
- AwaitingVerificationRequest {}
- }
+ property string title: flow.sender ? qsTr("Send Device Verification Request") : qsTr("Recieved Device Verification Request")
+
ColumnLayout {
spacing: 16
Label {
@@ -15,28 +14,20 @@ Pane {
Layout.fillHeight: true
Layout.fillWidth: true
wrapMode: Text.Wrap
- text: qsTr("A new device was added.")
- color:colors.text
- verticalAlignment: Text.AlignVCenter
- }
- Label {
- Layout.maximumWidth: 400
- Layout.fillHeight: true
- Layout.fillWidth: true
- wrapMode: Text.Wrap
- text: qsTr("The device may have been added by you signing in from another client or physical device. To ensure that no malicious user can eavesdrop on your encrypted communications, you should verify the new device.")
+ text: flow.sender ?
+ qsTr("To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.")
+ : qsTr("The device was requested to be verified")
color:colors.text
verticalAlignment: Text.AlignVCenter
}
RowLayout {
Button {
Layout.alignment: Qt.AlignLeft
- text: qsTr("Cancel")
+ text: flow.sender ? qsTr("Cancel") : qsTr("Deny")
onClicked: {
- deviceVerificationList.remove(tran_id);
- flow.deleteFlow();
- dialog.destroy();
+ flow.cancel();
+ dialog.close();
}
}
Item {
@@ -44,12 +35,10 @@ Pane {
}
Button {
Layout.alignment: Qt.AlignRight
- text: qsTr("Start verification")
+ text: flow.sender ? qsTr("Start verification") : qsTr("Accept")
- onClicked: {
- stack.replace(awaitingVerificationRequestAccept);
- flow.sender ?flow.sendVerificationRequest():flow.startVerificationRequest(); }
- }
+ onClicked: flow.next();
}
}
}
+}
diff --git a/resources/qml/device-verification/PartnerAborted.qml b/resources/qml/device-verification/PartnerAborted.qml
deleted file mode 100644
index 6174477d..00000000
--- a/resources/qml/device-verification/PartnerAborted.qml
+++ /dev/null
@@ -1,34 +0,0 @@
-import QtQuick 2.3
-import QtQuick.Controls 2.10
-import QtQuick.Layouts 1.10
-
-Pane {
- property string title: qsTr("Verification aborted!")
- ColumnLayout {
- spacing: 16
- Label {
- Layout.maximumWidth: 400
- Layout.fillHeight: true
- Layout.fillWidth: true
- wrapMode: Text.Wrap
- id: content
- text: qsTr("Verification canceled by the other party!")
- color:colors.text
- verticalAlignment: Text.AlignVCenter
- }
- RowLayout {
- Item {
- Layout.fillWidth: true
- }
- Button {
- Layout.alignment: Qt.AlignRight
- text: qsTr("Close")
-
- onClicked: {
- deviceVerificationList.remove(tran_id);
- dialog.destroy();
- }
- }
- }
- }
-}
diff --git a/resources/qml/device-verification/VerificationSuccess.qml b/resources/qml/device-verification/Success.qml
index bc1e64f7..b17b293c 100644
--- a/resources/qml/device-verification/VerificationSuccess.qml
+++ b/resources/qml/device-verification/Success.qml
@@ -24,11 +24,7 @@ Pane {
Layout.alignment: Qt.AlignRight
text: qsTr("Close")
- onClicked: {
- deviceVerificationList.remove(tran_id);
- if(flow) flow.deleteFlow();
- dialog.destroy();
- }
+ onClicked: dialog.close();
}
}
}
diff --git a/resources/qml/device-verification/AwaitingVerificationRequest.qml b/resources/qml/device-verification/Waiting.qml
index b4b9178a..f36910e7 100644
--- a/resources/qml/device-verification/AwaitingVerificationRequest.qml
+++ b/resources/qml/device-verification/Waiting.qml
@@ -14,12 +14,18 @@ Pane {
Layout.fillWidth: true
wrapMode: Text.Wrap
id: content
- text: qsTr("Waiting for other side to accept the verification request.")
+ text: switch (flow.state) {
+ case "WaitingForOtherToAccept": return qsTr("Waiting for other side to accept the verification request.")
+ case "WaitingForKeys": return qsTr("Waiting for other side to continue the verification request.")
+ case "WaitingForMac": return qsTr("Waiting for other side to complete the verification request.")
+ }
+
color:colors.text
verticalAlignment: Text.AlignVCenter
}
BusyIndicator {
Layout.alignment: Qt.AlignHCenter
+ palette: color
}
RowLayout {
Button {
@@ -27,9 +33,8 @@ Pane {
text: qsTr("Cancel")
onClicked: {
- flow.cancelVerification(DeviceVerificationFlow.User);
- deviceVerificationList.remove(tran_id);
- dialog.destroy();
+ flow.cancel();
+ dialog.close();
}
}
Item {
diff --git a/resources/res.qrc b/resources/res.qrc
index 7ef7ecf9..64e5b084 100644
--- a/resources/res.qrc
+++ b/resources/res.qrc
@@ -141,16 +141,13 @@
<file>qml/delegates/Pill.qml</file>
<file>qml/delegates/Placeholder.qml</file>
<file>qml/delegates/Reply.qml</file>
- <file>qml/device-verification/AcceptNewVerificationRequest.qml</file>
- <file>qml/device-verification/AwaitingVerificationConfirmation.qml</file>
- <file>qml/device-verification/AwaitingVerificationRequest.qml</file>
+ <file>qml/device-verification/Waiting.qml</file>
<file>qml/device-verification/DeviceVerification.qml</file>
<file>qml/device-verification/DigitVerification.qml</file>
<file>qml/device-verification/EmojiVerification.qml</file>
<file>qml/device-verification/NewVerificationRequest.qml</file>
- <file>qml/device-verification/PartnerAborted.qml</file>
- <file>qml/device-verification/TimedOut.qml</file>
- <file>qml/device-verification/VerificationSuccess.qml</file>
+ <file>qml/device-verification/Failed.qml</file>
+ <file>qml/device-verification/Success.qml</file>
</qresource>
<qresource prefix="/media">
<file>media/ring.ogg</file>
|