aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2024-03-18 13:24:10 +0100
committerGitHub Enterprise <[email protected]>2024-03-18 13:24:10 +0100
commit927bf8f073e8f1f994cbc7f593a442890722a05f (patch)
tree5c93fb0765ef28b674460c6bd1ca84c0d4948358 /src
parentadd a retry when trying to create the lock file (#9) (diff)
downloadzen-927bf8f073e8f1f994cbc7f593a442890722a05f.tar.xz
zen-927bf8f073e8f1f994cbc7f593a442890722a05f.zip
read jupiter token from file (#10)
* Add ability to specify a json file for cloud access token OidcToken.exe in UE can be asked to produce such a file with the -OutFile option * avoid division by zero when reporting progress
Diffstat (limited to 'src')
-rw-r--r--src/zen/cmds/projectstore_cmd.cpp51
-rw-r--r--src/zen/cmds/projectstore_cmd.h2
-rw-r--r--src/zenserver/projectstore/remoteprojectstore.cpp17
3 files changed, 65 insertions, 5 deletions
diff --git a/src/zen/cmds/projectstore_cmd.cpp b/src/zen/cmds/projectstore_cmd.cpp
index e1ee31aaf..dadab22ec 100644
--- a/src/zen/cmds/projectstore_cmd.cpp
+++ b/src/zen/cmds/projectstore_cmd.cpp
@@ -16,6 +16,7 @@
ZEN_THIRD_PARTY_INCLUDES_START
#include <cpr/cpr.h>
+#include <json11.hpp>
ZEN_THIRD_PARTY_INCLUDES_END
#include <signal.h>
@@ -36,6 +37,28 @@ namespace {
);
+ std::string ReadCloudAccessTokenFromFile(const std::filesystem::path& Path)
+ {
+ if (!std::filesystem::is_regular_file(Path))
+ {
+ throw std::runtime_error(fmt::format("the file '{}' does not exist", Path));
+ }
+ IoBuffer Body = IoBufferBuilder::MakeFromFile(Path);
+ std::string JsonText(reinterpret_cast<const char*>(Body.GetData()), Body.GetSize());
+ std::string JsonError;
+ json11::Json TokenInfo = json11::Json::parse(JsonText, JsonError);
+ if (!JsonError.empty())
+ {
+ throw std::runtime_error(fmt::format("failed parsing json file '{}'. Reason: '{}'", Path, JsonError));
+ }
+ const std::string AuthToken = TokenInfo["Token"].string_value();
+ if (AuthToken.empty())
+ {
+ throw std::runtime_error(fmt::format("the json file '{}' does not contain a value for \"Token\"", Path));
+ }
+ return AuthToken;
+ }
+
IoBuffer MakeCbObjectPayload(std::function<void(CbObjectWriter& Writer)> WriteCB)
{
CbObjectWriter Writer;
@@ -643,6 +666,12 @@ ExportOplogCommand::ExportOplogCommand()
"<envvariable>");
m_Options.add_option("cloud",
"",
+ "access-token-path",
+ "Path to json file that holds the cloud Storage access token",
+ cxxopts::value(m_CloudAccessTokenPath),
+ "<filepath>");
+ m_Options.add_option("cloud",
+ "",
"assume-http2",
"Assume that the cloud endpoint is a HTTP/2 endpoint skipping HTTP/1.1 upgrade handshake",
cxxopts::value(m_CloudAssumeHttp2),
@@ -884,6 +913,14 @@ ExportOplogCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** arg
{
Writer.AddString("access-token"sv, m_CloudAccessToken);
}
+ if (!m_CloudAccessTokenPath.empty())
+ {
+ std::string ResolvedCloudAccessToken = ReadCloudAccessTokenFromFile(m_CloudAccessTokenPath);
+ if (!ResolvedCloudAccessToken.empty())
+ {
+ Writer.AddString("access-token"sv, ResolvedCloudAccessToken);
+ }
+ }
if (!m_CloudAccessTokenEnv.empty())
{
std::string ResolvedCloudAccessTokenEnv = GetEnvVariable(m_CloudAccessTokenEnv);
@@ -999,6 +1036,12 @@ ImportOplogCommand::ImportOplogCommand()
"<envvariable>");
m_Options.add_option("cloud",
"",
+ "access-token-path",
+ "Path to json file that holds the cloud Storage access token",
+ cxxopts::value(m_CloudAccessTokenPath),
+ "<filepath>");
+ m_Options.add_option("cloud",
+ "",
"assume-http2",
"Assume that the cloud endpoint is a HTTP/2 endpoint skipping HTTP/1.1 upgrade handshake",
cxxopts::value(m_CloudAssumeHttp2),
@@ -1180,6 +1223,14 @@ ImportOplogCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** arg
{
Writer.AddString("access-token"sv, m_CloudAccessToken);
}
+ if (!m_CloudAccessTokenPath.empty())
+ {
+ std::string ResolvedCloudAccessToken = ReadCloudAccessTokenFromFile(m_CloudAccessTokenPath);
+ if (!ResolvedCloudAccessToken.empty())
+ {
+ Writer.AddString("access-token"sv, ResolvedCloudAccessToken);
+ }
+ }
if (!m_CloudAccessTokenEnv.empty())
{
std::string ResolvedCloudAccessTokenEnv = GetEnvVariable(m_CloudAccessTokenEnv);
diff --git a/src/zen/cmds/projectstore_cmd.h b/src/zen/cmds/projectstore_cmd.h
index d7a4ef4d8..5a3f7281b 100644
--- a/src/zen/cmds/projectstore_cmd.h
+++ b/src/zen/cmds/projectstore_cmd.h
@@ -141,6 +141,7 @@ private:
std::string m_CloudOpenIdProvider;
std::string m_CloudAccessToken;
std::string m_CloudAccessTokenEnv;
+ std::string m_CloudAccessTokenPath;
bool m_CloudAssumeHttp2 = false;
bool m_CloudDisableTempBlocks = false;
bool m_IgnoreMissingAttachments = false;
@@ -184,6 +185,7 @@ private:
std::string m_CloudOpenIdProvider;
std::string m_CloudAccessToken;
std::string m_CloudAccessTokenEnv;
+ std::string m_CloudAccessTokenPath;
bool m_CloudAssumeHttp2 = false;
std::string m_ZenUrl;
diff --git a/src/zenserver/projectstore/remoteprojectstore.cpp b/src/zenserver/projectstore/remoteprojectstore.cpp
index ce3411114..ab207930f 100644
--- a/src/zenserver/projectstore/remoteprojectstore.cpp
+++ b/src/zenserver/projectstore/remoteprojectstore.cpp
@@ -492,7 +492,10 @@ BuildContainer(CidStore& ChunkStore,
fmt::format("Aborting ({}): {}", RemoteResult.GetError(), RemoteResult.GetErrorReason()));
return {};
}
- ReportProgress(OptionalContext, fmt::format("Building oplog: {} ops processed", OpCount), TotalOpCount, 0);
+ if (TotalOpCount > 0)
+ {
+ ReportProgress(OptionalContext, fmt::format("Building oplog: {} ops processed", OpCount), TotalOpCount, 0);
+ }
}
SectionOpsWriter.EndArray(); // "ops"
@@ -1177,10 +1180,14 @@ BuildContainer(CidStore& ChunkStore,
}
}
- ReportProgress(OptionalContext,
- fmt::format("Assembling blocks: {} attachments processed, {} blocks assembled", ChunksAssembled, ComposedBlocks),
- ChunkAssembleCount,
- 0);
+ if (ChunkAssembleCount > 0)
+ {
+ ReportProgress(
+ OptionalContext,
+ fmt::format("Assembling blocks: {} attachments processed, {} blocks assembled", ChunksAssembled, ComposedBlocks),
+ ChunkAssembleCount,
+ 0);
+ }
ReportMessage(OptionalContext,
fmt::format("Built oplog and collected {} attachments from {} ops into {} blocks and in {}",