diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index ba98a48d7..22c2129aa 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -245,7 +245,19 @@ Json::Value RPCParser::parseWalletPropose(const Json::Value& jvParams) { Json::Value jvRequest; - jvRequest["passphrase"] = jvParams[0u].asString(); + if (jvParams.size()) + jvRequest["passphrase"] = jvParams[0u].asString(); + + return jvRequest; +} + +// wallet_seed [||] +Json::Value RPCParser::parseWalletSeed(const Json::Value& jvParams) +{ + Json::Value jvRequest; + + if (jvParams.size()) + jvRequest["secret"] = jvParams[0u].asString(); return jvRequest; } @@ -312,7 +324,7 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams) { "wallet_accounts", &RPCParser::parseWalletAccounts, 1, 1 }, { "wallet_propose", &RPCParser::parseWalletPropose, 0, 1 }, -// { "wallet_seed", &RPCParser::doWalletSeed, 0, 1, false, false, optNone }, + { "wallet_seed", &RPCParser::parseWalletSeed, 0, 1 }, // // { "login", &RPCParser::doLogin, 2, 2, true, false, optNone }, diff --git a/src/cpp/ripple/CallRPC.h b/src/cpp/ripple/CallRPC.h index db3677ec5..37431d547 100644 --- a/src/cpp/ripple/CallRPC.h +++ b/src/cpp/ripple/CallRPC.h @@ -23,6 +23,7 @@ protected: Json::Value parseUnlDelete(const Json::Value& jvParams); Json::Value parseWalletAccounts(const Json::Value& jvParams); Json::Value parseWalletPropose(const Json::Value& jvParams); + Json::Value parseWalletSeed(const Json::Value& jvParams); public: Json::Value parseCommand(std::string strMethod, Json::Value jvParams); diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index ce1395b81..f9794c980 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1401,39 +1401,40 @@ Json::Value RPCHandler::doWalletPropose(Json::Value jvRequest) return obj; } -// wallet_seed [||] -Json::Value RPCHandler::doWalletSeed(Json::Value params) +// { +// secret: +// } +Json::Value RPCHandler::doWalletSeed(Json::Value jvRequest) { - RippleAddress naSeed; + RippleAddress raSeed; + bool bSecret = jvRequest.isMember("secret"); - if (params.size() - && !naSeed.setSeedGeneric(params[0u].asString())) + if (bSecret && !raSeed.setSeedGeneric(jvRequest["secret"].asString())) { return rpcError(rpcBAD_SEED); } else { - RippleAddress naAccount; + RippleAddress raAccount; - if (!params.size()) + if (!bSecret) { - naSeed.setSeedRandom(); + raSeed.setSeedRandom(); } - RippleAddress naGenerator = RippleAddress::createGeneratorPublic(naSeed); + RippleAddress raGenerator = RippleAddress::createGeneratorPublic(raSeed); - naAccount.setAccountPublic(naGenerator, 0); + raAccount.setAccountPublic(raGenerator, 0); Json::Value obj(Json::objectValue); - obj["seed"] = naSeed.humanSeed(); - obj["key"] = naSeed.humanSeed1751(); + obj["seed"] = raSeed.humanSeed(); + obj["key"] = raSeed.humanSeed1751(); return obj; } } - // TODO: for now this simply checks if this is the admin account // TODO: need to prevent them hammering this over and over // TODO: maybe a better way is only allow admin from local host @@ -2221,7 +2222,7 @@ Json::Value RPCHandler::doCommand(Json::Value& jvParams, int iRole) { "wallet_accounts", &RPCHandler::doWalletAccounts, -1, -1, false, false, optCurrent }, { "wallet_propose", &RPCHandler::doWalletPropose, -1, -1, false, false, optNone }, - { "wallet_seed", &RPCHandler::doWalletSeed, 0, 1, false, false, optNone }, + { "wallet_seed", &RPCHandler::doWalletSeed, -1, -1, false, false, optNone }, { "login", &RPCHandler::doLogin, 2, 2, true, false, optNone },