summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorermolovd <[email protected]>2025-04-10 18:03:14 +0300
committerermolovd <[email protected]>2025-04-10 18:19:28 +0300
commite43e3425034d03daaec5282fe1d8ec72fbe0b6dc (patch)
treecb90d9dfb6ff462691b33b91e5e9b37d087cacea
parent473f2869597653cf26c8582095d1d9a805cb66fb (diff)
YT-24245: make TClientOptions a struct not a typedef
* Changelog entry Type: other Component: native-cpp-api TClientOptions used to be typedef to NAuth::TAuthenticationOptions. Now it is struct inherited from TAuthenticationOptions. Designated initializers might fail to compile. commit_hash:e975edceeb0d50a8048503bba0e1982d78624451
-rw-r--r--yt/yt/client/api/connection.h2
-rw-r--r--yt/yt/client/api/options.cpp58
-rw-r--r--yt/yt/client/api/options.h41
-rw-r--r--yt/yt/client/api/public.h2
-rw-r--r--yt/yt/client/cache/config.h4
-rw-r--r--yt/yt/library/auth/authentication_options.cpp34
-rw-r--r--yt/yt/library/auth/authentication_options.h6
-rw-r--r--yt/yt/library/auth/credentials_injecting_channel.cpp2
8 files changed, 98 insertions, 51 deletions
diff --git a/yt/yt/client/api/connection.h b/yt/yt/client/api/connection.h
index 7c87c8d1920..5e3255fe631 100644
--- a/yt/yt/client/api/connection.h
+++ b/yt/yt/client/api/connection.h
@@ -1,6 +1,7 @@
#pragma once
#include "public.h"
+#include "options.h"
#include <yt/yt/client/chunk_client/public.h>
@@ -73,4 +74,3 @@ DEFINE_REFCOUNTED_TYPE(IConnection)
////////////////////////////////////////////////////////////////////////////////
} // namespace NYT::NApi
-
diff --git a/yt/yt/client/api/options.cpp b/yt/yt/client/api/options.cpp
index ef46291e03d..03c7683160c 100644
--- a/yt/yt/client/api/options.cpp
+++ b/yt/yt/client/api/options.cpp
@@ -10,11 +10,59 @@ namespace NYT::NApi {
////////////////////////////////////////////////////////////////////////////////
-NApi::TClientOptions GetClientOptionsFromEnv()
+TClientOptions TClientOptions::FromToken(std::string token)
{
- NApi::TClientOptions options {
- .Token = NAuth::LoadToken(),
- };
+ TClientOptions options;
+ options.Token = std::move(token);
+ return options;
+}
+
+TClientOptions TClientOptions::FromUserAndToken(std::string user, std::string token)
+{
+ TClientOptions options;
+ options.User = std::move(user);
+ options.Token = std::move(token);
+ return options;
+}
+
+TClientOptions TClientOptions::FromUser(std::string user, const std::optional<std::string>& userTag)
+{
+ TClientOptions options;
+ options.User = std::move(user);
+ options.UserTag = userTag.value_or(user);
+ return options;
+}
+
+TClientOptions TClientOptions::Root()
+{
+ return FromUser(NRpc::RootUserName);
+}
+
+TClientOptions TClientOptions::FromAuthenticationIdentity(const NRpc::TAuthenticationIdentity& identity)
+{
+ return FromUser(identity.User, identity.UserTag);
+}
+
+TClientOptions TClientOptions::FromServiceTicketAuth(NAuth::IServiceTicketAuthPtr ticketAuth)
+{
+ TClientOptions options;
+ options.ServiceTicketAuth = std::move(ticketAuth);
+ return options;
+}
+
+TClientOptions TClientOptions::FromUserTicket(std::string userTicket)
+{
+ TClientOptions options;
+ options.UserTicket = std::move(userTicket);
+ return options;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+TClientOptions GetClientOptionsFromEnv()
+{
+ NApi::TClientOptions options;
+ options.Token = NAuth::LoadToken();
auto user = Strip(GetEnv("YT_USER"));
if (!user.empty()) {
@@ -24,7 +72,7 @@ NApi::TClientOptions GetClientOptionsFromEnv()
return options;
}
-const NApi::TClientOptions& GetClientOptionsFromEnvStatic()
+const TClientOptions& GetClientOptionsFromEnvStatic()
{
static const NApi::TClientOptions options = GetClientOptionsFromEnv();
return options;
diff --git a/yt/yt/client/api/options.h b/yt/yt/client/api/options.h
index 012a0341e56..2cca2a093c8 100644
--- a/yt/yt/client/api/options.h
+++ b/yt/yt/client/api/options.h
@@ -8,6 +8,45 @@ namespace NYT::NApi {
////////////////////////////////////////////////////////////////////////////////
+struct TClientOptions
+ : public NAuth::TAuthenticationOptions
+{
+ //! Create options for authenticating with token.
+ /*!
+ * User is determined automatically.
+ */
+ static TClientOptions FromToken(std::string token);
+
+ //! Create options for authenticating with token.
+ /*!
+ * Usually you can use @ref NYT::NApi::TClientOptions::FromToken
+ */
+ static TClientOptions FromUserAndToken(std::string user, std::string token);
+
+ //! Create options for authenticating as user.
+ /*!
+ * Such options works in internal YT code and can work in tests.
+ * Production clusters reject such options.
+ */
+ static TClientOptions FromUser(std::string user, const std::optional<std::string>& userTag = {});
+
+ //! Creates options for authenticating as root.
+ /*!
+ * Such options works in internal YT code and can work in tests.
+ * Production clusters reject such options.
+ */
+ static TClientOptions Root();
+
+ static TClientOptions FromAuthenticationIdentity(const NRpc::TAuthenticationIdentity& identity);
+
+ static TClientOptions FromServiceTicketAuth(NAuth::IServiceTicketAuthPtr ticketAuth);
+ static TClientOptions FromUserTicket(std::string userTicket);
+
+ // More fields are going to be added in the process of working on YT-24245
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
//! Fills client options from environment variable (client options is permanent for whole lifecycle of program).
/*!
* UserName is extracted from YT_USER env variable or uses current system username.
@@ -20,4 +59,4 @@ const TClientOptions& GetClientOptionsFromEnvStatic();
////////////////////////////////////////////////////////////////////////////////
-} // namespace NYT:::NApi
+} // namespace NYT::NApi
diff --git a/yt/yt/client/api/public.h b/yt/yt/client/api/public.h
index 7902bae0d12..21fa25ad5bb 100644
--- a/yt/yt/client/api/public.h
+++ b/yt/yt/client/api/public.h
@@ -119,7 +119,7 @@ DECLARE_REFCOUNTED_STRUCT(IJournalWritesObserver)
struct TConnectionOptions;
-using TClientOptions = NAuth::TAuthenticationOptions;
+struct TClientOptions;
struct TTransactionParticipantOptions;
diff --git a/yt/yt/client/cache/config.h b/yt/yt/client/cache/config.h
index 5561b161e8b..8742a232303 100644
--- a/yt/yt/client/cache/config.h
+++ b/yt/yt/client/cache/config.h
@@ -36,8 +36,8 @@ struct TClientsCacheAuthentificationOptions final
// Get options with `DefaultOptions` filled from env.
static TClientsCacheAuthentificationOptionsPtr GetFromEnvStatic();
- NAuth::TAuthenticationOptions DefaultOptions;
- THashMap<std::string, NAuth::TAuthenticationOptions, THash<std::string>, TEqualTo<>> ClusterOptions;
+ NApi::TClientOptions DefaultOptions;
+ THashMap<std::string, NApi::TClientOptions, THash<std::string>, TEqualTo<>> ClusterOptions;
};
DEFINE_REFCOUNTED_TYPE(TClientsCacheAuthentificationOptions)
diff --git a/yt/yt/library/auth/authentication_options.cpp b/yt/yt/library/auth/authentication_options.cpp
index 92ddc0848a8..c2b9b1b3974 100644
--- a/yt/yt/library/auth/authentication_options.cpp
+++ b/yt/yt/library/auth/authentication_options.cpp
@@ -8,40 +8,6 @@ namespace NYT::NAuth {
////////////////////////////////////////////////////////////////////////////////
-TAuthenticationOptions TAuthenticationOptions::FromUser(const std::string& user, const std::optional<std::string>& userTag)
-{
- return {
- .User = user,
- .UserTag = userTag.value_or(user),
- };
-}
-
-TAuthenticationOptions TAuthenticationOptions::FromAuthenticationIdentity(const NRpc::TAuthenticationIdentity& identity)
-{
- return FromUser(identity.User, identity.UserTag);
-}
-
-TAuthenticationOptions TAuthenticationOptions::FromToken(const std::string& token)
-{
- return {
- .Token = token,
- };
-}
-
-TAuthenticationOptions TAuthenticationOptions::FromServiceTicketAuth(const IServiceTicketAuthPtr& ticketAuth)
-{
- return {
- .ServiceTicketAuth = ticketAuth
- };
-}
-
-TAuthenticationOptions TAuthenticationOptions::FromUserTicket(const std::string& userTicket)
-{
- return {
- .UserTicket = userTicket,
- };
-}
-
const std::string& TAuthenticationOptions::GetAuthenticatedUser() const
{
static const std::string UnknownUser("<unknown>");
diff --git a/yt/yt/library/auth/authentication_options.h b/yt/yt/library/auth/authentication_options.h
index 1b966f46bb5..8688dd47303 100644
--- a/yt/yt/library/auth/authentication_options.h
+++ b/yt/yt/library/auth/authentication_options.h
@@ -14,12 +14,6 @@ namespace NYT::NAuth {
struct TAuthenticationOptions
{
- static TAuthenticationOptions FromUser(const std::string& user, const std::optional<std::string>& userTag = {});
- static TAuthenticationOptions FromAuthenticationIdentity(const NRpc::TAuthenticationIdentity& identity);
- static TAuthenticationOptions FromToken(const std::string& token);
- static TAuthenticationOptions FromServiceTicketAuth(const IServiceTicketAuthPtr& ticketAuth);
- static TAuthenticationOptions FromUserTicket(const std::string& userTicket);
-
const std::string& GetAuthenticatedUser() const;
NRpc::TAuthenticationIdentity GetAuthenticationIdentity() const;
diff --git a/yt/yt/library/auth/credentials_injecting_channel.cpp b/yt/yt/library/auth/credentials_injecting_channel.cpp
index 663568c7984..a08bd501468 100644
--- a/yt/yt/library/auth/credentials_injecting_channel.cpp
+++ b/yt/yt/library/auth/credentials_injecting_channel.cpp
@@ -268,7 +268,7 @@ public:
}
return CreateServiceTicketInjectingChannel(
std::move(channel),
- TAuthenticationOptions::FromServiceTicketAuth(ServiceTicketAuth_));
+ {.ServiceTicketAuth = ServiceTicketAuth_});
}
private: