mirror of
https://github.com/monero-project/monero.git
synced 2025-08-08 20:32:19 -04:00
wallet_rpc_server: support regex for get_accounts tag
This commit adds a 'regexp' boolean field to the get_accounts request. The flag is set to false by default and maintains backwards compatibility. When set to true the user can search tags by regular expression filters. An additional error message was added for failed regular expression searches. Bump minor version to 25.
This commit is contained in:
parent
d562deaaa9
commit
d1f1947995
2 changed files with 13 additions and 3 deletions
|
@ -622,7 +622,7 @@ namespace tools
|
|||
res.total_unlocked_balance = 0;
|
||||
cryptonote::subaddress_index subaddr_index = {0,0};
|
||||
const std::pair<std::map<std::string, std::string>, std::vector<std::string>> account_tags = m_wallet->get_account_tags();
|
||||
if (!req.tag.empty() && account_tags.first.count(req.tag) == 0)
|
||||
if (!req.tag.empty() && account_tags.first.count(req.tag) == 0 && !req.regexp)
|
||||
{
|
||||
er.code = WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR;
|
||||
er.message = (boost::format(tr("Tag %s is unregistered.")) % req.tag).str();
|
||||
|
@ -630,7 +630,9 @@ namespace tools
|
|||
}
|
||||
for (; subaddr_index.major < m_wallet->get_num_subaddress_accounts(); ++subaddr_index.major)
|
||||
{
|
||||
if (!req.tag.empty() && req.tag != account_tags.second[subaddr_index.major])
|
||||
bool no_match = !req.regexp ? (!req.tag.empty() && req.tag != account_tags.second[subaddr_index.major])
|
||||
: (!req.tag.empty() && !boost::regex_match(account_tags.second[subaddr_index.major], boost::regex(req.tag)));
|
||||
if (no_match)
|
||||
continue;
|
||||
wallet_rpc::COMMAND_RPC_GET_ACCOUNTS::subaddress_account_info info;
|
||||
info.account_index = subaddr_index.major;
|
||||
|
@ -643,6 +645,12 @@ namespace tools
|
|||
res.total_balance += info.balance;
|
||||
res.total_unlocked_balance += info.unlocked_balance;
|
||||
}
|
||||
if (res.subaddress_accounts.size() == 0 && req.regexp)
|
||||
{
|
||||
er.code = WALLET_RPC_ERROR_CODE_UNKNOWN_ERROR;
|
||||
er.message = (boost::format(tr("No matches for regex filter %s .")) % req.tag).str();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue