module HTTPX::Plugins::OAuth::InstanceMethods

  1. lib/httpx/plugins/oauth.rb

Methods

Public Instance

  1. build_request
  2. oauth_auth
  3. with_access_token

Public Instance methods

build_request(*)
[show source]
    # File lib/httpx/plugins/oauth.rb
166 def build_request(*)
167   request = super
168 
169   return request if request.headers.key?("authorization")
170 
171   oauth_session = @options.oauth_session
172 
173   return request unless oauth_session && oauth_session.access_token
174 
175   request.headers["authorization"] = "Bearer #{oauth_session.access_token}"
176 
177   request
178 end
oauth_auth(**args)
[show source]
    # File lib/httpx/plugins/oauth.rb
118 def oauth_auth(**args)
119   with(oauth_session: OAuthSession.new(**args))
120 end
with_access_token()
[show source]
    # File lib/httpx/plugins/oauth.rb
122 def with_access_token
123   oauth_session = @options.oauth_session
124 
125   oauth_session.load(self)
126 
127   grant_type = oauth_session.grant_type
128 
129   headers = {}
130   form_post = {
131     "grant_type" => grant_type,
132     "scope" => Array(oauth_session.scope).join(" "),
133     "audience" => oauth_session.audience,
134   }.compact
135 
136   # auth
137   case oauth_session.token_endpoint_auth_method
138   when "client_secret_post"
139     form_post["client_id"] = oauth_session.client_id
140     form_post["client_secret"] = oauth_session.client_secret
141   when "client_secret_basic"
142     headers["authorization"] = Authentication::Basic.new(oauth_session.client_id, oauth_session.client_secret).authenticate
143   end
144 
145   case grant_type
146   when "client_credentials"
147     # do nothing
148   when "refresh_token"
149     form_post["refresh_token"] = oauth_session.refresh_token
150   end
151 
152   token_request = build_request("POST", oauth_session.token_endpoint, headers: headers, form: form_post)
153   token_request.headers.delete("authorization") unless oauth_session.token_endpoint_auth_method == "client_secret_basic"
154 
155   token_response = request(token_request)
156   token_response.raise_for_status
157 
158   payload = token_response.json
159 
160   access_token = payload["access_token"]
161   refresh_token = payload["refresh_token"]
162 
163   with(oauth_session: oauth_session.merge(access_token: access_token, refresh_token: refresh_token))
164 end