Class: Signet::OAuth2::Client
- Inherits:
-
Object
- Object
- Signet::OAuth2::Client
- Includes:
- Google::Auth::BaseClient
- Defined in:
- lib/googleauth/signet.rb
Overview
Signet::OAuth2::Client creates an OAuth2 client
This reopens Client to add #apply and #apply! methods which update a hash with the fetched authentication token.
Direct Known Subclasses
Google::Auth::GCECredentials, Google::Auth::ServiceAccountCredentials, Google::Auth::UserRefreshCredentials
Constant Summary
Constants included from Google::Auth::BaseClient
Google::Auth::BaseClient::AUTH_METADATA_KEY
Instance Attribute Summary collapse
-
#universe_domain ⇒ Object
Set the universe domain.
Attributes included from Google::Auth::BaseClient
Instance Method Summary collapse
- #build_default_connection ⇒ Object
- #configure_connection(options) ⇒ Object
-
#duplicate(options = {}) ⇒ Object
Creates a duplicate of these credentials without the Signet::OAuth2::Client-specific transient state (e.g. cached tokens).
- #fetch_access_token!(options = {}) ⇒ Object
- #generate_access_token_request(options = {}) ⇒ Object
- #googleauth_orig_generate_access_token_request ⇒ Object
- #orig_fetch_access_token! ⇒ Object
-
#retry_with_error(max_retry_count = 5) { ... } ⇒ Object
Retries the provided block with exponential backoff, handling and wrapping errors.
-
#token_type ⇒ Object
The token type as symbol, either :id_token or :access_token.
- #update!(options = {}) ⇒ Object
- #update_signet_base ⇒ Object
- #update_token!(options = {}) ⇒ Object
- #update_token_signet_base ⇒ Object
Methods included from Google::Auth::BaseClient
#apply, #apply!, #expires_within?, #needs_access_token?, #notify_refresh_listeners, #on_refresh, #updater_proc
Instance Attribute Details
#universe_domain ⇒ Object
Set the universe domain
70 71 72 |
# File 'lib/googleauth/signet.rb', line 70 def universe_domain @universe_domain end |
Instance Method Details
#build_default_connection ⇒ Object
103 104 105 106 107 108 109 110 111 |
# File 'lib/googleauth/signet.rb', line 103 def build_default_connection if !defined?(@connection_info) nil elsif @connection_info.respond_to? :call @connection_info.call else @connection_info end end |
#configure_connection(options) ⇒ Object
58 59 60 61 62 |
# File 'lib/googleauth/signet.rb', line 58 def configure_connection @connection_info = [:connection_builder] || [:default_connection] self end |
#duplicate(options = {}) ⇒ Object
Creates a duplicate of these credentials without the Signet::OAuth2::Client-specific transient state (e.g. cached tokens)
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/googleauth/signet.rb', line 160 def duplicate = {} = deep_hash_normalize opts = { authorization_uri: @authorization_uri, token_credential_uri: @token_credential_uri, client_id: @client_id, client_secret: @client_secret, scope: @scope, target_audience: @target_audience, redirect_uri: @redirect_uri, username: @username, password: @password, issuer: @issuer, person: @person, sub: @sub, audience: @audience, signing_key: @signing_key, extension_parameters: @extension_parameters, additional_parameters: @additional_parameters, access_type: @access_type, universe_domain: @universe_domain, logger: @logger }.merge() new_client = self.class.new opts new_client.configure_connection end |
#fetch_access_token!(options = {}) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/googleauth/signet.rb', line 73 def fetch_access_token! = {} unless [:connection] connection = build_default_connection = .merge connection: connection if connection end info = retry_with_error do orig_fetch_access_token! end notify_refresh_listeners info end |
#generate_access_token_request(options = {}) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/googleauth/signet.rb', line 86 def generate_access_token_request = {} parameters = googleauth_orig_generate_access_token_request logger&.info do Google::Logging::Message.from( message: "Requesting access token from #{parameters['grant_type']}", "credentialsId" => object_id ) end logger&.debug do Google::Logging::Message.from( message: "Token fetch params: #{parameters}", "credentialsId" => object_id ) end parameters end |
#googleauth_orig_generate_access_token_request ⇒ Object
85 |
# File 'lib/googleauth/signet.rb', line 85 alias googleauth_orig_generate_access_token_request generate_access_token_request |
#orig_fetch_access_token! ⇒ Object
72 |
# File 'lib/googleauth/signet.rb', line 72 alias orig_fetch_access_token! fetch_access_token! |
#retry_with_error(max_retry_count = 5) { ... } ⇒ Object
Retries the provided block with exponential backoff, handling and wrapping errors.
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/googleauth/signet.rb', line 122 def retry_with_error max_retry_count = 5 retry_count = 0 begin yield.tap { |resp| log_response resp } rescue Signet::AuthorizationError, Signet::ParseError => e log_auth_error e error_class = e.is_a?(Signet::ParseError) ? Google::Auth::ParseError : Google::Auth::AuthorizationError raise error_class.with_details( e., credential_type_name: self.class.name, principal: respond_to?(:principal) ? principal : :signet_client ) rescue StandardError => e if retry_count < max_retry_count log_transient_error e retry_count += 1 sleep retry_count * 0.3 retry else log_retries_exhausted e msg = "Unexpected error: #{e.inspect}" raise Google::Auth::AuthorizationError.with_details( msg, credential_type_name: self.class.name, principal: respond_to?(:principal) ? principal : :signet_client ) end end end |
#token_type ⇒ Object
The token type as symbol, either :id_token or :access_token
65 66 67 |
# File 'lib/googleauth/signet.rb', line 65 def token_type target_audience ? :id_token : :access_token end |
#update!(options = {}) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/googleauth/signet.rb', line 43 def update! = {} # Normalize all keys to symbols to allow indifferent access. = deep_hash_normalize # This `update!` method "overide" adds the `@logger`` update and # the `universe_domain` update. # # The `universe_domain` is also updated in `update_token!` but is # included here for completeness self.universe_domain = [:universe_domain] if .key? :universe_domain @logger = [:logger] if .key? :logger update_signet_base end |
#update_signet_base ⇒ Object
42 |
# File 'lib/googleauth/signet.rb', line 42 alias update_signet_base update! |
#update_token!(options = {}) ⇒ Object
33 34 35 36 37 38 39 40 |
# File 'lib/googleauth/signet.rb', line 33 def update_token! = {} = deep_hash_normalize id_token_expires_at = expires_at_from_id_token [:id_token] [:expires_at] = id_token_expires_at if id_token_expires_at update_token_signet_base self.universe_domain = [:universe_domain] if .key? :universe_domain self end |
#update_token_signet_base ⇒ Object
31 |
# File 'lib/googleauth/signet.rb', line 31 alias update_token_signet_base update_token! |