From 31881e14d9edf9e4239f0638d8694bba5eccb0a7 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 12 Jan 2021 14:49:15 +0100 Subject: [PATCH] Make it easier to understand, what button to click for verification from profile --- resources/qml/UserProfile.qml | 11 +++++++++- .../NewVerificationRequest.qml | 6 +++--- src/timeline/EventStore.cpp | 8 ++++++++ src/ui/UserProfile.cpp | 20 +++++++++++++------ src/ui/UserProfile.h | 6 ++++++ 5 files changed, 41 insertions(+), 10 deletions(-) diff --git a/resources/qml/UserProfile.qml b/resources/qml/UserProfile.qml index fa8a190d..baff991e 100644 --- a/resources/qml/UserProfile.qml +++ b/resources/qml/UserProfile.qml @@ -61,10 +61,18 @@ ApplicationWindow { text: qsTr("Verify") Layout.alignment: Qt.AlignHCenter enabled: !profile.isUserVerified - visible: !profile.isUserVerified + visible: !profile.isUserVerified && !profile.isSelf && profile.userVerificationEnabled onClicked: profile.verify() } + Image { + Layout.preferredHeight: 16 + Layout.preferredWidth: 16 + source: "image://colorimage/:/icons/icons/ui/lock.png?green" + visible: profile.isUserVerified + Layout.alignment: Qt.AlignHCenter + } + RowLayout { Layout.alignment: Qt.AlignHCenter spacing: 8 @@ -153,6 +161,7 @@ ApplicationWindow { Button { id: verifyButton + visible: (!profile.userVerificationEnabled && !profile.isSelf) || (profile.isSelf && (model.verificationStatus != VerificationStatus.VERIFIED || !profile.userVerificationEnabled)) text: (model.verificationStatus != VerificationStatus.VERIFIED) ? "Verify" : "Unverify" onClicked: { if (model.verificationStatus == VerificationStatus.VERIFIED) diff --git a/resources/qml/device-verification/NewVerificationRequest.qml b/resources/qml/device-verification/NewVerificationRequest.qml index fae63371..a34038a9 100644 --- a/resources/qml/device-verification/NewVerificationRequest.qml +++ b/resources/qml/device-verification/NewVerificationRequest.qml @@ -10,6 +10,8 @@ Pane { spacing: 16 Label { + // Self verification + Layout.maximumWidth: 400 Layout.fillHeight: true Layout.fillWidth: true @@ -21,14 +23,12 @@ Pane { else return qsTr("To ensure that no malicious user can eavesdrop on your encrypted communications you can verify the other party."); } else { - // Self verification - if (!flow.isSelfVerification && flow.isDeviceVerification) return qsTr("%1 has requested to verify their device %2.").arg(flow.userId).arg(flow.deviceId); else if (!flow.isSelfVerification && !flow.isDeviceVerification) return qsTr("%1 using the device %2 has requested to be verified.").arg(flow.userId).arg(flow.deviceId); else - return qsTr("Your devices (%1) has requested to be verified.").arg(flow.deviceId); + return qsTr("Your device (%1) has requested to be verified.").arg(flow.deviceId); } } color: colors.text diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp index 6cf8e602..41001081 100644 --- a/src/timeline/EventStore.cpp +++ b/src/timeline/EventStore.cpp @@ -360,27 +360,35 @@ EventStore::handle_room_verification(mtx::events::collections::TimelineEvents ev std::visit( overloaded{ [this](const mtx::events::RoomEvent &msg) { + nhlog::db()->debug("handle_room_verification: Request"); emit startDMVerification(msg); }, [](const mtx::events::RoomEvent &msg) { + nhlog::db()->debug("handle_room_verification: Cancel"); ChatPage::instance()->receivedDeviceVerificationCancel(msg.content); }, [](const mtx::events::RoomEvent &msg) { + nhlog::db()->debug("handle_room_verification: Accept"); ChatPage::instance()->receivedDeviceVerificationAccept(msg.content); }, [](const mtx::events::RoomEvent &msg) { + nhlog::db()->debug("handle_room_verification: Key"); ChatPage::instance()->receivedDeviceVerificationKey(msg.content); }, [](const mtx::events::RoomEvent &msg) { + nhlog::db()->debug("handle_room_verification: Mac"); ChatPage::instance()->receivedDeviceVerificationMac(msg.content); }, [](const mtx::events::RoomEvent &msg) { + nhlog::db()->debug("handle_room_verification: Ready"); ChatPage::instance()->receivedDeviceVerificationReady(msg.content); }, [](const mtx::events::RoomEvent &msg) { + nhlog::db()->debug("handle_room_verification: Done"); ChatPage::instance()->receivedDeviceVerificationDone(msg.content); }, [](const mtx::events::RoomEvent &msg) { + nhlog::db()->debug("handle_room_verification: Start"); ChatPage::instance()->receivedDeviceVerificationStart(msg.content, msg.sender); }, [](const auto &) {}, diff --git a/src/ui/UserProfile.cpp b/src/ui/UserProfile.cpp index 6ef82123..08219a38 100644 --- a/src/ui/UserProfile.cpp +++ b/src/ui/UserProfile.cpp @@ -112,6 +112,17 @@ UserProfile::getUserStatus() return isUserVerified; } +bool +UserProfile::userVerificationEnabled() const +{ + return hasMasterKey; +} +bool +UserProfile::isSelf() const +{ + return this->userid_ == utils::localUser(); +} + void UserProfile::fetchDeviceList(const QString &userID) { @@ -128,10 +139,10 @@ UserProfile::fetchDeviceList(const QString &userID) return; } - // Finding if the User is Verified or not based on the Signatures + // Ensure local key cache is up to date cache::client()->query_keys( utils::localUser().toStdString(), - [other_user_id, other_user_keys, this](const UserKeyCache &res, + [other_user_id, other_user_keys, this](const UserKeyCache &, mtx::http::RequestErr err) { using namespace mtx; std::string local_user_id = utils::localUser().toStdString(); @@ -143,10 +154,7 @@ UserProfile::fetchDeviceList(const QString &userID) return; } - if (res.device_keys.empty()) { - nhlog::net()->warn("no devices retrieved {}", local_user_id); - return; - } + this->hasMasterKey = !other_user_keys.master_keys.keys.empty(); std::vector deviceInfo; auto devices = other_user_keys.device_keys; diff --git a/src/ui/UserProfile.h b/src/ui/UserProfile.h index 62151266..19527310 100644 --- a/src/ui/UserProfile.h +++ b/src/ui/UserProfile.h @@ -84,6 +84,9 @@ class UserProfile : public QObject Q_PROPERTY(QString avatarUrl READ avatarUrl CONSTANT) Q_PROPERTY(DeviceInfoModel *deviceList READ deviceList CONSTANT) Q_PROPERTY(bool isUserVerified READ getUserStatus NOTIFY userStatusChanged) + Q_PROPERTY( + bool userVerificationEnabled READ userVerificationEnabled NOTIFY userStatusChanged) + Q_PROPERTY(bool isSelf READ isSelf CONSTANT) public: UserProfile(QString roomid, QString userid, @@ -96,6 +99,8 @@ public: QString displayName(); QString avatarUrl(); bool getUserStatus(); + bool userVerificationEnabled() const; + bool isSelf() const; Q_INVOKABLE void verify(QString device = ""); Q_INVOKABLE void unverify(QString device = ""); @@ -112,6 +117,7 @@ private: QString roomid_, userid_; DeviceInfoModel deviceList_; bool isUserVerified = false; + bool hasMasterKey = false; TimelineViewManager *manager; TimelineModel *model; };