aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpnv1 <pnv@ydb.tech>2022-09-18 21:27:32 +0300
committerpnv1 <pnv@ydb.tech>2022-09-18 21:27:32 +0300
commit12b04172957edb67847ab99f35b6e805b24804d9 (patch)
tree6d260d9d2da4355ca0048172fda80d20e9d0c7ad
parent0261d0cd487b40a9fb05985c20a1cd80829df318 (diff)
downloadydb-12b04172957edb67847ab99f35b6e805b24804d9.tar.gz
Add ydb auth get-token command
-rw-r--r--ydb/public/lib/ydb_cli/commands/CMakeLists.txt1
-rw-r--r--ydb/public/lib/ydb_cli/commands/ydb_profile.cpp17
-rw-r--r--ydb/public/lib/ydb_cli/commands/ydb_root_common.cpp2
-rw-r--r--ydb/public/lib/ydb_cli/commands/ydb_service_auth.cpp49
-rw-r--r--ydb/public/lib/ydb_cli/commands/ydb_service_auth.h25
-rw-r--r--ydb/public/lib/ydb_cli/common/CMakeLists.txt1
-rw-r--r--ydb/public/lib/ydb_cli/common/interactive.cpp23
-rw-r--r--ydb/public/lib/ydb_cli/common/interactive.h11
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();
+
+}
+}