diff options
| author | Dan Engelbrecht <[email protected]> | 2024-03-18 13:24:10 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2024-03-18 13:24:10 +0100 |
| commit | 927bf8f073e8f1f994cbc7f593a442890722a05f (patch) | |
| tree | 5c93fb0765ef28b674460c6bd1ca84c0d4948358 /src | |
| parent | add a retry when trying to create the lock file (#9) (diff) | |
| download | zen-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.cpp | 51 | ||||
| -rw-r--r-- | src/zen/cmds/projectstore_cmd.h | 2 | ||||
| -rw-r--r-- | src/zenserver/projectstore/remoteprojectstore.cpp | 17 |
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 {}", |