deposit_authorized gives error if source not in ledger (#2640)

This commit is contained in:
Scott Schurr
2018-07-30 17:52:51 -07:00
parent 8a02903fa5
commit d3258c7f1f
4 changed files with 23 additions and 4 deletions

View File

@@ -93,6 +93,7 @@ enum error_code_i
rpcCOMMAND_MISSING,
rpcDST_ACT_MALFORMED,
rpcDST_ACT_MISSING,
rpcDST_ACT_NOT_FOUND,
rpcDST_AMT_MALFORMED,
rpcDST_AMT_MISSING,
rpcDST_ISR_MALFORMED,

View File

@@ -67,7 +67,8 @@ public:
add (rpcCHANNEL_AMT_MALFORMED, "channelAmtMalformed","Payment channel amount is malformed.");
add (rpcCOMMAND_MISSING, "commandMissing", "Missing command entry.");
add (rpcDST_ACT_MALFORMED, "dstActMalformed", "Destination account is malformed.");
add (rpcDST_ACT_MISSING, "dstActMissing", "Destination account does not exist.");
add (rpcDST_ACT_MISSING, "dstActMissing", "Destination account not provided.");
add (rpcDST_ACT_NOT_FOUND, "dstActNotFound", "Destination account not found.");
add (rpcDST_AMT_MALFORMED, "dstAmtMalformed", "Destination amount/currency/issuer is malformed.");
add (rpcDST_ISR_MALFORMED, "dstIsrMalformed", "Destination issuer is malformed.");
add (rpcFORBIDDEN, "forbidden", "Bad credentials.");

View File

@@ -77,11 +77,18 @@ Json::Value doDepositAuthorized (RPC::Context& context)
if (!ledger)
return result;
// If source account is not in the ledger it can't be authorized.
if (! ledger->exists (keylet::account(srcAcct)))
{
RPC::inject_error (rpcSRC_ACT_NOT_FOUND, result);
return result;
}
// If destination account is not in the ledger you can't deposit to it, eh?
auto const sleDest = ledger->read (keylet::account(dstAcct));
if (! sleDest)
{
RPC::inject_error (rpcDST_ACT_MISSING, result);
RPC::inject_error (rpcDST_ACT_NOT_FOUND, result);
return result;
}

View File

@@ -197,13 +197,23 @@ public:
"json", "deposit_authorized", args.toStyledString())};
verifyErr (result, "lgrNotFound", "ledgerNotFound");
}
{
// alice is not yet funded.
Json::Value args {depositAuthArgs (alice, becky)};
Json::Value const result {env.rpc (
"json", "deposit_authorized", args.toStyledString())};
verifyErr (result, "srcActNotFound",
"Source account not found.");
}
env.fund(XRP(1000), alice);
env.close();
{
// becky is not yet funded.
Json::Value args {depositAuthArgs (alice, becky)};
Json::Value const result {env.rpc (
"json", "deposit_authorized", args.toStyledString())};
verifyErr (result, "dstActMissing",
"Destination account does not exist.");
verifyErr (result, "dstActNotFound",
"Destination account not found.");
}
env.fund(XRP(1000), becky);
env.close();