diff options
author | ermolovd <[email protected]> | 2025-04-10 18:03:14 +0300 |
---|---|---|
committer | ermolovd <[email protected]> | 2025-04-10 18:19:28 +0300 |
commit | e43e3425034d03daaec5282fe1d8ec72fbe0b6dc (patch) | |
tree | cb90d9dfb6ff462691b33b91e5e9b37d087cacea | |
parent | 473f2869597653cf26c8582095d1d9a805cb66fb (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.h | 2 | ||||
-rw-r--r-- | yt/yt/client/api/options.cpp | 58 | ||||
-rw-r--r-- | yt/yt/client/api/options.h | 41 | ||||
-rw-r--r-- | yt/yt/client/api/public.h | 2 | ||||
-rw-r--r-- | yt/yt/client/cache/config.h | 4 | ||||
-rw-r--r-- | yt/yt/library/auth/authentication_options.cpp | 34 | ||||
-rw-r--r-- | yt/yt/library/auth/authentication_options.h | 6 | ||||
-rw-r--r-- | yt/yt/library/auth/credentials_injecting_channel.cpp | 2 |
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: |