mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Move RPCServerHandler to ripple_app/rpc
This commit is contained in:
98
modules/ripple_app/rpc/RPCServerHandler.cpp
Normal file
98
modules/ripple_app/rpc/RPCServerHandler.cpp
Normal file
@@ -0,0 +1,98 @@
|
||||
//------------------------------------------------------------------------------
|
||||
/*
|
||||
Copyright (c) 2011-2013, OpenCoin, Inc.
|
||||
*/
|
||||
//==============================================================================
|
||||
|
||||
RPCServerHandler::RPCServerHandler (NetworkOPs& networkOPs)
|
||||
: m_networkOPs (networkOPs)
|
||||
{
|
||||
}
|
||||
|
||||
std::string RPCServerHandler::createResponse (
|
||||
int statusCode,
|
||||
std::string const& description)
|
||||
{
|
||||
return HTTPReply (statusCode, description);
|
||||
}
|
||||
|
||||
bool RPCServerHandler::isAuthorized (
|
||||
std::map <std::string, std::string> const& headers)
|
||||
{
|
||||
return HTTPAuthorized (headers);
|
||||
}
|
||||
|
||||
std::string RPCServerHandler::processRequest (std::string const& request, std::string const& remoteAddress)
|
||||
{
|
||||
Json::Value jvRequest;
|
||||
{
|
||||
Json::Reader reader;
|
||||
|
||||
if (! reader.parse (request, jvRequest) ||
|
||||
jvRequest.isNull () ||
|
||||
! jvRequest.isObject ())
|
||||
{
|
||||
return createResponse (400, "Unable to parse request");
|
||||
}
|
||||
}
|
||||
|
||||
Config::Role const role (getConfig ().getAdminRole (jvRequest, remoteAddress));
|
||||
|
||||
// Parse id now so errors from here on will have the id
|
||||
//
|
||||
// VFALCO NOTE Except that "id" isn't included in the following errors...
|
||||
//
|
||||
Json::Value const id = jvRequest ["id"];
|
||||
|
||||
Json::Value const method = jvRequest ["method"];
|
||||
|
||||
if (method.isNull ())
|
||||
{
|
||||
return createResponse (400, "Null method");
|
||||
}
|
||||
else if (! method.isString ())
|
||||
{
|
||||
return createResponse (400, "method is not string");
|
||||
}
|
||||
|
||||
std::string strMethod = method.asString ();
|
||||
|
||||
// Parse params
|
||||
Json::Value params = jvRequest ["params"];
|
||||
|
||||
if (params.isNull ())
|
||||
{
|
||||
params = Json::Value (Json::arrayValue);
|
||||
}
|
||||
else if (!params.isArray ())
|
||||
{
|
||||
return HTTPReply (400, "params unparseable");
|
||||
}
|
||||
|
||||
// VFALCO TODO Shouldn't we handle this earlier?
|
||||
//
|
||||
if (role == Config::FORBID)
|
||||
{
|
||||
// VFALCO TODO Needs implementing
|
||||
// FIXME Needs implementing
|
||||
// XXX This needs rate limiting to prevent brute forcing password.
|
||||
return HTTPReply (403, "Forbidden");
|
||||
}
|
||||
|
||||
std::string response;
|
||||
|
||||
WriteLog (lsINFO, RPCServer) << params;
|
||||
|
||||
RPCHandler rpcHandler (&m_networkOPs);
|
||||
|
||||
LoadType loadType = LT_RPCReference;
|
||||
|
||||
Json::Value const result = rpcHandler.doRpcCommand (strMethod, params, role, &loadType);
|
||||
// VFALCO NOTE We discard loadType since there is no endpoint to punish
|
||||
|
||||
WriteLog (lsINFO, RPCServer) << result;
|
||||
|
||||
response = JSONRPCReply (result, Json::Value (), id);
|
||||
|
||||
return createResponse (200, response);
|
||||
}
|
||||
Reference in New Issue
Block a user