diff options
author | pnv1 <pnv@ydb.tech> | 2022-09-18 21:27:32 +0300 |
---|---|---|
committer | pnv1 <pnv@ydb.tech> | 2022-09-18 21:27:32 +0300 |
commit | 12b04172957edb67847ab99f35b6e805b24804d9 (patch) | |
tree | 6d260d9d2da4355ca0048172fda80d20e9d0c7ad | |
parent | 0261d0cd487b40a9fb05985c20a1cd80829df318 (diff) | |
download | ydb-12b04172957edb67847ab99f35b6e805b24804d9.tar.gz |
Add ydb auth get-token command
-rw-r--r-- | ydb/public/lib/ydb_cli/commands/CMakeLists.txt | 1 | ||||
-rw-r--r-- | ydb/public/lib/ydb_cli/commands/ydb_profile.cpp | 17 | ||||
-rw-r--r-- | ydb/public/lib/ydb_cli/commands/ydb_root_common.cpp | 2 | ||||
-rw-r--r-- | ydb/public/lib/ydb_cli/commands/ydb_service_auth.cpp | 49 | ||||
-rw-r--r-- | ydb/public/lib/ydb_cli/commands/ydb_service_auth.h | 25 | ||||
-rw-r--r-- | ydb/public/lib/ydb_cli/common/CMakeLists.txt | 1 | ||||
-rw-r--r-- | ydb/public/lib/ydb_cli/common/interactive.cpp | 23 | ||||
-rw-r--r-- | ydb/public/lib/ydb_cli/common/interactive.h | 11 |
8 files changed, 114 insertions, 15 deletions
diff --git a/ydb/public/lib/ydb_cli/commands/CMakeLists.txt b/ydb/public/lib/ydb_cli/commands/CMakeLists.txt index 89c9fbba660..f4f2f3b3aa0 100644 --- a/ydb/public/lib/ydb_cli/commands/CMakeLists.txt +++ b/ydb/public/lib/ydb_cli/commands/CMakeLists.txt @@ -41,6 +41,7 @@ target_sources(clicommands PRIVATE ${CMAKE_SOURCE_DIR}/ydb/public/lib/ydb_cli/commands/ydb_command.cpp ${CMAKE_SOURCE_DIR}/ydb/public/lib/ydb_cli/commands/ydb_profile.cpp ${CMAKE_SOURCE_DIR}/ydb/public/lib/ydb_cli/commands/ydb_root_common.cpp + ${CMAKE_SOURCE_DIR}/ydb/public/lib/ydb_cli/commands/ydb_service_auth.cpp ${CMAKE_SOURCE_DIR}/ydb/public/lib/ydb_cli/commands/ydb_service_discovery.cpp ${CMAKE_SOURCE_DIR}/ydb/public/lib/ydb_cli/commands/ydb_service_export.cpp ${CMAKE_SOURCE_DIR}/ydb/public/lib/ydb_cli/commands/ydb_service_import.cpp diff --git a/ydb/public/lib/ydb_cli/commands/ydb_profile.cpp b/ydb/public/lib/ydb_cli/commands/ydb_profile.cpp index 566cfdcba1f..3527a003a8e 100644 --- a/ydb/public/lib/ydb_cli/commands/ydb_profile.cpp +++ b/ydb/public/lib/ydb_cli/commands/ydb_profile.cpp @@ -1,5 +1,7 @@ #include "ydb_profile.h" +#include <ydb/public/lib/ydb_cli/common/interactive.h> + #include <util/folder/dirut.h> #if defined(_win32_) @@ -287,21 +289,6 @@ namespace { picker.PickOptionAndDoAction(); } - bool AskYesOrNo() { - TString input; - for (;;) { - Cin >> input; - if (to_lower(input) == "y" || to_lower(input) == "yes") { - return true; - } else if (to_lower(input) == "n" || to_lower(input) == "n") { - return false; - } else { - Cout << "Type \"y\" (yes) or \"n\" (no): "; - } - } - return false; - } - void ConfigureProfile(const TString& profileName, std::shared_ptr<IProfileManager> profileManager, TClientCommand::TConfig& config) { bool existingProfile = profileManager->HasProfile(profileName); diff --git a/ydb/public/lib/ydb_cli/commands/ydb_root_common.cpp b/ydb/public/lib/ydb_cli/commands/ydb_root_common.cpp index d219fe857b0..deb3292a945 100644 --- a/ydb/public/lib/ydb_cli/commands/ydb_root_common.cpp +++ b/ydb/public/lib/ydb_cli/commands/ydb_root_common.cpp @@ -1,5 +1,6 @@ #include "ydb_root_common.h" #include "ydb_profile.h" +#include "ydb_service_auth.h" #include "ydb_service_discovery.h" #include "ydb_service_export.h" #include "ydb_service_import.h" @@ -27,6 +28,7 @@ TClientCommandRootCommon::TClientCommandRootCommon(const TClientSettings& settin , Settings (settings) { ValidateSettings(); + AddCommand(std::make_unique<TCommandAuth>()); AddCommand(std::make_unique<TCommandDiscovery>()); AddCommand(std::make_unique<TCommandScheme>()); AddCommand(std::make_unique<TCommandScripting>()); diff --git a/ydb/public/lib/ydb_cli/commands/ydb_service_auth.cpp b/ydb/public/lib/ydb_cli/commands/ydb_service_auth.cpp new file mode 100644 index 00000000000..aecc1741a35 --- /dev/null +++ b/ydb/public/lib/ydb_cli/commands/ydb_service_auth.cpp @@ -0,0 +1,49 @@ +#include "ydb_service_auth.h" + +#include <ydb/public/lib/ydb_cli/common/interactive.h> + +namespace NYdb { +namespace NConsoleClient { + +TCommandAuth::TCommandAuth() + : TClientCommandTree("auth", {}, "Auth service operations") +{ + AddCommand(std::make_unique<TCommandGetToken>()); +} + +TCommandGetToken::TCommandGetToken() + : TYdbSimpleCommand("get-token", {}, "Get token from authentication parameters") +{} + +void TCommandGetToken::Config(TConfig& config) { + TYdbSimpleCommand::Config(config); + config.Opts->AddLongOption('f', "force", "Print token without prompt").NoArgument().StoreTrue(&ForceMode); + config.SetFreeArgsNum(0); +} + +int TCommandGetToken::Run(TConfig& config) { + auto credentialsProviderFactory = config.CredentialsGetter(config); + + if (!ForceMode) { + NColorizer::TColors colors = NColorizer::AutoColors(Cout); + Cout << colors.RedColor() << "Caution: Your auth token will be printed to console." << colors.OldColor() + << " Use \"--force\" (\"-f\") option to print without prompting." << Endl + << "Do you want to proceed (y/n)? : "; + if (!AskYesOrNo()) { + return EXIT_FAILURE; + } + } + + if (credentialsProviderFactory) { + auto authInfo = credentialsProviderFactory->CreateProvider()->GetAuthInfo(); + if (authInfo) { + Cout << authInfo << Endl; + return EXIT_SUCCESS; + } + } + Cerr << "No authentication provided" << Endl; + return EXIT_FAILURE; +} + +} +} diff --git a/ydb/public/lib/ydb_cli/commands/ydb_service_auth.h b/ydb/public/lib/ydb_cli/commands/ydb_service_auth.h new file mode 100644 index 00000000000..d9dfffd050c --- /dev/null +++ b/ydb/public/lib/ydb_cli/commands/ydb_service_auth.h @@ -0,0 +1,25 @@ +#pragma once + +#include "ydb_command.h" +#include "ydb_common.h" + +namespace NYdb { +namespace NConsoleClient { + +class TCommandAuth : public TClientCommandTree { +public: + TCommandAuth(); +}; + +class TCommandGetToken : public TYdbSimpleCommand { +public: + TCommandGetToken(); + void Config(TConfig& config) override; + int Run(TConfig& config) override; + +private: + bool ForceMode = false; +}; + +} +} diff --git a/ydb/public/lib/ydb_cli/common/CMakeLists.txt b/ydb/public/lib/ydb_cli/common/CMakeLists.txt index c90c7fb747d..caa40109b8e 100644 --- a/ydb/public/lib/ydb_cli/common/CMakeLists.txt +++ b/ydb/public/lib/ydb_cli/common/CMakeLists.txt @@ -30,6 +30,7 @@ target_sources(common PRIVATE ${CMAKE_SOURCE_DIR}/ydb/public/lib/ydb_cli/common/common.cpp ${CMAKE_SOURCE_DIR}/ydb/public/lib/ydb_cli/common/examples.cpp ${CMAKE_SOURCE_DIR}/ydb/public/lib/ydb_cli/common/format.cpp + ${CMAKE_SOURCE_DIR}/ydb/public/lib/ydb_cli/common/interactive.cpp ${CMAKE_SOURCE_DIR}/ydb/public/lib/ydb_cli/common/interruptible.cpp ${CMAKE_SOURCE_DIR}/ydb/public/lib/ydb_cli/common/normalize_path.cpp ${CMAKE_SOURCE_DIR}/ydb/public/lib/ydb_cli/common/parameters.cpp diff --git a/ydb/public/lib/ydb_cli/common/interactive.cpp b/ydb/public/lib/ydb_cli/common/interactive.cpp new file mode 100644 index 00000000000..dd2e0a94f25 --- /dev/null +++ b/ydb/public/lib/ydb_cli/common/interactive.cpp @@ -0,0 +1,23 @@ +#include "interactive.h" + +namespace NYdb { +namespace NConsoleClient { + + +bool AskYesOrNo() { + TString input; + for (;;) { + Cin >> input; + if (to_lower(input) == "y" || to_lower(input) == "yes") { + return true; + } else if (to_lower(input) == "n" || to_lower(input) == "n") { + return false; + } else { + Cout << "Type \"y\" (yes) or \"n\" (no): "; + } + } + return false; +} + +} +} diff --git a/ydb/public/lib/ydb_cli/common/interactive.h b/ydb/public/lib/ydb_cli/common/interactive.h new file mode 100644 index 00000000000..1910f6c73b1 --- /dev/null +++ b/ydb/public/lib/ydb_cli/common/interactive.h @@ -0,0 +1,11 @@ +#pragma once + +#include <ydb/public/sdk/cpp/client/ydb_scheme/scheme.h> + +namespace NYdb { +namespace NConsoleClient { + +bool AskYesOrNo(); + +} +} |