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
-
#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
69 70 71 |
# File 'lib/googleauth/signet.rb', line 69 def universe_domain @universe_domain end |
Instance Method Details
#build_default_connection ⇒ Object
102 103 104 105 106 107 108 109 110 |
# File 'lib/googleauth/signet.rb', line 102 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
57 58 59 60 61 |
# File 'lib/googleauth/signet.rb', line 57 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)
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/googleauth/signet.rb', line 142 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
72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/googleauth/signet.rb', line 72 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
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/googleauth/signet.rb', line 85 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
84 |
# File 'lib/googleauth/signet.rb', line 84 alias googleauth_orig_generate_access_token_request generate_access_token_request |
#orig_fetch_access_token! ⇒ Object
71 |
# File 'lib/googleauth/signet.rb', line 71 alias orig_fetch_access_token! fetch_access_token! |
#retry_with_error(max_retry_count = 5) ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/googleauth/signet.rb', line 112 def retry_with_error max_retry_count = 5 retry_count = 0 begin yield.tap { |resp| log_response resp } rescue StandardError => e if e.is_a?(Signet::AuthorizationError) || e.is_a?(Signet::ParseError) log_auth_error e raise e end 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 Signet::AuthorizationError, msg end end end |
#token_type ⇒ Object
The token type as symbol, either :id_token or :access_token
64 65 66 |
# File 'lib/googleauth/signet.rb', line 64 def token_type target_audience ? :id_token : :access_token end |
#update!(options = {}) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/googleauth/signet.rb', line 42 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
41 |
# File 'lib/googleauth/signet.rb', line 41 alias update_signet_base update! |
#update_token!(options = {}) ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'lib/googleauth/signet.rb', line 32 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
30 |
# File 'lib/googleauth/signet.rb', line 30 alias update_token_signet_base update_token! |