6 #include "XrdOuc/XrdOucJson.hh"
11 using namespace std::string_literals;
14 CurlCopyOp::Headers &src_hdrs,
15 CurlCopyOp::Headers &dst_hdrs )
19 std::ifstream file(token_file);
23 log->
Warning(kLogXrdClHttp,
"Failed to open token file");
27 constexpr std::streamsize max_token_file_size = 10 * 1024;
29 std::string content(max_token_file_size,
'\0');
30 file.read(&content[0], max_token_file_size);
31 content.resize(file.gcount());
33 std::string src_token;
34 std::string dst_token;
36 if (
const auto json = nlohmann::json::parse(content,
nullptr,
false);
json.is_object())
38 const auto read_token = [&
json, log] (
const char *key, std::string &token)
40 if (
const auto value =
json.find(key); value !=
json.end() && value->is_string() && !value->get_ref<
const std::string &>().empty())
41 token = value->get_ref<
const std::string &>();
43 log->
Warning(kLogXrdClHttp,
"Property '%s' of the token file is not a non-empty string", key);
46 read_token(
"src", src_token);
47 read_token(
"dst", dst_token);
51 std::istringstream lines(content);
56 if (src_token.empty() && dst_token.empty())
58 log->
Warning(kLogXrdClHttp,
"Token file holds neither a <src> nor a <dst> token");
62 const auto add_token = [] (CurlCopyOp::Headers &headers,
const std::string &token)
65 headers.emplace_back(
"Authorization"s,
"Bearer "s + token);
68 add_token(src_hdrs, src_token);
69 add_token(dst_hdrs, dst_token);
void getline(uchar *buff, int blen)
static Log * GetLog()
Get default log.
void Warning(uint64_t topic, const char *format,...)
Report a warning.
bool ParseTokenFile(const std::string &token_file, CurlCopyOp::Headers &src_hdrs, CurlCopyOp::Headers &dst_hdrs)