Show different verification errors

This commit is contained in:
Nicolas Werner 2020-10-05 22:58:07 +02:00
parent bca29a4227
commit 8a4d85f801
7 changed files with 35 additions and 20 deletions

View file

@ -6,7 +6,6 @@ import im.nheko 1.0
ApplicationWindow {
property var flow
property var tran_id
title: stack.currentItem.title
id: dialog

View file

@ -2,23 +2,29 @@ import QtQuick 2.3
import QtQuick.Controls 2.10
import QtQuick.Layouts 1.10
import im.nheko 1.0
Pane {
property string title: qsTr("Verification timed out")
property string title: qsTr("Verification failed")
ColumnLayout {
spacing: 16
Text {
id: content
Layout.maximumWidth: 400
Layout.fillHeight: true
Layout.fillWidth: true
wrapMode: Text.Wrap
id: content
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.")
case DeviceVerificationFlow.UnknownMethod: return qsTr("Other client does not support our verification protocol.")
case DeviceVerificationFlow.MismatchedCommitment:
case DeviceVerificationFlow.MismatchedSAS:
case DeviceVerificationFlow.KeyMismatch: return qsTr("Key mismatch detected!")
case DeviceVerificationFlow.Timeout: return qsTr("Device verification timed out.")
case DeviceVerificationFlow.User: return qsTr("Other party canceled the verification.")
case DeviceVerificationFlow.OutOfOrder: return qsTr("Device verification timed out.")
default: return "Unknown verification error.";
}
color:colors.text
verticalAlignment: Text.AlignVCenter
@ -31,11 +37,7 @@ Pane {
Layout.alignment: Qt.AlignRight
text: qsTr("Close")
onClicked: {
deviceVerificationList.remove(tran_id);
flow.deleteFlow();
dialog.close()
}
onClicked: dialog.close()
}
}
}

View file

@ -20,12 +20,12 @@ Pane {
case "WaitingForMac": return qsTr("Waiting for other side to complete the verification request.")
}
color:colors.text
color: colors.text
verticalAlignment: Text.AlignVCenter
}
BusyIndicator {
Layout.alignment: Qt.AlignHCenter
palette: color
palette: colors
}
RowLayout {
Button {

View file

@ -64,7 +64,8 @@ DeviceVerificationFlow::DeviceVerificationFlow(QObject *,
}
connect(timeout, &QTimer::timeout, this, [this]() {
this->cancelVerification(DeviceVerificationFlow::Error::Timeout);
if (state_ != Success && state_ != Failed)
this->cancelVerification(DeviceVerificationFlow::Error::Timeout);
});
connect(ChatPage::instance(),
@ -114,7 +115,7 @@ DeviceVerificationFlow::DeviceVerificationFlow(QObject *,
return;
}
error_ = User;
emit errorChanged();
Emit errorChanged();
setState(Failed);
});

View file

@ -58,7 +58,7 @@ class DeviceVerificationFlow : public QObject
Q_OBJECT
// Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
Q_PROPERTY(QString state READ state NOTIFY stateChanged)
Q_PROPERTY(Error error READ error CONSTANT)
Q_PROPERTY(Error error READ error NOTIFY errorChanged)
Q_PROPERTY(QString userId READ getUserId CONSTANT)
Q_PROPERTY(QString deviceId READ getDeviceId CONSTANT)
Q_PROPERTY(bool sender READ getSender CONSTANT)
@ -203,7 +203,7 @@ private:
mtx::common::RelatesTo relation;
State state_ = PromptStartVerification;
Error error_;
Error error_ = UnknownMethod;
bool isMacVerified = false;

View file

@ -396,6 +396,18 @@ TimelineViewManager::verifyUser(QString userid)
tr("No share room with this user found. Create an "
"encrypted room with this user and try again."));
}
void
TimelineViewManager::removeVerificationFlow(DeviceVerificationFlow *flow)
{
for (auto it = dvList.keyValueBegin(); it != dvList.keyValueEnd(); ++it) {
if (it->second == flow) {
dvList.remove(it->first);
return;
}
}
}
void
TimelineViewManager::verifyDevice(QString userid, QString deviceid)
{

View file

@ -62,6 +62,7 @@ public:
Q_INVOKABLE void openMemberListDialog() const;
Q_INVOKABLE void openLeaveRoomDialog() const;
Q_INVOKABLE void openRoomSettings() const;
Q_INVOKABLE void removeVerificationFlow(DeviceVerificationFlow *flow);
void verifyUser(QString userid);
void verifyDevice(QString userid, QString deviceid);