aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorilnaz <ilnaz@ydb.tech>2022-10-06 15:53:10 +0300
committerilnaz <ilnaz@ydb.tech>2022-10-06 15:53:10 +0300
commite0afdbbbbcbb295e9a4db98e3131b68ce2fef0eb (patch)
tree68e4d1fdd5d11392fdf40a72d42cff1452d80421
parent36dfefd91608b1e7a6237277086b716ee2aa273a (diff)
downloadydb-e0afdbbbbcbb295e9a4db98e3131b68ce2fef0eb.tar.gz
(refactoring) Reduce copy-paste: common helper methods
-rw-r--r--ydb/core/grpc_services/base/base.h91
1 files changed, 41 insertions, 50 deletions
diff --git a/ydb/core/grpc_services/base/base.h b/ydb/core/grpc_services/base/base.h
index 5a14c718c48..ca6362cca9b 100644
--- a/ydb/core/grpc_services/base/base.h
+++ b/ydb/core/grpc_services/base/base.h
@@ -21,6 +21,8 @@
#include <ydb/core/tx/scheme_board/events.h>
#include <ydb/core/base/events.h>
+#include <util/stream/str.h>
+
namespace NKikimrConfig {
class TAppConfig;
}
@@ -569,11 +571,38 @@ private:
NYql::TIssueManager IssueManager_;
};
-inline TMaybe<TString> ToMaybe(const TVector<TStringBuf>& vec) {
- if (vec.empty()) {
- return {};
+namespace {
+
+ inline TMaybe<TString> ToMaybe(const TVector<TStringBuf>& vec) {
+ if (vec.empty()) {
+ return {};
+ }
+ return TString{vec[0]};
+ }
+
+ inline const TMaybe<TString> ExtractYdbToken(const TVector<TStringBuf>& authHeadValues) {
+ if (authHeadValues.empty()) {
+ return {};
+ }
+ return TString{authHeadValues[0]};
+ }
+
+ inline const TMaybe<TString> ExtractDatabaseName(const TVector<TStringBuf>& dbHeaderValues) {
+ if (dbHeaderValues.empty()) {
+ return {};
+ }
+ return CGIUnescapeRet(dbHeaderValues[0]);
+ }
+
+ inline TString MakeAuthError(const TString& in, NYql::TIssueManager& issues) {
+ TStringStream out;
+ out << "unauthenticated"
+ << (in ? ", " : "") << in
+ << (issues.GetIssues() ? ": " : "");
+ issues.GetIssues().PrintTo(out, true /* one line */);
+ return out.Str();
}
- return TString{vec[0]};
+
}
template <ui32 TRpcId, typename TReq, typename TResp, TRateLimiterMode RlMode = TRateLimiterMode::Off>
@@ -601,29 +630,15 @@ public:
}
const TMaybe<TString> GetYdbToken() const override {
- const auto& res = Ctx_->GetPeerMetaValues(NYdb::YDB_AUTH_TICKET_HEADER);
- if (res.empty()) {
- return {};
- }
- return TString{res[0]};
+ return ExtractYdbToken(Ctx_->GetPeerMetaValues(NYdb::YDB_AUTH_TICKET_HEADER));
}
bool HasClientCapability(const TString& capability) const override {
- const auto& values = Ctx_->GetPeerMetaValues(NYdb::YDB_CLIENT_CAPABILITIES);
- for (const auto& value : values) {
- if (value == capability)
- return true;
- }
-
- return false;
+ return FindPtr(Ctx_->GetPeerMetaValues(NYdb::YDB_CLIENT_CAPABILITIES), capability);
}
const TMaybe<TString> GetDatabaseName() const override {
- const auto& res = Ctx_->GetPeerMetaValues(NYdb::YDB_DATABASE_HEADER);
- if (res.empty()) {
- return {};
- }
- return CGIUnescapeRet(res[0]);
+ return ExtractDatabaseName(Ctx_->GetPeerMetaValues(NYdb::YDB_DATABASE_HEADER));
}
void UpdateAuthState(NGrpc::TAuthState::EAuthState state) override {
@@ -640,12 +655,7 @@ public:
}
void ReplyUnauthenticated(const TString& in) override {
- TStringBuilder builder;
- builder << (in.empty() ? TString("unauthenticated") : TString("unauthenticated, ")) << in;
- for (const auto& issue : IssueManager_.GetIssues()) {
- builder << " " << issue.Message;
- }
- Ctx_->Finish(grpc::Status(grpc::StatusCode::UNAUTHENTICATED, builder));
+ Ctx_->Finish(grpc::Status(grpc::StatusCode::UNAUTHENTICATED, MakeAuthError(in, IssueManager_)));
}
void ReplyUnavaliable() override {
@@ -872,29 +882,15 @@ public:
{ }
const TMaybe<TString> GetYdbToken() const override {
- const auto& res = Ctx_->GetPeerMetaValues(NYdb::YDB_AUTH_TICKET_HEADER);
- if (res.empty()) {
- return {};
- }
- return TString{res[0]};
+ return ExtractYdbToken(Ctx_->GetPeerMetaValues(NYdb::YDB_AUTH_TICKET_HEADER));
}
bool HasClientCapability(const TString& capability) const override {
- const auto& values = Ctx_->GetPeerMetaValues(NYdb::YDB_CLIENT_CAPABILITIES);
- for (const auto& value : values) {
- if (capability == value)
- return true;
- }
-
- return false;
+ return FindPtr(Ctx_->GetPeerMetaValues(NYdb::YDB_CLIENT_CAPABILITIES), capability);
}
const TMaybe<TString> GetDatabaseName() const override {
- const auto& res = Ctx_->GetPeerMetaValues(NYdb::YDB_DATABASE_HEADER);
- if (res.empty()) {
- return {};
- }
- return CGIUnescapeRet(res[0]);
+ return ExtractDatabaseName(Ctx_->GetPeerMetaValues(NYdb::YDB_DATABASE_HEADER));
}
void UpdateAuthState(NGrpc::TAuthState::EAuthState state) override {
@@ -911,12 +907,7 @@ public:
}
void ReplyUnauthenticated(const TString& in) override {
- TStringBuilder builder;
- builder << in;
- for (const auto& issue : IssueManager.GetIssues()) {
- builder << " " << issue.Message;
- }
- Ctx_->ReplyUnauthenticated(builder);
+ Ctx_->ReplyUnauthenticated(MakeAuthError(in, IssueManager));
}
void SetInternalToken(const TString& token) override {