mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 12:23:34 -05:00

73f0a6cbd0
doc: detail -rpccookieperms option (willcl-ark)d2afa2690c
test: add rpccookieperms test (willcl-ark)f467aede78
init: add option for rpccookie permissions (willcl-ark)7df03f1a92
util: add perm string helper functions (willcl-ark) Pull request description: This PR picks up #26088 by aureleoules which adds a bitcoind launch option `-rpccookieperms` to set the file permissions of the cookie generated by bitcoin core. Example usage to make the generated cookie group-readable: `./src/bitcoind -rpccookieperms=group`. Accepted values for `-rpccookieperms` are `[owner|group|all]`. We let `fs::perms` handle platform-specific permissions changes. ACKs for top commit: achow101: ACK73f0a6cbd0
ryanofsky: Code review ACK73f0a6cbd0
. Main change since last review is no longer throwing a skip exception in the rpc test on windows, so other checks can run after it, and overall test result is passing, not skipped. Also were clarifying renames and documentation improvements. tdb3: cr ACK73f0a6cbd0
Tree-SHA512: e800d59a44aca10e1c58ca69bf3fdde9f6ccf5eab4b7b962645af6d6bc0cfa3a357701e409c8c60d8d7744fcd33a91e77ada11790aa88cd7811ef60fab86ab11
52 lines
1.7 KiB
C++
52 lines
1.7 KiB
C++
// Copyright (c) 2010 Satoshi Nakamoto
|
|
// Copyright (c) 2009-2021 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_RPC_REQUEST_H
|
|
#define BITCOIN_RPC_REQUEST_H
|
|
|
|
#include <any>
|
|
#include <optional>
|
|
#include <string>
|
|
|
|
#include <univalue.h>
|
|
#include <util/fs.h>
|
|
|
|
enum class JSONRPCVersion {
|
|
V1_LEGACY,
|
|
V2
|
|
};
|
|
|
|
/** JSON-RPC 2.0 request, only used in bitcoin-cli **/
|
|
UniValue JSONRPCRequestObj(const std::string& strMethod, const UniValue& params, const UniValue& id);
|
|
UniValue JSONRPCReplyObj(UniValue result, UniValue error, std::optional<UniValue> id, JSONRPCVersion jsonrpc_version);
|
|
UniValue JSONRPCError(int code, const std::string& message);
|
|
|
|
/** Generate a new RPC authentication cookie and write it to disk */
|
|
bool GenerateAuthCookie(std::string* cookie_out, std::optional<fs::perms> cookie_perms=std::nullopt);
|
|
/** Read the RPC authentication cookie from disk */
|
|
bool GetAuthCookie(std::string *cookie_out);
|
|
/** Delete RPC authentication cookie from disk */
|
|
void DeleteAuthCookie();
|
|
/** Parse JSON-RPC batch reply into a vector */
|
|
std::vector<UniValue> JSONRPCProcessBatchReply(const UniValue& in);
|
|
|
|
class JSONRPCRequest
|
|
{
|
|
public:
|
|
std::optional<UniValue> id = UniValue::VNULL;
|
|
std::string strMethod;
|
|
UniValue params;
|
|
enum Mode { EXECUTE, GET_HELP, GET_ARGS } mode = EXECUTE;
|
|
std::string URI;
|
|
std::string authUser;
|
|
std::string peerAddr;
|
|
std::any context;
|
|
JSONRPCVersion m_json_version = JSONRPCVersion::V1_LEGACY;
|
|
|
|
void parse(const UniValue& valRequest);
|
|
[[nodiscard]] bool IsNotification() const { return !id.has_value() && m_json_version == JSONRPCVersion::V2; };
|
|
};
|
|
|
|
#endif // BITCOIN_RPC_REQUEST_H
|