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