From 4e29bcfc0954b7b37257022cf66dc60cad8b56b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Wed, 5 Feb 2025 15:54:50 -0500 Subject: [PATCH] utils: use parseJson Change-Id: I827de0a30a32e75e21993b435a0a68d71d846653 --- src/call.cpp | 6 ++--- src/conference.cpp | 8 +++--- src/jamidht/account_manager.cpp | 17 +++--------- src/jamidht/account_manager.h | 1 - src/jamidht/conversationrepository.cpp | 37 +++++--------------------- src/jamidht/jamiaccount.cpp | 24 ++++------------- src/jamidht/namedirectory.cpp | 23 +++------------- 7 files changed, 22 insertions(+), 94 deletions(-) diff --git a/src/call.cpp b/src/call.cpp index 710e7e268..2eb52f1ad 100644 --- a/src/call.cpp +++ b/src/call.cpp @@ -33,6 +33,7 @@ #include "enumclass_utils.h" #include "errno.h" +#include "json_utils.h" #include <dhtnet/ip_utils.h> #include <opendht/thread_pool.h> @@ -636,10 +637,7 @@ Call::setConferenceInfo(const std::string& msg) { ConfInfo newInfo; Json::Value json; - std::string err; - Json::CharReaderBuilder rbuilder; - auto reader = std::unique_ptr<Json::CharReader>(rbuilder.newCharReader()); - if (reader->parse(msg.data(), msg.data() + msg.size(), &json, &err)) { + if (parseJson(msg, json)) { if (json.isObject()) { // new confInfo if (json.isMember("p")) { diff --git a/src/conference.cpp b/src/conference.cpp index e1671da22..b844e19c9 100644 --- a/src/conference.cpp +++ b/src/conference.cpp @@ -43,6 +43,7 @@ #include "jami/media_const.h" #include "audio/ringbufferpool.h" #include "sip/sipcall.h" +#include "json_utils.h" #include <opendht/thread_pool.h> @@ -1119,12 +1120,9 @@ Conference::onConfOrder(const std::string& callId, const std::string& confOrder) // Check if the peer is a master if (auto call = getCall(callId)) { const auto& peerId = getRemoteId(call); - std::string err; Json::Value root; - Json::CharReaderBuilder rbuilder; - auto reader = std::unique_ptr<Json::CharReader>(rbuilder.newCharReader()); - if (!reader->parse(confOrder.c_str(), confOrder.c_str() + confOrder.size(), &root, &err)) { - JAMI_WARN("Unable to parse conference order from %s", peerId.c_str()); + if (!parseJson(confOrder, root)) { + JAMI_WARNING("Unable to parse conference order from {}", peerId); return; } diff --git a/src/jamidht/account_manager.cpp b/src/jamidht/account_manager.cpp index 6fe707aeb..6f839a1bc 100644 --- a/src/jamidht/account_manager.cpp +++ b/src/jamidht/account_manager.cpp @@ -24,6 +24,7 @@ #include "manager.h" #include "libdevcrypto/Common.h" +#include "json_utils.h" #include <opendht/thread_pool.h> #include <opendht/crypto.h> @@ -213,8 +214,8 @@ AccountManager::useIdentity(const dht::crypto::Identity& identity, return nullptr; } - auto root = announceFromReceipt(receipt); - if (!root.isMember("announce")) { + Json::Value root; + if (!parseJson(receipt, root) || !root.isMember("announce")) { JAMI_ERROR("[Account {}] [Auth] device receipt parsing error", accountId_); return nullptr; } @@ -268,18 +269,6 @@ AccountManager::reloadContacts() } } -Json::Value -AccountManager::announceFromReceipt(const std::string& receipt) -{ - Json::Value root; - Json::CharReaderBuilder rbuilder; - auto reader = std::unique_ptr<Json::CharReader>(rbuilder.newCharReader()); - if (!reader->parse(&receipt[0], &receipt[receipt.size()], &root, nullptr)) { - JAMI_ERROR("[Account {}] error parsing device receipt", accountId_); - } - return root; -} - void AccountManager::startSync(const OnNewDeviceCb& cb, const OnDeviceAnnouncedCb& dcb, bool publishPresence) { diff --git a/src/jamidht/account_manager.h b/src/jamidht/account_manager.h index 32b75e759..3a5c8ee7b 100644 --- a/src/jamidht/account_manager.h +++ b/src/jamidht/account_manager.h @@ -135,7 +135,6 @@ public: const std::vector<uint8_t>& receiptSignature, const std::string& username, const OnChangeCallback& onChange); - Json::Value announceFromReceipt(const std::string& receipt); void setDht(const std::shared_ptr<dht::DhtRunner>& dht) { dht_ = dht; } diff --git a/src/jamidht/conversationrepository.cpp b/src/jamidht/conversationrepository.cpp index 8112003aa..7b5715a66 100644 --- a/src/jamidht/conversationrepository.cpp +++ b/src/jamidht/conversationrepository.cpp @@ -24,6 +24,7 @@ #include "string_utils.h" #include "client/ring_signal.h" #include "vcard.h" +#include "json_utils.h" #include <ctime> #include <fstream> @@ -1740,14 +1741,9 @@ ConversationRepository::Impl::checkInitialCommit(const std::string& userDevice, std::string invited = {}; if (mode_ == ConversationMode::ONE_TO_ONE) { - std::string err; Json::Value cm; - Json::CharReaderBuilder rbuilder; - auto reader = std::unique_ptr<Json::CharReader>(rbuilder.newCharReader()); - if (reader->parse(commitMsg.data(), commitMsg.data() + commitMsg.size(), &cm, &err)) { + if (parseJson(commitMsg, cm)) { invited = cm["invited"].asString(); - } else { - JAMI_WARNING("{}", err); } } @@ -2012,11 +2008,8 @@ ConversationRepository::Impl::mode() const } auto commitMsg = lastMsg[0].commit_msg; - std::string err; Json::Value root; - Json::CharReaderBuilder rbuilder; - auto reader = std::unique_ptr<Json::CharReader>(rbuilder.newCharReader()); - if (!reader->parse(commitMsg.data(), commitMsg.data() + commitMsg.size(), &root, &err)) { + if (!parseJson(commitMsg, root)) { emitSignal<libjami::ConversationSignal::OnConversationError>(accountId_, id_, EINVALIDMODE, @@ -2384,14 +2377,8 @@ ConversationRepository::Impl::getInitialMembers() const return {}; auto authorId = cert->issuer->getId().toString(); if (mode() == ConversationMode::ONE_TO_ONE) { - std::string err; Json::Value root; - Json::CharReaderBuilder rbuilder; - auto reader = std::unique_ptr<Json::CharReader>(rbuilder.newCharReader()); - if (!reader->parse(commit.commit_msg.data(), - commit.commit_msg.data() + commit.commit_msg.size(), - &root, - &err)) { + if (!parseJson(commit.commit_msg, root)) { return {authorId}; } if (root.isMember("invited") && root["invited"].asString() != authorId) @@ -2531,14 +2518,8 @@ ConversationRepository::Impl::convCommitToMap(const ConversationCommit& commit) std::string body {}; std::map<std::string, std::string> message; if (type.empty()) { - std::string err; Json::Value cm; - Json::CharReaderBuilder rbuilder; - auto reader = std::unique_ptr<Json::CharReader>(rbuilder.newCharReader()); - if (reader->parse(commit.commit_msg.data(), - commit.commit_msg.data() + commit.commit_msg.size(), - &cm, - &err)) { + if (parseJson(commit.commit_msg, cm)) { for (auto const& id : cm.getMemberNames()) { if (id == "type") { type = cm[id].asString(); @@ -2546,8 +2527,6 @@ ConversationRepository::Impl::convCommitToMap(const ConversationCommit& commit) } message.insert({id, cm[id].asString()}); } - } else { - JAMI_WARNING("{}", err); } } if (type.empty()) { @@ -2732,15 +2711,11 @@ ConversationRepository::Impl::validCommits( } } else if (commit.parents.size() == 1) { std::string type = {}, editId = {}; - std::string err; Json::Value cm; - Json::CharReaderBuilder rbuilder; - auto reader = std::unique_ptr<Json::CharReader>(rbuilder.newCharReader()); - if (reader->parse(commit.commit_msg.data(), commit.commit_msg.data() + commit.commit_msg.size(), &cm, &err)) { + if (parseJson(commit.commit_msg, cm)) { type = cm["type"].asString(); editId = cm["edit"].asString(); } else { - JAMI_WARNING("{}", err); emitSignal<libjami::ConversationSignal::OnConversationError>( accountId_, id_, EVALIDFETCH, "Malformed commit"); return false; diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp index d52fc3157..75ac0eba9 100644 --- a/src/jamidht/jamiaccount.cpp +++ b/src/jamidht/jamiaccount.cpp @@ -68,6 +68,7 @@ #include "string_utils.h" #include "archiver.h" #include "data_transfer.h" +#include "json_utils.h" #include "libdevcrypto/Common.h" #include "base64.h" @@ -923,11 +924,8 @@ JamiAccount::loadConfig() try { auto str = fileutils::loadCacheTextFile(cachePath_ / "dhtproxy", std::chrono::hours(24 * 7)); - std::string err; Json::Value root; - Json::CharReaderBuilder rbuilder; - auto reader = std::unique_ptr<Json::CharReader>(rbuilder.newCharReader()); - if (reader->parse(str.data(), str.data() + str.size(), &root, &err)) { + if (parseJson(str, root)) { proxyServerCached_ = root[getProxyConfigKey()].asString(); } } catch (const std::exception& e) { @@ -3161,11 +3159,7 @@ JamiAccount::sendMessage(const std::string& to, // to load the conversation. auto extractIdFromJson = [](const std::string& jsonData) -> std::string { Json::Value parsed; - Json::CharReaderBuilder readerBuilder; - auto reader = std::unique_ptr<Json::CharReader>(readerBuilder.newCharReader()); - std::string errors; - - if (reader->parse(jsonData.c_str(), jsonData.c_str() + jsonData.size(), &parsed, &errors)) { + if (parseJson(jsonData, parsed)) { auto value = parsed.get("id", Json::nullValue); if (value && value.isString()) { return value.asString(); @@ -3518,11 +3512,7 @@ JamiAccount::handleMessage(const std::string& from, const std::pair<std::string, { if (m.first == MIME_TYPE_GIT) { Json::Value json; - std::string err; - Json::CharReaderBuilder rbuilder; - auto reader = std::unique_ptr<Json::CharReader>(rbuilder.newCharReader()); - if (!reader->parse(m.second.data(), m.second.data() + m.second.size(), &json, &err)) { - JAMI_ERROR("Unable to parse server response: {}", err); + if (!parseJson(m.second, json)) { return false; } @@ -3542,11 +3532,7 @@ JamiAccount::handleMessage(const std::string& from, const std::pair<std::string, return true; } else if (m.first == MIME_TYPE_INVITE_JSON) { Json::Value json; - std::string err; - Json::CharReaderBuilder rbuilder; - auto reader = std::unique_ptr<Json::CharReader>(rbuilder.newCharReader()); - if (!reader->parse(m.second.data(), m.second.data() + m.second.size(), &json, &err)) { - JAMI_ERROR("Unable to parse server response: {}", err); + if (!parseJson(m.second, json)) { return false; } convModule()->onConversationRequest(from, json); diff --git a/src/jamidht/namedirectory.cpp b/src/jamidht/namedirectory.cpp index 9e7998ef0..38716acc3 100644 --- a/src/jamidht/namedirectory.cpp +++ b/src/jamidht/namedirectory.cpp @@ -37,7 +37,7 @@ #include <cstddef> #include <msgpack.hpp> -#include <json/json.h> +#include "json_utils.h" /* for visual studio */ #include <ciso646> @@ -200,16 +200,7 @@ NameDirectory::lookupAddress(const std::string& addr, LookupCallback cb) } else { try { Json::Value json; - std::string err; - Json::CharReaderBuilder rbuilder; - auto reader = std::unique_ptr<Json::CharReader>(rbuilder.newCharReader()); - if (!reader->parse(response.body.data(), - response.body.data() + response.body.size(), - &json, - &err)) { - JAMI_DBG("Address lookup for %s: Unable to parse server response: %s", - addr.c_str(), - response.body.c_str()); + if (!parseJson(response.body, json)) { cb("", "", Response::error); return; } @@ -285,15 +276,7 @@ NameDirectory::lookupName(const std::string& name, LookupCallback cb) } else { try { Json::Value json; - std::string err; - Json::CharReaderBuilder rbuilder; - auto reader = std::unique_ptr<Json::CharReader>(rbuilder.newCharReader()); - if (!reader->parse(response.body.data(), - response.body.data() + response.body.size(), - &json, - &err)) { - JAMI_ERROR("Name lookup for {}: Unable to parse server response: {}", - name, response.body); + if (!parseJson(response.body, json)) { cb("", "", Response::error); return; } -- GitLab