From 7432cc7fa4d275d6e0f57b672a0677358fc538a6 Mon Sep 17 00:00:00 2001 From: Sutou Kouhei <kou@clear-code.com> Date: Fri, 5 May 2023 12:57:05 +0900 Subject: [PATCH] GH-35435: [Ruby][Flight] Add ArrowFlight::Client#authenticate_basic (#35436) ### Rationale for this change `ArrowFlight::Client#authenticate_basic_token` is inconvenient because users need to set a returned Bearer token manually. ### What changes are included in this PR? Adds a convenient method for a common Basic authentication use case. ### Are these changes tested? Yes. ### Are there any user-facing changes? Yes. * Closes: #35435 Authored-by: Sutou Kouhei <kou@clear-code.com> Signed-off-by: Sutou Kouhei <kou@clear-code.com> --- .../lib/arrow-flight/client.rb | 51 +++++++++++++++++++ .../lib/arrow-flight/loader.rb | 1 + 2 files changed, 52 insertions(+) create mode 100644 ruby/red-arrow-flight/lib/arrow-flight/client.rb diff --git a/ruby/red-arrow-flight/lib/arrow-flight/client.rb b/ruby/red-arrow-flight/lib/arrow-flight/client.rb new file mode 100644 index 0000000000000..ad45a4e403559 --- /dev/null +++ b/ruby/red-arrow-flight/lib/arrow-flight/client.rb @@ -0,0 +1,51 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +module ArrowFlight + class Client + # Authenticates by Basic authentication. + # + # @param user [String] User name to be used. + # @param password [String] Password to be used. + # @param options [ArrowFlight::CallOptions, Hash, nil] (nil) + # The options to be used. + # + # @return [ArrowFlight::CallOptions] The options that can be used + # for following calls. It includes Bearer token for @user. + # + # If @options is an ArrowFlight::CallOptions, the given @options + # is returned with Bearer token. + # + # If @options isn't an ArrowFlight::CallOptions, a new + # ArrowFlight::CallOptions is created and it's returned. + # + # @since 13.0.0 + def authenticate_basic(user, password, options=nil) + unless options.is_a?(CallOptions) + options = CallOptions.try_convert(options) + end + options ||= CallOptions.new + _success, bearer_name, bearer_value = + authenticate_basic_token(user, password, options) + invalid_bearer = (bearer_name.empty? or bearer_value.empty?) + unless invalid_bearer + options.add_header(bearer_name, bearer_value) + end + options + end + end +end diff --git a/ruby/red-arrow-flight/lib/arrow-flight/loader.rb b/ruby/red-arrow-flight/lib/arrow-flight/loader.rb index 4fb88d4296cbd..042e15769368e 100644 --- a/ruby/red-arrow-flight/lib/arrow-flight/loader.rb +++ b/ruby/red-arrow-flight/lib/arrow-flight/loader.rb @@ -30,6 +30,7 @@ def post_load(repository, namespace) def require_libraries require "arrow-flight/call-options" + require "arrow-flight/client" require "arrow-flight/client-options" require "arrow-flight/location" require "arrow-flight/record-batch-reader"