diff --git a/src/gui/qt-daemon/application/mainwindow.cpp b/src/gui/qt-daemon/application/mainwindow.cpp index c2aa378b..2d8856a7 100644 --- a/src/gui/qt-daemon/application/mainwindow.cpp +++ b/src/gui/qt-daemon/application/mainwindow.cpp @@ -1977,7 +1977,7 @@ QString MainWindow::is_valid_restore_wallet_text(const QString& param) { TRY_ENTRY(); LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::is_valid_restore_wallet_text_param, rwtp); + PREPARE_ARG_FROM_JSON(view::seed_info_param, rwtp); return m_backend.is_valid_brain_restore_data(rwtp.seed_phrase, rwtp.seed_password).c_str(); CATCH_ENTRY2(API_RETURN_CODE_INTERNAL_ERROR); } @@ -1986,7 +1986,7 @@ QString MainWindow::get_seed_phrase_info(const QString& param) { TRY_ENTRY(); LOG_API_TIMING(); - PREPARE_ARG_FROM_JSON(view::is_valid_restore_wallet_text_param, rwtp); + PREPARE_ARG_FROM_JSON(view::seed_info_param, rwtp); PREPARE_RESPONSE(view::seed_phrase_info, ar); ar.error_code = m_backend.get_seed_phrase_info(rwtp.seed_phrase, rwtp.seed_password, ar.response_data).c_str(); return MAKE_RESPONSE(ar); diff --git a/src/wallet/view_iface.h b/src/wallet/view_iface.h index 4ebdac4b..1dc31f2c 100644 --- a/src/wallet/view_iface.h +++ b/src/wallet/view_iface.h @@ -442,30 +442,6 @@ public: END_KV_SERIALIZE_MAP() }; - - struct is_valid_restore_wallet_text_param - { - std::string seed_phrase; - std::string seed_password; - - BEGIN_KV_SERIALIZE_MAP() - KV_SERIALIZE(seed_phrase) - KV_SERIALIZE(seed_password) - END_KV_SERIALIZE_MAP() - }; - - struct seed_phrase_info - { - bool syntax_correct; - bool require_password; - bool hash_sum_matched; - - BEGIN_KV_SERIALIZE_MAP() - KV_SERIALIZE(syntax_correct) - KV_SERIALIZE(require_password) - KV_SERIALIZE(hash_sum_matched) - END_KV_SERIALIZE_MAP() - }; struct restore_wallet_request { @@ -588,6 +564,8 @@ public: END_KV_SERIALIZE_MAP() }; + typedef tools::wallet_public::seed_info_param seed_info_param; + typedef tools::wallet_public::seed_phrase_info seed_phrase_info; struct start_backend_params { diff --git a/src/wallet/wallet_helpers.h b/src/wallet/wallet_helpers.h index 9f415dfb..e4cee938 100644 --- a/src/wallet/wallet_helpers.h +++ b/src/wallet/wallet_helpers.h @@ -23,4 +23,16 @@ namespace tools wi.is_watch_only = w.is_watch_only(); return true; } + + inline std::string get_seed_phrase_info(const std::string& seed_phrase, const std::string& seed_password, view::seed_phrase_info& result) + { + //cut the last timestamp word from restore_dats + result.syntax_correct = currency::account_base::is_seed_password_protected(seed_phrase, result.require_password); + if (result.syntax_correct) + { + currency::account_base acc; + result.hash_sum_matched = acc.restore_from_seed_phrase(seed_phrase, seed_password); + } + return API_RETURN_CODE_OK; + } } \ No newline at end of file diff --git a/src/wallet/wallet_public_structs_defs.h b/src/wallet/wallet_public_structs_defs.h index 420c4953..7b0c344e 100644 --- a/src/wallet/wallet_public_structs_defs.h +++ b/src/wallet/wallet_public_structs_defs.h @@ -168,6 +168,29 @@ namespace wallet_public }; + struct seed_info_param + { + std::string seed_phrase; + std::string seed_password; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(seed_phrase) + KV_SERIALIZE(seed_password) + END_KV_SERIALIZE_MAP() + }; + + struct seed_phrase_info + { + bool syntax_correct; + bool require_password; + bool hash_sum_matched; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(syntax_correct) + KV_SERIALIZE(require_password) + KV_SERIALIZE(hash_sum_matched) + END_KV_SERIALIZE_MAP() + }; struct COMMAND_RPC_GET_BALANCE { @@ -221,7 +244,6 @@ namespace wallet_public { std::string address; std::string path; - std::string seed; uint64_t transfers_count; uint64_t transfer_entries_count; bool is_whatch_only; @@ -230,7 +252,6 @@ namespace wallet_public BEGIN_KV_SERIALIZE_MAP() KV_SERIALIZE(address) KV_SERIALIZE(path) - KV_SERIALIZE(seed) KV_SERIALIZE(transfers_count) KV_SERIALIZE(transfer_entries_count) KV_SERIALIZE(is_whatch_only) @@ -239,6 +260,32 @@ namespace wallet_public }; }; + struct COMMAND_RPC_GET_WALLET_RESTORE_INFO + { + struct request + { + std::string seed_password; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(seed_password) + END_KV_SERIALIZE_MAP() + }; + + struct response + { + std::string seed_phrase; + + BEGIN_KV_SERIALIZE_MAP() + KV_SERIALIZE(seed_phrase) + END_KV_SERIALIZE_MAP() + }; + }; + + struct COMMAND_RPC_GET_SEED_PHRASE_INFO + { + typedef seed_info_param request; + typedef seed_phrase_info response; + }; struct wallet_provision_info { diff --git a/src/wallet/wallet_rpc_server.cpp b/src/wallet/wallet_rpc_server.cpp index 0dff893b..dda68d94 100644 --- a/src/wallet/wallet_rpc_server.cpp +++ b/src/wallet/wallet_rpc_server.cpp @@ -15,6 +15,7 @@ using namespace epee; #include "misc_language.h" #include "crypto/hash.h" #include "wallet_rpc_server_error_codes.h" +#include "wallet_helpers.h" #define WALLET_RPC_BEGIN_TRY_ENTRY() try { #define WALLET_RPC_CATCH_TRY_ENTRY() } \ @@ -196,7 +197,6 @@ namespace tools res.path = epee::string_encoding::convert_to_ansii(m_wallet.get_wallet_path()); res.transfers_count = m_wallet.get_recent_transfers_total_count(); res.transfer_entries_count = m_wallet.get_transfer_entries_count(); - //res.seed = m_wallet.get_account().get_seed_phrase(); std::map distribution; m_wallet.get_utxo_distribution(distribution); for (const auto& ent : distribution) @@ -211,6 +211,25 @@ namespace tools return false; } } + bool wallet_rpc_server::on_getwallet_restore_info(const wallet_public::COMMAND_RPC_GET_WALLET_RESTORE_INFO::request& req, wallet_public::COMMAND_RPC_GET_WALLET_RESTORE_INFO::response& res, epee::json_rpc::error& er, connection_context& cntx) + { + try + { + res.seed_phrase = m_wallet.get_account().get_seed_phrase(res.seed_phrase); + return true; + } + catch (std::exception& e) + { + er.code = WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR; + er.message = e.what(); + return false; + } + } + bool wallet_rpc_server::on_get_seed_phrase_info(const wallet_public::COMMAND_RPC_GET_SEED_PHRASE_INFO::request& req, wallet_public::COMMAND_RPC_GET_SEED_PHRASE_INFO::response& res, epee::json_rpc::error& er, connection_context& cntx) + { + tools::get_seed_phrase_info(req.seed_phrase, req.seed_password, res); + return true; + } bool wallet_rpc_server::on_get_recent_txs_and_info(const wallet_public::COMMAND_RPC_GET_RECENT_TXS_AND_INFO::request& req, wallet_public::COMMAND_RPC_GET_RECENT_TXS_AND_INFO::response& res, epee::json_rpc::error& er, connection_context& cntx) { try diff --git a/src/wallet/wallet_rpc_server.h b/src/wallet/wallet_rpc_server.h index 702a7c44..ccf26798 100644 --- a/src/wallet/wallet_rpc_server.h +++ b/src/wallet/wallet_rpc_server.h @@ -51,6 +51,8 @@ namespace tools MAP_JON_RPC_WE("sign_transfer", on_sign_transfer, wallet_public::COMMAND_SIGN_TRANSFER) MAP_JON_RPC_WE("submit_transfer", on_submit_transfer, wallet_public::COMMAND_SUBMIT_TRANSFER) MAP_JON_RPC_WE("search_for_transactions", on_search_for_transactions, wallet_public::COMMAND_RPC_SEARCH_FOR_TRANSACTIONS) + MAP_JON_RPC_WE("get_restore_info", on_getwallet_restore_info, wallet_public::COMMAND_RPC_GET_WALLET_RESTORE_INFO) + MAP_JON_RPC_WE("get_seed_phrase_info", on_get_seed_phrase_info, wallet_public::COMMAND_RPC_GET_SEED_PHRASE_INFO) //contracts API MAP_JON_RPC_WE("contracts_send_proposal", on_contracts_send_proposal, wallet_public::COMMAND_CONTRACTS_SEND_PROPOSAL) MAP_JON_RPC_WE("contracts_accept_proposal", on_contracts_accept_proposal, wallet_public::COMMAND_CONTRACTS_ACCEPT_PROPOSAL) @@ -70,6 +72,8 @@ namespace tools bool on_getbalance(const wallet_public::COMMAND_RPC_GET_BALANCE::request& req, wallet_public::COMMAND_RPC_GET_BALANCE::response& res, epee::json_rpc::error& er, connection_context& cntx); bool on_getaddress(const wallet_public::COMMAND_RPC_GET_ADDRESS::request& req, wallet_public::COMMAND_RPC_GET_ADDRESS::response& res, epee::json_rpc::error& er, connection_context& cntx); bool on_getwallet_info(const wallet_public::COMMAND_RPC_GET_WALLET_INFO::request& req, wallet_public::COMMAND_RPC_GET_WALLET_INFO::response& res, epee::json_rpc::error& er, connection_context& cntx); + bool on_getwallet_restore_info(const wallet_public::COMMAND_RPC_GET_WALLET_RESTORE_INFO::request& req, wallet_public::COMMAND_RPC_GET_WALLET_RESTORE_INFO::response& res, epee::json_rpc::error& er, connection_context& cntx); + bool on_get_seed_phrase_info(const wallet_public::COMMAND_RPC_GET_SEED_PHRASE_INFO::request& req, wallet_public::COMMAND_RPC_GET_SEED_PHRASE_INFO::response& res, epee::json_rpc::error& er, connection_context& cntx); bool on_get_recent_txs_and_info(const wallet_public::COMMAND_RPC_GET_RECENT_TXS_AND_INFO::request& req, wallet_public::COMMAND_RPC_GET_RECENT_TXS_AND_INFO::response& res, epee::json_rpc::error& er, connection_context& cntx); bool on_transfer(const wallet_public::COMMAND_RPC_TRANSFER::request& req, wallet_public::COMMAND_RPC_TRANSFER::response& res, epee::json_rpc::error& er, connection_context& cntx); bool on_store(const wallet_public::COMMAND_RPC_STORE::request& req, wallet_public::COMMAND_RPC_STORE::response& res, epee::json_rpc::error& er, connection_context& cntx); diff --git a/src/wallet/wallets_manager.cpp b/src/wallet/wallets_manager.cpp index 75813f67..ec07c3b2 100644 --- a/src/wallet/wallets_manager.cpp +++ b/src/wallet/wallets_manager.cpp @@ -1084,14 +1084,7 @@ void wallets_manager::subscribe_to_core_events(currency::i_core_event_handler* p std::string wallets_manager::get_seed_phrase_info(const std::string& seed_phrase, const std::string& seed_password, view::seed_phrase_info& result) { - //cut the last timestamp word from restore_dats - result.syntax_correct = currency::account_base::is_seed_password_protected(seed_phrase, result.require_password); - if (result.syntax_correct) - { - currency::account_base acc; - result.hash_sum_matched = acc.restore_from_seed_phrase(seed_phrase, seed_password); - } - return API_RETURN_CODE_OK; + return tools::get_seed_phrase_info(seed_phrase, seed_password, result); }