Skip to content

Commit

Permalink
update to use same formatting as admin RPC
Browse files Browse the repository at this point in the history
  • Loading branch information
mvadari committed Oct 23, 2023
1 parent 02f14b0 commit d801f1a
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 38 deletions.
4 changes: 2 additions & 2 deletions src/ripple/app/misc/AmendmentTable.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,11 @@ class AmendmentTable
firstUnsupportedExpected() const = 0;

virtual Json::Value
getJson() const = 0;
getJson(bool isAdmin) const = 0;

/** Returns a Json::objectValue. */
virtual Json::Value
getJson(uint256 const& amendment) const = 0;
getJson(uint256 const& amendment, bool isAdmin) const = 0;

/** Called when a new fully-validated ledger is accepted. */
void
Expand Down
17 changes: 10 additions & 7 deletions src/ripple/app/misc/impl/AmendmentTable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,7 @@ class AmendmentTableImpl final : public AmendmentTable
Json::Value& v,
uint256 const& amendment,
AmendmentState const& state,
bool isAdmin,
std::lock_guard<std::mutex> const& lock) const;

void
Expand Down Expand Up @@ -428,9 +429,9 @@ class AmendmentTableImpl final : public AmendmentTable
firstUnsupportedExpected() const override;

Json::Value
getJson() const override;
getJson(bool isAdmin) const override;
Json::Value
getJson(uint256 const&) const override;
getJson(uint256 const&, bool isAdmin) const override;

bool
needValidatedLedger(LedgerIndex seq) const override;
Expand Down Expand Up @@ -906,13 +907,14 @@ AmendmentTableImpl::injectJson(
Json::Value& v,
const uint256& id,
const AmendmentState& fs,
bool isAdmin,
std::lock_guard<std::mutex> const&) const
{
if (!fs.name.empty())
v[jss::name] = fs.name;

v[jss::supported] = fs.supported;
if (!fs.enabled)
if (!fs.enabled && isAdmin)
{
if (fs.vote == AmendmentVote::obsolete)
v[jss::vetoed] = "Obsolete";
Expand All @@ -921,7 +923,7 @@ AmendmentTableImpl::injectJson(
}
v[jss::enabled] = fs.enabled;

if (!fs.enabled && lastVote_)
if (!fs.enabled && lastVote_ && isAdmin)
{
auto const votesTotal = lastVote_->trustedValidations();
auto const votesNeeded = lastVote_->threshold();
Expand All @@ -936,7 +938,7 @@ AmendmentTableImpl::injectJson(
}

Json::Value
AmendmentTableImpl::getJson() const
AmendmentTableImpl::getJson(bool isAdmin) const
{
Json::Value ret(Json::objectValue);
{
Expand All @@ -947,14 +949,15 @@ AmendmentTableImpl::getJson() const
ret[to_string(e.first)] = Json::objectValue,
e.first,
e.second,
isAdmin,
lock);
}
}
return ret;
}

Json::Value
AmendmentTableImpl::getJson(uint256 const& amendmentID) const
AmendmentTableImpl::getJson(uint256 const& amendmentID, bool isAdmin) const
{
Json::Value ret = Json::objectValue;
Json::Value& jAmendment = (ret[to_string(amendmentID)] = Json::objectValue);
Expand All @@ -963,7 +966,7 @@ AmendmentTableImpl::getJson(uint256 const& amendmentID) const
std::lock_guard lock(mutex_);
AmendmentState const* a = get(amendmentID, lock);
if (a)
injectJson(jAmendment, amendmentID, *a, lock);
injectJson(jAmendment, amendmentID, *a, isAdmin, lock);
}

return ret;
Expand Down
44 changes: 17 additions & 27 deletions src/ripple/rpc/handlers/Feature1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,28 +38,7 @@ doFeature(RPC::JsonContext& context)
if (context.app.config().reporting())
return rpcError(rpcREPORTING_UNSUPPORTED);

if (context.role != Role::ADMIN)
{
if (!context.params.isMember(jss::feature))
{
return RPC::missing_field_error(jss::feature);
}
std::string const& featureStr = context.params[jss::feature].asString();
uint256 feature;
if (!feature.parseHex(featureStr))
{
return rpcError(rpcBAD_FEATURE);
}
std::string const& featureName = featureToName(feature);
if (featureName == featureStr)
{
return rpcError(rpcBAD_FEATURE);
}
Json::Value jvReply = Json::objectValue;
jvReply[jss::feature] = featureName;
return jvReply;
}

bool const isAdmin = context.role == Role::ADMIN;
// Get majority amendment status
majorityAmendments_t majorities;

Expand All @@ -70,12 +49,15 @@ doFeature(RPC::JsonContext& context)

if (!context.params.isMember(jss::feature))
{
auto features = table.getJson();
auto features = table.getJson(isAdmin);

for (auto const& [h, t] : majorities)
if (isAdmin)
{
features[to_string(h)][jss::majority] =
t.time_since_epoch().count();
for (auto const& [h, t] : majorities)
{
features[to_string(h)][jss::majority] =
t.time_since_epoch().count();
}
}

Json::Value jvReply = Json::objectValue;
Expand All @@ -90,6 +72,10 @@ doFeature(RPC::JsonContext& context)
if (!feature && !feature.parseHex(context.params[jss::feature].asString()))
return rpcError(rpcBAD_FEATURE);

if (!isAdmin && context.params.isMember(jss::vetoed))
{
return rpcFORBIDDEN;
}
if (context.params.isMember(jss::vetoed))
{
if (context.params[jss::vetoed].asBool())
Expand All @@ -98,7 +84,11 @@ doFeature(RPC::JsonContext& context)
table.unVeto(feature);
}

Json::Value jvReply = table.getJson(feature);
Json::Value jvReply = table.getJson(feature, isAdmin);
if (!isAdmin)
{
return jvReply;
}

auto m = majorities.find(feature);
if (m != majorities.end())
Expand Down
4 changes: 2 additions & 2 deletions src/test/app/AmendmentTable_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -288,15 +288,15 @@ class AmendmentTable_test final : public beast::unit_test::suite
uint256 const unsupportedID = amendmentId(unsupported_[0]);
{
Json::Value const unsupp =
table->getJson(unsupportedID)[to_string(unsupportedID)];
table->getJson(unsupportedID, true)[to_string(unsupportedID)];
BEAST_EXPECT(unsupp.size() == 0);
}

// After vetoing unsupportedID verify that it is in table.
table->veto(unsupportedID);
{
Json::Value const unsupp =
table->getJson(unsupportedID)[to_string(unsupportedID)];
table->getJson(unsupportedID, true)[to_string(unsupportedID)];
BEAST_EXPECT(unsupp[jss::vetoed].asBool());
}
}
Expand Down

0 comments on commit d801f1a

Please sign in to comment.