Handle Device Verification related to_device messages

This commit is contained in:
Chethan2k1 2020-06-09 22:06:41 +05:30 committed by CH Chethan Reddy
parent cd5dd0e39b
commit 1eb162cb6f
7 changed files with 153 additions and 14 deletions

View file

@ -1,4 +1,5 @@
#include "DeviceVerificationFlow.h"
#include "ChatPage.h"
#include "Logging.h"
#include <QDateTime>
@ -8,22 +9,73 @@
static constexpr int TIMEOUT = 2 * 60 * 1000; // 2 minutes
namespace msgs = mtx::events::msg;
DeviceVerificationFlow::DeviceVerificationFlow(QObject *)
{
qRegisterMetaType<mtx::events::collections::DeviceEvents>();
timeout = new QTimer(this);
timeout->setSingleShot(true);
connect(timeout, &QTimer::timeout, this, [this]() {
emit timedout();
this->deleteLater();
});
connect(ChatPage::instance(),
&ChatPage::recievedDeviceVerificationAccept,
this,
[this](const mtx::events::collections::DeviceEvents &message) {
auto msg =
std::get<mtx::events::DeviceEvent<msgs::KeyVerificationAccept>>(message);
if (msg.content.transaction_id == this->transaction_id) {
std::cout << "Recieved Event Accept" << std::endl;
}
});
connect(ChatPage::instance(),
&ChatPage::recievedDeviceVerificationRequest,
this,
[this](const mtx::events::collections::DeviceEvents &message) {
auto msg =
std::get<mtx::events::DeviceEvent<msgs::KeyVerificationRequest>>(message);
if (msg.content.transaction_id == this->transaction_id) {
std::cout << "Recieved Event Request" << std::endl;
}
});
connect(ChatPage::instance(),
&ChatPage::recievedDeviceVerificationCancel,
this,
[this](const mtx::events::collections::DeviceEvents &message) {
auto msg =
std::get<mtx::events::DeviceEvent<msgs::KeyVerificationCancel>>(message);
if (msg.content.transaction_id == this->transaction_id) {
std::cout << "Recieved Event Cancel" << std::endl;
}
});
connect(ChatPage::instance(),
&ChatPage::recievedDeviceVerificationKey,
this,
[this](const mtx::events::collections::DeviceEvents &message) {
auto msg =
std::get<mtx::events::DeviceEvent<msgs::KeyVerificationKey>>(message);
if (msg.content.transaction_id == this->transaction_id) {
std::cout << "Recieved Event Key" << std::endl;
}
});
connect(ChatPage::instance(),
&ChatPage::recievedDeviceVerificationMac,
this,
[this](const mtx::events::collections::DeviceEvents &message) {
auto msg =
std::get<mtx::events::DeviceEvent<msgs::KeyVerificationMac>>(message);
if (msg.content.transaction_id == this->transaction_id) {
std::cout << "Recieved Event Mac" << std::endl;
}
});
timeout->start(TIMEOUT);
}
QString
DeviceVerificationFlow::getUserId()
{
toClient = mtx::identifiers::parse<mtx::identifiers::User>((this->userId).toStdString());
std::cout << http::client()->device_id() << std::endl;
return this->userId;
}
@ -43,6 +95,7 @@ void
DeviceVerificationFlow::setUserId(QString userID)
{
this->userId = userID;
this->toClient = mtx::identifiers::parse<mtx::identifiers::User>(userID.toStdString());
}
void
@ -101,7 +154,8 @@ DeviceVerificationFlow::startVerificationRequest()
req.hashes = {};
req.message_authentication_codes = {};
// req.short_authentication_string = "";
qDebug()<<"Inside Start Verification";
qDebug()<<this->userId;
body[this->toClient][this->deviceId.toStdString()] = req;
http::client()
@ -168,6 +222,51 @@ DeviceVerificationFlow::cancelVerification()
this->deleteLater();
});
}
//! sends the verification key
void
DeviceVerificationFlow::sendVerificationKey()
{
mtx::requests::ToDeviceMessages<mtx::events::msg::KeyVerificationKey> body;
mtx::events::msg::KeyVerificationKey req;
req.key = "";
req.transaction_id = this->transaction_id;
body[this->toClient][deviceId.toStdString()] = req;
http::client()
->send_to_device<mtx::events::msg::KeyVerificationKey,
mtx::events::EventType::KeyVerificationKey>(
"m.key.verification.cancel", body, [](mtx::http::RequestErr err) {
if (err)
nhlog::net()->warn("failed to send verification key: {} {}",
err->matrix_error.error,
static_cast<int>(err->status_code));
});
}
//! sends the mac of the keys
void
DeviceVerificationFlow::sendVerificationMac()
{
mtx::requests::ToDeviceMessages<mtx::events::msg::KeyVerificationMac> body;
mtx::events::msg::KeyVerificationMac req;
req.transaction_id = this->transaction_id;
// req.mac = "";
req.keys = "";
body[this->toClient][deviceId.toStdString()] = req;
http::client()
->send_to_device<mtx::events::msg::KeyVerificationMac,
mtx::events::EventType::KeyVerificationMac>(
"m.key.verification.cancel", body, [](mtx::http::RequestErr err) {
if (err)
nhlog::net()->warn("failed to send verification MAC: {} {}",
err->matrix_error.error,
static_cast<int>(err->status_code));
});
}
//! Completes the verification flow
void
DeviceVerificationFlow::acceptDevice()