From e99374170fdb309df539f5684071faf20d9c3751 Mon Sep 17 00:00:00 2001 From: Lee Clagett Date: Thu, 20 Aug 2020 23:08:51 -0400 Subject: [PATCH] Switching to view public key lookup in db --- src/db/data.h | 4 ++-- src/db/storage.cpp | 9 ++++++++- src/db/string.cpp | 2 +- src/rest_server.cpp | 3 +-- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/db/data.h b/src/db/data.h index e5cc2a2..93d4ded 100644 --- a/src/db/data.h +++ b/src/db/data.h @@ -104,8 +104,8 @@ namespace db //! The public keys of a monero address struct account_address { - crypto::public_key spend_public; //!< Must be first for LMDB optimizations. - crypto::public_key view_public; + crypto::public_key view_public; //!< Must be first for LMDB optimizations. + crypto::public_key spend_public; }; static_assert(sizeof(account_address) == 64, "padding in account_address"); WIRE_DECLARE_OBJECT(account_address); diff --git a/src/db/storage.cpp b/src/db/storage.cpp index d7663f6..4c6bb5f 100644 --- a/src/db/storage.cpp +++ b/src/db/storage.cpp @@ -184,7 +184,7 @@ namespace db "accounts_by_status,id", (MDB_CREATE | MDB_DUPSORT), MONERO_SORT_BY(account, id) }; constexpr const lmdb::basic_table accounts_by_address( - "accounts_by_address", (MDB_CREATE | MDB_DUPSORT), MONERO_COMPARE(account_by_address, address.spend_public) + "accounts_by_address", (MDB_CREATE | MDB_DUPSORT), MONERO_COMPARE(account_by_address, address.view_public) ); constexpr const lmdb::basic_table accounts_by_height( "accounts_by_height,id", (MDB_CREATE | MDB_DUPSORT), MONERO_SORT_BY(account_lookup, id) @@ -544,6 +544,13 @@ namespace db return {lmdb::error(err)}; } + /* Database is only indexing by view public for possible CurveZMQ + authentication extensions. Verifying both public keys here - the function + takes the entire address as an argument. */ + static_assert(offsetof(account_by_address, address) == 0, "unexpected field offset"); + if (value.mv_size < sizeof(account_address) || std::memcmp(value.mv_data, &address, sizeof(account_address)) != 0) + return {lws::error::account_not_found}; + const expect lookup = accounts_by_address.get_value(value); if (!lookup) diff --git a/src/db/string.cpp b/src/db/string.cpp index 3094ef0..267c2c7 100644 --- a/src/db/string.cpp +++ b/src/db/string.cpp @@ -55,7 +55,7 @@ namespace db return {lws::error::bad_address}; return account_address{ - info.address.m_spend_public_key, info.address.m_view_public_key + info.address.m_view_public_key, info.address.m_spend_public_key }; } } // db diff --git a/src/rest_server.cpp b/src/rest_server.cpp index 8d2a89b..589af29 100644 --- a/src/rest_server.cpp +++ b/src/rest_server.cpp @@ -789,8 +789,7 @@ namespace lws response.m_response_comment = "OK"; response.m_mime_tipe = "application/json"; response.m_header_info.m_content_type = "application/json"; - response.m_body.assign(reinterpret_cast(body->data()), body->size()); // \TODO Remove copy here too! - response.m_additional_fields.push_back({"Access-Control-Allow-Credentials", "true"}); + response.m_body.assign(reinterpret_cast(body->data()), body->size()); // \TODO Remove copy here too!s return true; } };