From 8b0a2d934f198764597fa8820414a5516d913d7a Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 28 Dec 2014 14:11:34 -0600 Subject: [PATCH] Adding wallet_export rpc. --- rai/core/core.cpp | 28 ++++++++++++++++++++++++++++ rai/core_test/network.cpp | 27 +++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/rai/core/core.cpp b/rai/core/core.cpp index ea59432d..ea5f7a9f 100644 --- a/rai/core/core.cpp +++ b/rai/core/core.cpp @@ -2378,6 +2378,34 @@ void rai::rpc::operator () (boost::network::http::server ::request con response_l.put ("wallet", wallet_id.prv.to_string ()); set_response (response, response_l); } + else if (action == "wallet_export") + { + std::string wallet_text (request_l.get ("wallet")); + rai::uint256_union wallet; + auto error (wallet.decode_hex (wallet_text)); + if (!error) + { + auto existing (client.wallets.items.find (wallet)); + if (existing != client.wallets.items.end ()) + { + std::string json; + existing->second->store.serialize_json (json); + boost::property_tree::ptree response_l; + response_l.put ("json", json); + set_response (response, response_l); + } + else + { + response = boost::network::http::server::response::stock_reply (boost::network::http::server::response::bad_request); + response.content = "Wallet not found"; + } + } + else + { + response = boost::network::http::server::response::stock_reply (boost::network::http::server::response::bad_request); + response.content = "Bad account number"; + } + } else { response = boost::network::http::server::response::stock_reply (boost::network::http::server::response::bad_request); diff --git a/rai/core_test/network.cpp b/rai/core_test/network.cpp index ac9cad03..b292fa75 100644 --- a/rai/core_test/network.cpp +++ b/rai/core_test/network.cpp @@ -982,6 +982,33 @@ TEST (rpc, wallet_create) ASSERT_NE (system.clients [0]->wallets.items.end (), system.clients [0]->wallets.items.find (wallet_id)); } +TEST (rpc, wallet_export) +{ + rai::system system (24000, 1); + auto pool (boost::make_shared ()); + rai::rpc rpc (system.service, pool, boost::asio::ip::address_v6::loopback (), 25000, *system.clients [0], true); + system.wallet (0)->store.insert (rai::test_genesis_key.prv); + boost::network::http::server ::request request; + boost::network::http::server ::response response; + request.method = "POST"; + boost::property_tree::ptree request_tree; + request_tree.put ("action", "wallet_export"); + request_tree.put ("wallet", system.clients [0]->wallets.items.begin ()->first.to_string ()); + std::stringstream ostream; + boost::property_tree::write_json (ostream, request_tree); + request.body = ostream.str (); + rpc (request, response); + ASSERT_EQ (boost::network::http::server ::response::ok, response.status); + boost::property_tree::ptree response_tree; + std::stringstream istream (response.content); + boost::property_tree::read_json (istream, response_tree); + std::string wallet_json (response_tree.get ("json")); + bool error (false); + rai::wallet_store store (error, boost::filesystem::unique_path (), wallet_json); + ASSERT_FALSE (error); + ASSERT_TRUE (store.exists (rai::test_genesis_key.pub)); +} + TEST (parse_endpoint, valid) { std::string string ("127.0.0.1:24000");