33 request.
pushKV(
"method", strMethod);
34 request.
pushKV(
"params", params);
42 if (!
error.isNull()) {
45 reply.
pushKV(
"result", result);
55 return reply.
write() +
"\n";
60 error.pushKV(
"code", code);
61 error.pushKV(
"message", message);
83 const size_t COOKIE_SIZE = 32;
84 uint8_t rand_pwd[COOKIE_SIZE];
94 file.open(filepath_tmp);
95 if (!file.is_open()) {
96 LogPrintf(
"Unable to open cookie authentication file %s for writing\n",
105 LogPrintf(
"Unable to rename cookie authentication file %s to %s\n",
109 LogPrintf(
"Generated RPC authentication cookie %s\n",
113 *cookie_out = cookie;
123 if (!file.is_open()) {
126 std::getline(file, cookie);
130 *cookie_out = cookie;
138 }
catch (
const fs::filesystem_error &e) {
139 LogPrintf(
"%s: Unable to remove random auth cookie file: %s\n",
146 throw std::runtime_error(
"Batch must be an array");
148 const size_t num{in.
size()};
149 std::vector<UniValue> batch(num);
151 if (!rec.isObject()) {
152 throw std::runtime_error(
"Batch member must be an object");
154 size_t id = rec[
"id"].getInt<
int>();
156 throw std::runtime_error(
157 "Batch member id is larger than batch size");
177 if (valMethod.isNull()) {
180 if (!valMethod.isStr()) {
194 if (valParams.isArray() || valParams.isObject()) {
196 }
else if (valParams.isNull()) {
200 "Params must be an array or object");
fs::path AbsPathForConfigVal(const ArgsManager &args, const fs::path &path, bool net_specific=true)
Most paths passed as configuration arguments are treated as relative to the datadir if they are not a...
fs::path GetPathArg(std::string arg, const fs::path &default_value={}) const
Return path argument or default value.
void parse(const UniValue &valRequest)
const UniValue & find_value(std::string_view key) const
std::string write(unsigned int prettyIndent=0, unsigned int indentLevel=0) const
const UniValue & get_obj() const
const std::vector< UniValue > & getValues() const
void pushKV(std::string key, UniValue val)
Path class wrapper to block calls to the fs::path(std::string) implicit constructor and the fs::path:...
bool RenameOver(fs::path src, fs::path dest)
bool error(const char *fmt, const Args &...args)
#define LogPrint(category,...)
static std::string PathToString(const path &path)
Convert path object to byte string.
std::string get_filesystem_error_message(const fs::filesystem_error &e)
void GetRandBytes(Span< uint8_t > bytes) noexcept
Overall design of the RNG and entropy sources.
static fs::path GetAuthCookieFile(bool temp=false)
Get name of RPC authentication cookie file.
std::vector< UniValue > JSONRPCProcessBatchReply(const UniValue &in)
Parse JSON-RPC batch reply into a vector.
bool GetAuthCookie(std::string *cookie_out)
Read the RPC authentication cookie from disk.
std::string JSONRPCReply(const UniValue &result, const UniValue &error, const UniValue &id)
UniValue JSONRPCRequestObj(const std::string &strMethod, const UniValue ¶ms, const UniValue &id)
JSON-RPC protocol.
UniValue JSONRPCError(int code, const std::string &message)
static const char *const COOKIEAUTH_FILE
Default name for auth cookie file.
void DeleteAuthCookie()
Delete RPC authentication cookie from disk.
bool GenerateAuthCookie(std::string *cookie_out)
Generate a new RPC authentication cookie and write it to disk.
UniValue JSONRPCReplyObj(const UniValue &result, const UniValue &error, const UniValue &id)
static const std::string COOKIEAUTH_USER
Username used when cookie authentication is in use (arbitrary, only for recognizability in debugging/...
@ RPC_INVALID_REQUEST
Standard JSON-RPC 2.0 errors.
const UniValue NullUniValue
std::string HexStr(const Span< const uint8_t > s)
Convert a span of bytes to a lower-case hexadecimal string.
std::string SanitizeString(std::string_view str, int rule)
Remove unsafe chars.