wallet: rejig to avoid prompting in wallet2

wallet2 is a library, and should not prompt for stdin. Instead,
pass a function so simplewallet can prompt on stdin, and a GUI
might display a window, etc.
This commit is contained in:
moneromooo-monero 2017-10-28 19:13:42 +01:00
parent ec5135e5b7
commit e89994e98f
No known key found for this signature in database
GPG key ID: 686F07454D6CEFC3
8 changed files with 97 additions and 78 deletions

View file

@ -238,9 +238,6 @@ namespace tools
boost::optional<password_container> password_container::prompt(const bool verify, const char *message)
{
#ifdef HAVE_READLINE
rdln::suspend_readline pause_readline;
#endif
password_container pass1{};
password_container pass2{};
if (is_cin_tty() ? read_from_tty(verify, message, pass1.m_password, pass2.m_password) : read_from_file(pass1.m_password))
@ -249,7 +246,7 @@ namespace tools
return boost::none;
}
boost::optional<login> login::parse(std::string&& userpass, bool verify, const char* message)
boost::optional<login> login::parse(std::string&& userpass, bool verify, const std::function<boost::optional<password_container>(bool)> &prompt)
{
login out{};
password_container wipe{std::move(userpass)};
@ -257,7 +254,7 @@ namespace tools
const auto loc = wipe.password().find(':');
if (loc == std::string::npos)
{
auto result = tools::password_container::prompt(verify, message);
auto result = prompt(verify);
if (!result)
return boost::none;

View file

@ -82,7 +82,7 @@ namespace tools
\return The username and password, or boost::none if
`password_container::prompt` fails.
*/
static boost::optional<login> parse(std::string&& userpass, bool verify, const char* message = "Password");
static boost::optional<login> parse(std::string&& userpass, bool verify, const std::function<boost::optional<password_container>(bool)> &prompt);
login(const login&) = delete;
login(login&&) = default;