This is an automated email from the ASF dual-hosted git repository.

alexey pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git


The following commit(s) were added to refs/heads/master by this push:
     new ff6c04ecf server: link in kudu_jwt_util
ff6c04ecf is described below

commit ff6c04ecf5d1fa46a7dc8b8a49d400ff6bbabdcd
Author: Andrew Wong <aw...@cloudera.com>
AuthorDate: Thu Apr 21 18:02:15 2022 -0700

    server: link in kudu_jwt_util
    
    Co-authored-by: Zoltan Chovan <zcho...@cloudera.com>
    
    Change-Id: Icfe694d553ebead6afbf58dc773bf5534f1d099a
    Reviewed-on: http://gerrit.cloudera.org:8080/18470
    Tested-by: Kudu Jenkins
    Reviewed-by: Wenzhe Zhou <wz...@cloudera.com>
    Reviewed-by: Alexey Serbin <ale...@apache.org>
---
 src/kudu/rpc/messenger.cc      | 5 +++++
 src/kudu/rpc/messenger.h       | 7 +++++++
 src/kudu/server/CMakeLists.txt | 1 +
 src/kudu/util/jwt-util.h       | 2 +-
 src/kudu/util/jwt.h            | 2 ++
 5 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/kudu/rpc/messenger.cc b/src/kudu/rpc/messenger.cc
index c2585f181..1ce94fa39 100644
--- a/src/kudu/rpc/messenger.cc
+++ b/src/kudu/rpc/messenger.cc
@@ -45,6 +45,7 @@
 #include "kudu/rpc/service_if.h"
 #include "kudu/security/tls_context.h"
 #include "kudu/security/token_verifier.h"
+#include "kudu/util/jwt.h"
 #include "kudu/util/flags.h"
 #include "kudu/util/metrics.h"
 #include "kudu/util/monotime.h"
@@ -94,6 +95,10 @@ Status MessengerBuilder::Build(shared_ptr<Messenger>* msgr) {
   // Note: can't use make_shared() as it doesn't support custom deleters.
   shared_ptr<Messenger> new_msgr(new Messenger(*this),
                                  
std::mem_fn(&Messenger::AllExternalReferencesDropped));
+  if (jwt_verifier_) {
+    new_msgr->jwt_verifier_ = std::move(jwt_verifier_);
+    RETURN_NOT_OK(new_msgr->mutable_jwt_verifier()->Init());
+  }
   RETURN_NOT_OK(ParseTriState("--rpc_authentication",
                               rpc_authentication_,
                               &new_msgr->authentication_));
diff --git a/src/kudu/rpc/messenger.h b/src/kudu/rpc/messenger.h
index 9fb77fb0e..127e7880d 100644
--- a/src/kudu/rpc/messenger.h
+++ b/src/kudu/rpc/messenger.h
@@ -85,6 +85,12 @@ class MessengerBuilder {
 
   explicit MessengerBuilder(std::string name);
 
+  MessengerBuilder& set_jwt_verifier(
+      std::shared_ptr<JwtVerifier> jwt_verifier) {
+    jwt_verifier_ = std::move(jwt_verifier);
+    return *this;
+  }
+
   // Set the length of time we will keep a TCP connection will alive with no 
traffic.
   MessengerBuilder& set_connection_keepalive_time(const MonoDelta& keepalive) {
     connection_keepalive_time_ = keepalive;
@@ -277,6 +283,7 @@ class MessengerBuilder {
   std::string rpc_ca_certificate_file_;
   std::string rpc_private_key_password_cmd_;
   std::string keytab_file_;
+  std::shared_ptr<JwtVerifier> jwt_verifier_;
   bool enable_inbound_tls_;
   bool reuseport_;
 };
diff --git a/src/kudu/server/CMakeLists.txt b/src/kudu/server/CMakeLists.txt
index 98a603560..02987102a 100644
--- a/src/kudu/server/CMakeLists.txt
+++ b/src/kudu/server/CMakeLists.txt
@@ -63,6 +63,7 @@ target_link_libraries(server_process
   krpc
   kudu_common
   kudu_fs
+  kudu_jwt_util
   kudu_util
   mustache
   server_base_proto
diff --git a/src/kudu/util/jwt-util.h b/src/kudu/util/jwt-util.h
index a4f96839a..a761372ea 100644
--- a/src/kudu/util/jwt-util.h
+++ b/src/kudu/util/jwt-util.h
@@ -98,7 +98,7 @@ class KeyBasedJwtVerifier : public JwtVerifier {
         is_local_file_(is_local_file) {
   }
   ~KeyBasedJwtVerifier() override = default;
-  Status Init();
+  Status Init() override;
   Status VerifyToken(const std::string& bytes_raw, std::string* subject) const 
override;
  private:
   JWTHelper* jwt_;
diff --git a/src/kudu/util/jwt.h b/src/kudu/util/jwt.h
index 43bb9d58b..990c3b900 100644
--- a/src/kudu/util/jwt.h
+++ b/src/kudu/util/jwt.h
@@ -28,6 +28,7 @@ namespace kudu {
 class JwtVerifier {
  public:
   virtual ~JwtVerifier() {}
+  virtual Status Init() = 0;
   // Verifies a JWT, which is passed as bytes_raw, then extracts the subject 
from the verified
   // token and returns it by pointer in subject. The returned pointer is owned 
by the caller.
   virtual Status VerifyToken(const std::string& bytes_raw, std::string* 
subject) const = 0;
@@ -39,6 +40,7 @@ class SimpleJwtVerifier : public JwtVerifier {
  public:
   SimpleJwtVerifier() = default;
   ~SimpleJwtVerifier() override = default;
+  Status Init() override { return Status::OK(); }
   Status VerifyToken(const std::string&  /*bytes_raw*/,
                      std::string*  /*subject*/) const override {
     return Status::NotAuthorized("JWT verification not configured");

Reply via email to