diff options
author | Ilya Kitaev <mbg033@gmail.com> | 2016-03-11 17:05:36 +0300 |
---|---|---|
committer | Ilya Kitaev <mbg033@gmail.com> | 2016-03-16 14:29:06 +0300 |
commit | 5a4f099540750c5bf9c610b4550bc4e8cf25f176 (patch) | |
tree | 9e8f586eaa91849adbeccb27c37d8283490a4fde | |
parent | changes in wallet2_api + implemented WalletManager::openWallet (diff) | |
download | monero-5a4f099540750c5bf9c610b4550bc4e8cf25f176.tar.xz |
Wallet::setPassword() method for wallet2_api
-rw-r--r-- | src/wallet/wallet2.cpp | 10 | ||||
-rw-r--r-- | src/wallet/wallet2.h | 3 | ||||
-rw-r--r-- | src/wallet/wallet2_api.cpp | 23 | ||||
-rw-r--r-- | src/wallet/wallet2_api.h | 31 | ||||
-rw-r--r-- | tests/libwallet_api_tests/main.cpp | 26 |
5 files changed, 80 insertions, 13 deletions
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 389286ceb..c4f60306b 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -2695,6 +2695,16 @@ bool wallet2::get_tx_key(const crypto::hash &txid, crypto::secret_key &tx_key) c return true; } +std::string wallet2::get_wallet_file() const +{ + return m_wallet_file; +} + +std::string wallet2::get_keys_file() const +{ + return m_keys_file; +} + //---------------------------------------------------------------------------------------------------- void wallet2::generate_genesis(cryptonote::block& b) { if (m_testnet) diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index 6c689d4ba..2835815b7 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -348,8 +348,11 @@ namespace tools bool get_tx_key(const crypto::hash &txid, crypto::secret_key &tx_key) const; + bool use_fork_rules(uint8_t version); + std::string get_wallet_file() const; + std::string get_keys_file() const; private: /*! * \brief Stores wallet information to wallet file. diff --git a/src/wallet/wallet2_api.cpp b/src/wallet/wallet2_api.cpp index 3a80b4221..2dfc7b292 100644 --- a/src/wallet/wallet2_api.cpp +++ b/src/wallet/wallet2_api.cpp @@ -65,6 +65,7 @@ public: void setListener(Listener *) {} int status() const; std::string errorString() const; + bool setPassword(const std::string &password); private: void clearStatus(); @@ -110,9 +111,6 @@ bool WalletImpl::create(const std::string &path, const std::string &password, co return false; } // TODO: validate language - // TODO: create wallet - // m_wallet.reset(new tools::wallet2()); - m_wallet->set_seed_language(language); crypto::secret_key recovery_val, secret_key; try { @@ -134,7 +132,7 @@ bool WalletImpl::open(const std::string &path, const std::string &password) // TODO: handle "deprecated" m_wallet->load(path, password); result = true; - } catch (const tools::error::file_not_found &e) { + } catch (const std::exception &e) { LOG_ERROR("Error opening wallet: " << e.what()); m_status = Status_Error; m_errorString = e.what(); @@ -185,6 +183,20 @@ std::string WalletImpl::errorString() const return m_errorString; } +bool WalletImpl::setPassword(const std::string &password) +{ + bool result = false; + try { + m_wallet->rewrite(m_wallet->get_wallet_file(), password); + result = true; + } catch (const std::exception &e) { + result = false; + m_status = Status_Error; + m_errorString = e.what(); + } + return result; +} + void WalletImpl::clearStatus() { m_status = Status_Ok; @@ -228,9 +240,10 @@ Wallet *WalletManagerImpl::openWallet(const std::string &path, const std::string return wallet; } -Wallet * WalletManagerImpl::recoveryWallet(const std::string &path, const std::string &memo, const std::string &language) +Wallet *WalletManagerImpl::recoveryWallet(const std::string &path, const std::string &memo, const std::string &language) { return nullptr; + } bool WalletManagerImpl::closeWallet(Wallet *wallet) diff --git a/src/wallet/wallet2_api.h b/src/wallet/wallet2_api.h index b89c74e28..c985581df 100644 --- a/src/wallet/wallet2_api.h +++ b/src/wallet/wallet2_api.h @@ -64,6 +64,7 @@ struct Wallet virtual int status() const = 0; //! in case error status, returns error string virtual std::string errorString() const = 0; + virtual bool setPassword(const std::string &password) = 0; }; /** @@ -71,15 +72,37 @@ struct Wallet */ struct WalletManager { - //! creates new wallet + + /*! + * \brief Creates new wallet + * \param path Name of wallet file + * \param password Password of wallet file + * \param language Language to be used to generate electrum seed memo + * \return Wallet instance (Wallet::status() needs to be called to check if created successfully) + */ virtual Wallet * createWallet(const std::string &path, const std::string &password, const std::string &language) = 0; - //! opens existing wallet + /*! + * \brief Opens existing wallet + * \param path Name of wallet file + * \param password Password of wallet file + * \return Wallet instance (Wallet::status() needs to be called to check if opened successfully) + */ virtual Wallet * openWallet(const std::string &path, const std::string &password) = 0; - //! recovers existing wallet using memo (electrum words) + /*! + * \brief recovers existing wallet using memo (electrum seed) + * \param path Name of wallet file to be created + * \param memo memo (25 words electrum seed) + * \return Wallet instance (Wallet::status() needs to be called to check if recovered successfully) + */ virtual Wallet * recoveryWallet(const std::string &path, const std::string &memo, const std::string &language) = 0; - //! closes wallet. in case operation succeded, wallet object deleted. in case operation failed, wallet object not deleted + + /*! + * \brief Closes wallet. In case operation succeded, wallet object deleted. in case operation failed, wallet object not deleted + * \param wallet previously opened / created wallet instance + * \return None + */ virtual bool closeWallet(Wallet *wallet) = 0; //! checks if wallet with the given name already exists diff --git a/tests/libwallet_api_tests/main.cpp b/tests/libwallet_api_tests/main.cpp index 9f8913c39..fe6cd556f 100644 --- a/tests/libwallet_api_tests/main.cpp +++ b/tests/libwallet_api_tests/main.cpp @@ -48,6 +48,7 @@ struct WalletManagerTest : public testing::Test const char * WALLET_NAME = "testwallet"; const char * WALLET_PASS = "password"; + const char * WALLET_PASS2 = "password22"; const char * WALLET_LANG = "English"; @@ -93,19 +94,36 @@ TEST_F(WalletManagerTest, WalletManagerCreatesWallet) TEST_F(WalletManagerTest, WalletManagerOpensWallet) { + Bitmonero::Wallet * wallet1 = wmgr->createWallet(WALLET_NAME, WALLET_PASS, WALLET_LANG); std::string seed1 = wallet1->seed(); ASSERT_TRUE(wmgr->closeWallet(wallet1)); Bitmonero::Wallet * wallet2 = wmgr->openWallet(WALLET_NAME, WALLET_PASS); ASSERT_TRUE(wallet2->status() == Bitmonero::Wallet::Status_Ok); ASSERT_TRUE(wallet2->seed() == seed1); - std::vector<std::string> words; - std::string seed = wallet2->seed(); - boost::split(words, seed, boost::is_any_of(" "), boost::token_compress_on); - ASSERT_TRUE(words.size() == 25); std::cout << "** seed: " << wallet2->seed() << std::endl; } + +TEST_F(WalletManagerTest, WalletManagerChangesPassword) +{ + + Bitmonero::Wallet * wallet1 = wmgr->createWallet(WALLET_NAME, WALLET_PASS, WALLET_LANG); + std::string seed1 = wallet1->seed(); + ASSERT_TRUE(wallet1->setPassword(WALLET_PASS2)); + ASSERT_TRUE(wmgr->closeWallet(wallet1)); + Bitmonero::Wallet * wallet2 = wmgr->openWallet(WALLET_NAME, WALLET_PASS2); + ASSERT_TRUE(wallet2->status() == Bitmonero::Wallet::Status_Ok); + ASSERT_TRUE(wallet2->seed() == seed1); + ASSERT_TRUE(wmgr->closeWallet(wallet2)); + Bitmonero::Wallet * wallet3 = wmgr->openWallet(WALLET_NAME, WALLET_PASS); + ASSERT_FALSE(wallet3->status() == Bitmonero::Wallet::Status_Ok); + +} + + + + int main(int argc, char** argv) { //epee::debug::get_set_enable_assert(true, false); |