void promptSaveKeys(CryptoNote::WalletGreen &wallet) { std::cout << "Welcome to your new wallet, here is your payment address:" << std::endl << InformationMsg(wallet.getAddress(0)) << std::endl << std::endl << "Please copy your secret keys and mnemonic seed and store " << "them in a secure location: " << std::endl; printPrivateKeys(wallet, false); std::cout << std::endl; }
std::shared_ptr<WalletInfo> openWallet(CryptoNote::WalletGreen &wallet, Config &config) { const std::string walletFileName = getExistingWalletFileName(config); bool initial = true; while (true) { std::string walletPass; /* Only use the command line pass once, otherwise we will infinite loop if it is incorrect */ if (initial && config.passGiven) { walletPass = config.walletPass; } else { walletPass = getWalletPassword(false, "Enter password: "******"Your view only wallet ") << InformationMsg(walletAddress) << InformationMsg(" has been successfully opened!") << std::endl << std::endl; viewWalletMsg(); viewWallet = true; } else { std::cout << std::endl << InformationMsg("Your wallet ") << InformationMsg(walletAddress) << InformationMsg(" has been successfully opened!") << std::endl << std::endl; } return std::make_shared<WalletInfo>( walletFileName, walletPass, walletAddress, viewWallet, wallet ); } catch (const std::system_error& e) { bool handled = false; switch (e.code().value()) { case CryptoNote::error::WRONG_PASSWORD: { std::cout << std::endl << WarningMsg("Incorrect password! Try again.") << std::endl << std::endl; handled = true; break; } case CryptoNote::error::WRONG_VERSION: { std::stringstream msg; msg << "Could not open wallet file! It doesn't appear " << "to be a valid wallet!" << std::endl << "Ensure you are opening a wallet file, and the " << "file has not gotten corrupted." << std::endl << "Try reimporting via keys, and always close " << WalletConfig::walletName << " with the exit " << "command to prevent corruption." << std::endl; std::cout << WarningMsg(msg.str()) << std::endl; return nullptr; } } if (handled) { continue; } const std::string alreadyOpenMsg = "MemoryMappedFile::open: The process cannot access the file " "because it is being used by another process."; const std::string errorMsg = e.what(); /* The message actually has a \r\n on the end but i'd prefer to keep just the raw string in the source so check the it starts with instead */ if (boost::starts_with(errorMsg, alreadyOpenMsg)) { std::cout << WarningMsg("Could not open wallet! It is already " "open in another process.") << std::endl << WarningMsg("Check with a task manager that you " "don't have ") << WalletConfig::walletName << WarningMsg(" open twice.") << std::endl << WarningMsg("Also check you don't have another " "wallet program open, such as a GUI " "wallet or ") << WarningMsg(WalletConfig::walletdName) << WarningMsg(".") << std::endl << std::endl; return nullptr; } else { std::cout << "Unexpected error: " << errorMsg << std::endl; std::cout << "Please report this error message and what " << "you did to cause it." << std::endl << std::endl; return nullptr; } } } }