Allow credentials on per-request basis
This commit is contained in:
parent
f7a4db959d
commit
a7b40becc6
|
@ -26,6 +26,7 @@ require 'google/api_client/discovery'
|
||||||
require 'google/api_client/reference'
|
require 'google/api_client/reference'
|
||||||
require 'google/api_client/result'
|
require 'google/api_client/result'
|
||||||
require 'google/api_client/media'
|
require 'google/api_client/media'
|
||||||
|
require 'google/api_client/service_account'
|
||||||
|
|
||||||
module Google
|
module Google
|
||||||
# TODO(bobaman): Document all this stuff.
|
# TODO(bobaman): Document all this stuff.
|
||||||
|
@ -540,6 +541,7 @@ module Google
|
||||||
def generate_request(options={})
|
def generate_request(options={})
|
||||||
# Note: The merge method on a Hash object will coerce an API Reference
|
# Note: The merge method on a Hash object will coerce an API Reference
|
||||||
# object into a Hash and merge with the default options.
|
# object into a Hash and merge with the default options.
|
||||||
|
|
||||||
options={
|
options={
|
||||||
:version => 'v1',
|
:version => 'v1',
|
||||||
:authorization => self.authorization,
|
:authorization => self.authorization,
|
||||||
|
@ -547,6 +549,7 @@ module Google
|
||||||
:user_ip => self.user_ip,
|
:user_ip => self.user_ip,
|
||||||
:connection => Faraday.default_connection
|
:connection => Faraday.default_connection
|
||||||
}.merge(options)
|
}.merge(options)
|
||||||
|
|
||||||
# The Reference object is going to need this to do method ID lookups.
|
# The Reference object is going to need this to do method ID lookups.
|
||||||
options[:client] = self
|
options[:client] = self
|
||||||
# The default value for the :authenticated option depends on whether an
|
# The default value for the :authenticated option depends on whether an
|
||||||
|
@ -559,7 +562,7 @@ module Google
|
||||||
reference = Google::APIClient::Reference.new(options)
|
reference = Google::APIClient::Reference.new(options)
|
||||||
request = reference.to_request
|
request = reference.to_request
|
||||||
if options[:authenticated]
|
if options[:authenticated]
|
||||||
request = self.generate_authenticated_request(
|
request = options[:authorization].generate_authenticated_request(
|
||||||
:request => request,
|
:request => request,
|
||||||
:connection => options[:connection]
|
:connection => options[:connection]
|
||||||
)
|
)
|
||||||
|
@ -573,6 +576,7 @@ module Google
|
||||||
# @param [Hash] options a customizable set of options
|
# @param [Hash] options a customizable set of options
|
||||||
#
|
#
|
||||||
# @return [Faraday::Request] The signed or otherwise authenticated request.
|
# @return [Faraday::Request] The signed or otherwise authenticated request.
|
||||||
|
# @deprecated No longer used internally
|
||||||
def generate_authenticated_request(options={})
|
def generate_authenticated_request(options={})
|
||||||
return authorization.generate_authenticated_request(options)
|
return authorization.generate_authenticated_request(options)
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,6 +21,7 @@ require 'addressable/uri'
|
||||||
require 'stringio'
|
require 'stringio'
|
||||||
require 'google/api_client/discovery'
|
require 'google/api_client/discovery'
|
||||||
|
|
||||||
|
# TODO - needs some serious cleanup
|
||||||
|
|
||||||
module Google
|
module Google
|
||||||
class APIClient
|
class APIClient
|
||||||
|
@ -35,6 +36,7 @@ module Google
|
||||||
@version = options[:version] || 'v1'
|
@version = options[:version] || 'v1'
|
||||||
|
|
||||||
self.connection = options[:connection] || Faraday.default_connection
|
self.connection = options[:connection] || Faraday.default_connection
|
||||||
|
self.authorization = options[:authorization]
|
||||||
self.api_method = options[:api_method]
|
self.api_method = options[:api_method]
|
||||||
self.parameters = options[:parameters] || {}
|
self.parameters = options[:parameters] || {}
|
||||||
# These parameters are handled differently because they're not
|
# These parameters are handled differently because they're not
|
||||||
|
@ -42,7 +44,6 @@ module Google
|
||||||
self.parameters['key'] ||= options[:key] if options[:key]
|
self.parameters['key'] ||= options[:key] if options[:key]
|
||||||
self.parameters['userIp'] ||= options[:user_ip] if options[:user_ip]
|
self.parameters['userIp'] ||= options[:user_ip] if options[:user_ip]
|
||||||
self.headers = options[:headers] || {}
|
self.headers = options[:headers] || {}
|
||||||
|
|
||||||
if options[:media]
|
if options[:media]
|
||||||
self.media = options[:media]
|
self.media = options[:media]
|
||||||
upload_type = parameters['uploadType'] || parameters['upload_type']
|
upload_type = parameters['uploadType'] || parameters['upload_type']
|
||||||
|
@ -116,6 +117,14 @@ module Google
|
||||||
@media = (media)
|
@media = (media)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def authorization
|
||||||
|
return @authorization
|
||||||
|
end
|
||||||
|
|
||||||
|
def authorization=(new_authorization)
|
||||||
|
@authorization = new_authorization
|
||||||
|
end
|
||||||
|
|
||||||
def connection
|
def connection
|
||||||
return @connection
|
return @connection
|
||||||
end
|
end
|
||||||
|
@ -257,6 +266,7 @@ module Google
|
||||||
options[:headers] = self.headers
|
options[:headers] = self.headers
|
||||||
options[:body] = self.body
|
options[:body] = self.body
|
||||||
options[:connection] = self.connection
|
options[:connection] = self.connection
|
||||||
|
options[:authorization] = self.authorization unless self.authorization.nil?
|
||||||
return options
|
return options
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -108,4 +108,34 @@ describe Google::APIClient do
|
||||||
# TODO
|
# TODO
|
||||||
it_should_behave_like 'configurable user agent'
|
it_should_behave_like 'configurable user agent'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'when executing requests' do
|
||||||
|
before do
|
||||||
|
@client.authorization = :oauth_2
|
||||||
|
@connection = Faraday.new(:url => 'https://www.googleapis.com') do |builder|
|
||||||
|
stubs = Faraday::Adapter::Test::Stubs.new do |stub|
|
||||||
|
stub.get('/test') do |env|
|
||||||
|
env[:request_headers]['Authorization'].should == 'Bearer 12345'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
builder.adapter(:test, stubs)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should use default authorization' do
|
||||||
|
@client.authorization.access_token = "12345"
|
||||||
|
@client.execute(:http_method => :get,
|
||||||
|
:uri => 'https://www.googleapis.com/test',
|
||||||
|
:connection => @connection)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should use request scoped authorization when provided' do
|
||||||
|
@client.authorization.access_token = "abcdef"
|
||||||
|
new_auth = Signet::OAuth2::Client.new(:access_token => '12345')
|
||||||
|
@client.execute(:http_method => :get,
|
||||||
|
:uri => 'https://www.googleapis.com/test',
|
||||||
|
:connection => @connection,
|
||||||
|
:authorization => new_auth)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue