aboutsummaryrefslogtreecommitdiff
path: root/src/simplewallet/simplewallet.cpp
diff options
context:
space:
mode:
authorstoffu <stoffu@protonmail.ch>2018-07-30 20:39:05 +0900
committerstoffu <stoffu@protonmail.ch>2018-07-30 20:39:05 +0900
commitf13c7a8263139afe127f3c8cf34277334e24700a (patch)
tree4d4f67dfd337d81dfa755ae209e29a3521122265 /src/simplewallet/simplewallet.cpp
parentMerge pull request #4088 (diff)
downloadmonero-f13c7a8263139afe127f3c8cf34277334e24700a.tar.xz
simplewallet: make sure wallet config is stored right after creation
Diffstat (limited to 'src/simplewallet/simplewallet.cpp')
-rw-r--r--src/simplewallet/simplewallet.cpp60
1 files changed, 36 insertions, 24 deletions
diff --git a/src/simplewallet/simplewallet.cpp b/src/simplewallet/simplewallet.cpp
index 193b62571..4b720b029 100644
--- a/src/simplewallet/simplewallet.cpp
+++ b/src/simplewallet/simplewallet.cpp
@@ -2806,6 +2806,7 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm)
m_recovery_key = cryptonote::decrypt_key(m_recovery_key, seed_pass);
}
}
+ epee::wipeable_string password;
if (!m_generate_from_view_key.empty())
{
m_wallet_file = m_generate_from_view_key;
@@ -2858,8 +2859,9 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm)
return false;
}
- bool r = new_wallet(vm, info.address, boost::none, viewkey);
+ auto r = new_wallet(vm, info.address, boost::none, viewkey);
CHECK_AND_ASSERT_MES(r, false, tr("account creation failed"));
+ password = *r;
}
else if (!m_generate_from_spend_key.empty())
{
@@ -2877,8 +2879,9 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm)
fail_msg_writer() << tr("failed to parse spend key secret key");
return false;
}
- bool r = new_wallet(vm, m_recovery_key, true, false, "");
+ auto r = new_wallet(vm, m_recovery_key, true, false, "");
CHECK_AND_ASSERT_MES(r, false, tr("account creation failed"));
+ password = *r;
}
else if (!m_generate_from_keys.empty())
{
@@ -2955,8 +2958,9 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm)
fail_msg_writer() << tr("view key does not match standard address");
return false;
}
- bool r = new_wallet(vm, info.address, spendkey, viewkey);
+ auto r = new_wallet(vm, info.address, spendkey, viewkey);
CHECK_AND_ASSERT_MES(r, false, tr("account creation failed"));
+ password = *r;
}
// Asks user for all the data required to merge secret keys from multisig wallets into one master wallet, which then gets full control of the multisig wallet. The resulting wallet will be the same as any other regular wallet.
@@ -3089,8 +3093,9 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm)
}
// create wallet
- bool r = new_wallet(vm, info.address, spendkey, viewkey);
+ auto r = new_wallet(vm, info.address, spendkey, viewkey);
CHECK_AND_ASSERT_MES(r, false, tr("account creation failed"));
+ password = *r;
}
else if (!m_generate_from_json.empty())
@@ -3112,8 +3117,9 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm)
{
m_wallet_file = m_generate_from_device;
// create wallet
- bool r = new_wallet(vm, "Ledger");
+ auto r = new_wallet(vm, "Ledger");
CHECK_AND_ASSERT_MES(r, false, tr("account creation failed"));
+ password = *r;
// if no block_height is specified, assume its a new account and start it "now"
if(m_wallet->get_refresh_from_block_height() == 0) {
{
@@ -3138,12 +3144,13 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm)
return false;
}
m_wallet_file = m_generate_new;
- bool r;
+ boost::optional<epee::wipeable_string> r;
if (m_restore_multisig_wallet)
r = new_wallet(vm, multisig_keys, old_language);
else
r = new_wallet(vm, m_recovery_key, m_restore_deterministic_wallet, m_non_deterministic, old_language);
CHECK_AND_ASSERT_MES(r, false, tr("account creation failed"));
+ password = *r;
}
if (m_restoring && m_generate_from_json.empty() && m_generate_from_device.empty())
@@ -3225,6 +3232,7 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm)
}
m_wallet->set_refresh_from_block_height(m_restore_height);
}
+ m_wallet->rewrite(m_wallet_file, password);
}
else
{
@@ -3392,15 +3400,16 @@ boost::optional<tools::password_container> simple_wallet::get_and_verify_passwor
return pwd_container;
}
//----------------------------------------------------------------------------------------------------
-bool simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
+boost::optional<epee::wipeable_string> simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
const crypto::secret_key& recovery_key, bool recover, bool two_random, const std::string &old_language)
{
auto rc = tools::wallet2::make_new(vm, password_prompter);
m_wallet = std::move(rc.first);
if (!m_wallet)
{
- return false;
+ return {};
}
+ epee::wipeable_string password = rc.second.password();
if (!m_subaddress_lookahead.empty())
{
@@ -3436,7 +3445,7 @@ bool simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
}
mnemonic_language = get_mnemonic_language();
if (mnemonic_language.empty())
- return false;
+ return {};
}
m_wallet->set_seed_language(mnemonic_language);
@@ -3454,7 +3463,7 @@ bool simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
catch (const std::exception& e)
{
fail_msg_writer() << tr("failed to generate new wallet: ") << e.what();
- return false;
+ return {};
}
// convert rng value to electrum-style word list
@@ -3479,10 +3488,10 @@ bool simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
}
success_msg_writer() << "**********************************************************************";
- return true;
+ return std::move(password);
}
//----------------------------------------------------------------------------------------------------
-bool simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
+boost::optional<epee::wipeable_string> simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
const cryptonote::account_public_address& address, const boost::optional<crypto::secret_key>& spendkey,
const crypto::secret_key& viewkey)
{
@@ -3490,8 +3499,9 @@ bool simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
m_wallet = std::move(rc.first);
if (!m_wallet)
{
- return false;
+ return {};
}
+ epee::wipeable_string password = rc.second.password();
if (!m_subaddress_lookahead.empty())
{
@@ -3521,22 +3531,23 @@ bool simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
catch (const std::exception& e)
{
fail_msg_writer() << tr("failed to generate new wallet: ") << e.what();
- return false;
+ return {};
}
- return true;
+ return std::move(password);
}
//----------------------------------------------------------------------------------------------------
-bool simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
+boost::optional<epee::wipeable_string> simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
const std::string &device_name) {
auto rc = tools::wallet2::make_new(vm, password_prompter);
m_wallet = std::move(rc.first);
if (!m_wallet)
{
- return false;
+ return {};
}
+ epee::wipeable_string password = rc.second.password();
if (!m_subaddress_lookahead.empty())
{
@@ -3557,21 +3568,22 @@ bool simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
catch (const std::exception& e)
{
fail_msg_writer() << tr("failed to generate new wallet: ") << e.what();
- return false;
+ return {};
}
- return true;
+ return std::move(password);
}
//----------------------------------------------------------------------------------------------------
-bool simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
+boost::optional<epee::wipeable_string> simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
const std::string &multisig_keys, const std::string &old_language)
{
auto rc = tools::wallet2::make_new(vm, password_prompter);
m_wallet = std::move(rc.first);
if (!m_wallet)
{
- return false;
+ return {};
}
+ epee::wipeable_string password = rc.second.password();
if (!m_subaddress_lookahead.empty())
{
@@ -3601,7 +3613,7 @@ bool simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
if (!m_wallet->multisig(&ready, &threshold, &total) || !ready)
{
fail_msg_writer() << tr("failed to generate new mutlisig wallet");
- return false;
+ return {};
}
message_writer(console_color_white, true) << boost::format(tr("Generated new %u/%u multisig wallet: ")) % threshold % total
<< m_wallet->get_account().get_public_address_str(m_wallet->nettype());
@@ -3609,10 +3621,10 @@ bool simple_wallet::new_wallet(const boost::program_options::variables_map& vm,
catch (const std::exception& e)
{
fail_msg_writer() << tr("failed to generate new wallet: ") << e.what();
- return false;
+ return {};
}
- return true;
+ return std::move(password);
}
//----------------------------------------------------------------------------------------------------
bool simple_wallet::open_wallet(const boost::program_options::variables_map& vm)