summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorCH Chethan Reddy <40890937+Chethan2k1@users.noreply.github.com>2020-05-17 19:04:47 +0530
committerCH Chethan Reddy <40890937+Chethan2k1@users.noreply.github.com>2020-07-30 22:10:27 +0530
commit64f204d984d4c4f520f8c5de613e17b01dd9a317 (patch)
treed32cc8c44fbc4c9ce0f146997a6db3f0f7e6ec16 /src
parentAdd DeviceVerificationFlow dummy and verification test button (diff)
downloadnheko-64f204d984d4c4f520f8c5de613e17b01dd9a317.tar.xz
Rewrite UserProfile in qml
Diffstat (limited to 'src')
-rw-r--r--src/Olm.cpp16
-rw-r--r--src/ui/UserProfile.cpp58
-rw-r--r--src/ui/UserProfile.h29
3 files changed, 103 insertions, 0 deletions
diff --git a/src/Olm.cpp b/src/Olm.cpp

index 994a3a67..494bc201 100644 --- a/src/Olm.cpp +++ b/src/Olm.cpp
@@ -52,6 +52,11 @@ handle_to_device_messages(const std::vector<mtx::events::collections::DeviceEven nhlog::crypto()->warn("validation error for olm message: {} {}", e.what(), j_msg.dump(2)); + + nhlog::crypto()->warn("validation error for olm message: {} {}", + e.what(), + j_msg.dump(2)); + } } else if (msg_type == to_string(mtx::events::EventType::RoomKeyRequest)) { @@ -368,6 +373,10 @@ handle_key_request_message(const mtx::events::DeviceEvent<mtx::events::msg::KeyR if (!cache::outboundMegolmSessionExists(req.content.room_id)) { nhlog::crypto()->warn("requested session not found in room: {}", req.content.room_id); + + nhlog::crypto()->warn("requested session not found in room: {}", + req.content.room_id); + return; } @@ -390,6 +399,13 @@ handle_key_request_message(const mtx::events::DeviceEvent<mtx::events::msg::KeyR } if (!utils::respondsToKeyRequests(req.content.room_id)) { + + nhlog::crypto()->debug("ignoring all key requests for room {}", + req.content.room_id); + + nhlog::crypto()->debug("ignoring all key requests for room {}", + req.content.room_id); + nhlog::crypto()->debug("ignoring all key requests for room {}", req.content.room_id); return; diff --git a/src/ui/UserProfile.cpp b/src/ui/UserProfile.cpp new file mode 100644
index 00000000..ac35f1d4 --- /dev/null +++ b/src/ui/UserProfile.cpp
@@ -0,0 +1,58 @@ +#include "UserProfile.h" +#include "Logging.h" +#include "MatrixClient.h" +#include "Utils.h" + +UserProfile::UserProfile(QObject *parent) + : QObject(parent) +{} + +QMap<QString, QString> +UserProfile::getDeviceList() +{ + return this->deviceList; +} + +void +UserProfile::fetchDeviceList(const QString &userId) +{ + auto localUser = utils::localUser(); + mtx::requests::QueryKeys req; + req.device_keys[userId.toStdString()] = {}; + + http::client()->query_keys( + req, + [user_id = userId.toStdString()](const mtx::responses::QueryKeys &res, + mtx::http::RequestErr err) { + if (err) { + nhlog::net()->warn("failed to query device keys: {} {}", + err->matrix_error.error, + static_cast<int>(err->status_code)); + return; + } + + if (res.device_keys.empty() || + (res.device_keys.find(user_id) == res.device_keys.end())) { + nhlog::net()->warn("no devices retrieved {}", user_id); + return; + } + + auto devices = res.device_keys.at(user_id); + + std::vector<DeviceInfo> deviceInfo; + for (const auto &d : devices) { + auto device = d.second; + + // TODO: Verify signatures and ignore those that don't pass. + deviceInfo.emplace_back(DeviceInfo{ + QString::fromStdString(d.first), + QString::fromStdString(device.unsigned_info.device_display_name)}); + } + + std::sort(deviceInfo.begin(), + deviceInfo.end(), + [](const DeviceInfo &a, const DeviceInfo &b) { + return a.device_id > b.device_id; + }); + }); +} diff --git a/src/ui/UserProfile.h b/src/ui/UserProfile.h new file mode 100644
index 00000000..d003e6ca --- /dev/null +++ b/src/ui/UserProfile.h
@@ -0,0 +1,29 @@ +#pragma once + +#include <QMap> +#include <QObject> +#include <QString> + +struct DeviceInfo +{ + QString device_id; + QString display_name; +}; + +class UserProfile : public QObject +{ + Q_OBJECT + Q_PROPERTY(QMap deviceList READ getDeviceList NOTIFY DeviceListUpdated) + +public: + explicit UserProfile(QObject *parent = 0); + QMap<QString, QString> getDeviceList(); + + Q_INVOKABLE void fetchDeviceList(const QString &userID); + +signals: + void DeviceListUpdated(); + +private: + QMap<QString, QString> deviceList; +}; \ No newline at end of file