From 7d913d718c9d98e2d6c12cac3a5b12acead39d66 Mon Sep 17 00:00:00 2001 From: ckoegel Date: Mon, 17 Aug 2026 16:36:04 -0400 Subject: [PATCH 1/2] SWI-12283 Allow Setting Custom Token URL --- custom_templates/configuration.mustache | 8 ++++++-- lib/bandwidth-sdk/configuration.rb | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/custom_templates/configuration.mustache b/custom_templates/configuration.mustache index 26d5806a..1897e3b4 100644 --- a/custom_templates/configuration.mustache +++ b/custom_templates/configuration.mustache @@ -65,6 +65,10 @@ module {{moduleName}} # Defines the access token (Bearer) used with OAuth2. attr_accessor :access_token + # Defines the URL used to obtain access tokens (Bearer) used with OAuth2. + # @return [String] + attr_accessor :access_token_url + # Defines a Proc used to fetch or refresh access tokens (Bearer) used with OAuth2. # Overrides the access_token if set # @return [Proc] @@ -175,6 +179,7 @@ module {{moduleName}} {{#authMethods}} {{#isOAuth}} @access_token_expiration = nil + @access_token_url = '{{tokenUrl}}' @access_token_getter = Proc.new { access_token_valid = @access_token && (@access_token_expiration.nil? || @access_token_expiration > Time.now + 60) next @access_token if access_token_valid @@ -182,9 +187,8 @@ module {{moduleName}} puts "Refreshing access token..." if @debugging # obtain new access token using client credentials - token_url = '{{tokenUrl}}' auth_header = 'Basic ' + ["#{@client_id}:#{@client_secret}"].pack('m').delete("\r\n") - conn = Faraday.new(url: token_url) do |faraday| + conn = Faraday.new(url: @access_token_url) do |faraday| faraday.request :url_encoded faraday.adapter Faraday.default_adapter end diff --git a/lib/bandwidth-sdk/configuration.rb b/lib/bandwidth-sdk/configuration.rb index c91120aa..e263f7fa 100644 --- a/lib/bandwidth-sdk/configuration.rb +++ b/lib/bandwidth-sdk/configuration.rb @@ -72,6 +72,10 @@ class Configuration # Defines the access token (Bearer) used with OAuth2. attr_accessor :access_token + # Defines the URL used to obtain access tokens (Bearer) used with OAuth2. + # @return [String] + attr_accessor :access_token_url + # Defines a Proc used to fetch or refresh access tokens (Bearer) used with OAuth2. # Overrides the access_token if set # @return [Proc] @@ -193,6 +197,7 @@ def initialize @force_ending_format = false @logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT) @access_token_expiration = nil + @access_token_url = 'https://api.bandwidth.com/api/v1/oauth2/token' @access_token_getter = Proc.new { access_token_valid = @access_token && (@access_token_expiration.nil? || @access_token_expiration > Time.now + 60) next @access_token if access_token_valid @@ -200,9 +205,8 @@ def initialize puts "Refreshing access token..." if @debugging # obtain new access token using client credentials - token_url = 'https://api.bandwidth.com/api/v1/oauth2/token' auth_header = 'Basic ' + ["#{@client_id}:#{@client_secret}"].pack('m').delete("\r\n") - conn = Faraday.new(url: token_url) do |faraday| + conn = Faraday.new(url: @access_token_url) do |faraday| faraday.request :url_encoded faraday.adapter Faraday.default_adapter end From 20e3b9072da9d7fcbd34e2b7512a6ef493f6ca6e Mon Sep 17 00:00:00 2001 From: ckoegel Date: Mon, 17 Aug 2026 16:37:22 -0400 Subject: [PATCH 2/2] update unit tests to not hit live oauth url --- spec/unit/api/calls_api_spec.rb | 3 +-- spec/unit/api/conferences_api_spec.rb | 3 +-- spec/unit/api/endpoints_api_spec.rb | 3 +-- spec/unit/api/media_api_spec.rb | 3 +-- spec/unit/api/messages_api_spec.rb | 3 +-- spec/unit/api/mfa_api_spec.rb | 3 +-- spec/unit/api/multi_channel_api_spec.rb | 3 +-- spec/unit/api/phone_number_lookup_api_spec.rb | 3 +-- spec/unit/api/recordings_api_spec.rb | 3 +-- spec/unit/api/statistics_api_spec.rb | 3 +-- spec/unit/api/toll_free_verification_api_spec.rb | 3 +-- spec/unit/api/transcriptions_api_spec.rb | 3 +-- 12 files changed, 12 insertions(+), 24 deletions(-) diff --git a/spec/unit/api/calls_api_spec.rb b/spec/unit/api/calls_api_spec.rb index ec58fbca..94ef82f8 100644 --- a/spec/unit/api/calls_api_spec.rb +++ b/spec/unit/api/calls_api_spec.rb @@ -5,8 +5,7 @@ before(:all) do Bandwidth.configure do |config| config.debugging = true - config.username = BW_USERNAME - config.password = BW_PASSWORD + config.access_token = 'abcd1234' config.ignore_operation_servers = true config.host = '127.0.0.1:4010' end diff --git a/spec/unit/api/conferences_api_spec.rb b/spec/unit/api/conferences_api_spec.rb index 72418b3b..d2d0e211 100644 --- a/spec/unit/api/conferences_api_spec.rb +++ b/spec/unit/api/conferences_api_spec.rb @@ -7,8 +7,7 @@ before(:all) do Bandwidth.configure do |config| config.debugging = true - config.username = BW_USERNAME - config.password = BW_PASSWORD + config.access_token = 'abcd1234' config.ignore_operation_servers = true config.return_binary_data = true config.host = '127.0.0.1:4010' diff --git a/spec/unit/api/endpoints_api_spec.rb b/spec/unit/api/endpoints_api_spec.rb index 2d015328..fa720496 100644 --- a/spec/unit/api/endpoints_api_spec.rb +++ b/spec/unit/api/endpoints_api_spec.rb @@ -5,8 +5,7 @@ before(:all) do Bandwidth.configure do |config| config.debugging = true - config.username = BW_USERNAME - config.password = BW_PASSWORD + config.access_token = 'abcd1234' config.ignore_operation_servers = true config.host = '127.0.0.1:4010' end diff --git a/spec/unit/api/media_api_spec.rb b/spec/unit/api/media_api_spec.rb index e73502db..51556701 100644 --- a/spec/unit/api/media_api_spec.rb +++ b/spec/unit/api/media_api_spec.rb @@ -7,8 +7,7 @@ before(:all) do Bandwidth.configure do |config| config.debugging = true - config.username = BW_USERNAME - config.password = BW_PASSWORD + config.access_token = 'abcd1234' config.ignore_operation_servers = true config.return_binary_data = true config.host = '127.0.0.1:4010' diff --git a/spec/unit/api/messages_api_spec.rb b/spec/unit/api/messages_api_spec.rb index 7032300f..ee2a144f 100644 --- a/spec/unit/api/messages_api_spec.rb +++ b/spec/unit/api/messages_api_spec.rb @@ -3,8 +3,7 @@ before(:all) do Bandwidth.configure do |config| config.debugging = true - config.username = BW_USERNAME - config.password = BW_PASSWORD + config.access_token = 'abcd1234' config.ignore_operation_servers = true config.host = '127.0.0.1:4010' end diff --git a/spec/unit/api/mfa_api_spec.rb b/spec/unit/api/mfa_api_spec.rb index c15b1ccf..3fcebfa8 100644 --- a/spec/unit/api/mfa_api_spec.rb +++ b/spec/unit/api/mfa_api_spec.rb @@ -6,8 +6,7 @@ before(:all) do Bandwidth.configure do |config| config.debugging = true - config.username = BW_USERNAME - config.password = BW_PASSWORD + config.access_token = 'abcd1234' config.ignore_operation_servers = true config.host = '127.0.0.1:4010' end diff --git a/spec/unit/api/multi_channel_api_spec.rb b/spec/unit/api/multi_channel_api_spec.rb index 885ee414..bf738e52 100644 --- a/spec/unit/api/multi_channel_api_spec.rb +++ b/spec/unit/api/multi_channel_api_spec.rb @@ -3,8 +3,7 @@ before(:all) do Bandwidth.configure do |config| config.debugging = true - config.username = BW_USERNAME - config.password = BW_PASSWORD + config.access_token = 'abcd1234' config.ignore_operation_servers = true config.host = '127.0.0.1:4010' end diff --git a/spec/unit/api/phone_number_lookup_api_spec.rb b/spec/unit/api/phone_number_lookup_api_spec.rb index ae835397..c1ff3007 100644 --- a/spec/unit/api/phone_number_lookup_api_spec.rb +++ b/spec/unit/api/phone_number_lookup_api_spec.rb @@ -7,8 +7,7 @@ before(:all) do Bandwidth.configure do |config| config.debugging = true - config.username = BW_USERNAME - config.password = BW_PASSWORD + config.access_token = 'abcd1234' config.ignore_operation_servers = true config.host = '127.0.0.1:4010' end diff --git a/spec/unit/api/recordings_api_spec.rb b/spec/unit/api/recordings_api_spec.rb index aeb68e85..b2133355 100644 --- a/spec/unit/api/recordings_api_spec.rb +++ b/spec/unit/api/recordings_api_spec.rb @@ -6,8 +6,7 @@ before(:all) do Bandwidth.configure do |config| config.debugging = true - config.username = BW_USERNAME - config.password = BW_PASSWORD + config.access_token = 'abcd1234' config.return_binary_data = true config.ignore_operation_servers = true config.host = '127.0.0.1:4010' diff --git a/spec/unit/api/statistics_api_spec.rb b/spec/unit/api/statistics_api_spec.rb index c4eaeb9a..2358ac83 100644 --- a/spec/unit/api/statistics_api_spec.rb +++ b/spec/unit/api/statistics_api_spec.rb @@ -3,8 +3,7 @@ before(:all) do Bandwidth.configure do |config| config.debugging = true - config.username = BW_USERNAME - config.password = BW_PASSWORD + config.access_token = 'abcd1234' config.ignore_operation_servers = true config.host = '127.0.0.1:4010' end diff --git a/spec/unit/api/toll_free_verification_api_spec.rb b/spec/unit/api/toll_free_verification_api_spec.rb index ccd80e26..34d138df 100644 --- a/spec/unit/api/toll_free_verification_api_spec.rb +++ b/spec/unit/api/toll_free_verification_api_spec.rb @@ -45,8 +45,7 @@ before(:all) do Bandwidth.configure do |config| config.debugging = true - config.username = BW_USERNAME - config.password = BW_PASSWORD + config.access_token = 'abcd1234' config.ignore_operation_servers = true config.host = '127.0.0.1:4010' end diff --git a/spec/unit/api/transcriptions_api_spec.rb b/spec/unit/api/transcriptions_api_spec.rb index 91744b62..0052257a 100644 --- a/spec/unit/api/transcriptions_api_spec.rb +++ b/spec/unit/api/transcriptions_api_spec.rb @@ -6,8 +6,7 @@ before(:all) do Bandwidth.configure do |config| config.debugging = true - config.username = BW_USERNAME - config.password = BW_PASSWORD + config.access_token = 'abcd1234' config.ignore_operation_servers = true config.host = '127.0.0.1:4010' end