diff options
| author | Jonas Schnelli <[email protected]> | 2017-07-17 12:10:23 +0200 |
|---|---|---|
| committer | Jonas Schnelli <[email protected]> | 2017-07-17 17:42:21 +0200 |
| commit | 76603b132513266065235d686b82aaa6a2968303 (patch) | |
| tree | f56050703797963d1b43a586009eea087503273d /src/wallet/rpcwallet.cpp | |
| parent | Fix test_bitcoin circular dependency issue (diff) | |
| download | discoin-76603b132513266065235d686b82aaa6a2968303.tar.xz discoin-76603b132513266065235d686b82aaa6a2968303.zip | |
Select wallet based on the given endpoint
Diffstat (limited to 'src/wallet/rpcwallet.cpp')
| -rw-r--r-- | src/wallet/rpcwallet.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index ee8c7548f..ef96742a3 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -9,6 +9,7 @@ #include "consensus/validation.h" #include "core_io.h" #include "init.h" +#include "httpserver.h" #include "validation.h" #include "net.h" #include "policy/feerate.h" @@ -30,10 +31,21 @@ #include <univalue.h> +static const std::string WALLET_ENDPOINT_BASE = "/wallet/"; + CWallet *GetWalletForJSONRPCRequest(const JSONRPCRequest& request) { - // TODO: Some way to access secondary wallets - return vpwallets.empty() ? nullptr : vpwallets[0]; + if (request.URI.substr(0, WALLET_ENDPOINT_BASE.size()) == WALLET_ENDPOINT_BASE) { + // wallet endpoint was used + std::string requestedWallet = urlDecode(request.URI.substr(WALLET_ENDPOINT_BASE.size())); + for (CWalletRef pwallet : ::vpwallets) { + if (pwallet->GetName() == requestedWallet) { + return pwallet; + } + } + throw JSONRPCError(RPC_INVALID_PARAMETER, "Requested wallet does not exist or is not loaded"); + } + return ::vpwallets.size() == 1 || (request.fHelp && ::vpwallets.size() > 0) ? ::vpwallets[0] : nullptr; } std::string HelpRequiringPassphrase(CWallet * const pwallet) |