Make the scope optional

This commit is contained in:
Tim Emiola 2015-03-17 16:46:55 -07:00
parent 7a9dea37f1
commit bd97c23d9f
7 changed files with 31 additions and 19 deletions

View File

@ -52,9 +52,9 @@ END
# override CredentialsLoader#make_creds to use the class determined by # override CredentialsLoader#make_creds to use the class determined by
# loading the json. # loading the json.
def self.make_creds(scope, json_key_io) def self.make_creds(json_key_io, scope = nil)
json_key, clz = determine_creds_class(json_key_io) json_key, clz = determine_creds_class(json_key_io)
clz.new(scope, StringIO.new(MultiJson.dump(json_key))) clz.new(StringIO.new(MultiJson.dump(json_key)), scope)
end end
# Reads the input json and determines which creds class to use. # Reads the input json and determines which creds class to use.
@ -76,11 +76,11 @@ END
# at http://goo.gl/IUuyuX. # at http://goo.gl/IUuyuX.
# #
# If supplied, scope is used to create the credentials instance, when it # If supplied, scope is used to create the credentials instance, when it
# can applied. E.g, on compute engine, the scope is ignored. # can applied. E.g, on google compute engine, the scope is ignored.
# #
# @param scope [string|array] the scope(s) to access # @param scope [string|array|nil] the scope(s) to access
# @param options [hash] allows override of the connection being used # @param options [hash] allows override of the connection being used
def get_application_default(scope, options = {}) def get_application_default(scope = nil, options = {})
creds = DefaultCredentials.from_env(scope) creds = DefaultCredentials.from_env(scope)
return creds unless creds.nil? return creds unless creds.nil?
creds = DefaultCredentials.from_well_known_path(scope) creds = DefaultCredentials.from_well_known_path(scope)

View File

@ -61,13 +61,13 @@ module Google
# Creates an instance from the path specified in an environment # Creates an instance from the path specified in an environment
# variable. # variable.
# #
# @param scope [string|array] the scope(s) to access # @param scope [string|array|nil] the scope(s) to access
def from_env(scope) def from_env(scope = nil)
return nil unless ENV.key?(ENV_VAR) return nil unless ENV.key?(ENV_VAR)
path = ENV[ENV_VAR] path = ENV[ENV_VAR]
fail 'file #{path} does not exist' unless File.exist?(path) fail 'file #{path} does not exist' unless File.exist?(path)
File.open(path) do |f| File.open(path) do |f|
return make_creds(scope, f) return make_creds(f, scope)
end end
rescue StandardError => e rescue StandardError => e
raise "#{NOT_FOUND_ERROR}: #{e}" raise "#{NOT_FOUND_ERROR}: #{e}"
@ -75,15 +75,15 @@ module Google
# Creates an instance from a well known path. # Creates an instance from a well known path.
# #
# @param scope [string|array] the scope(s) to access # @param scope [string|array|nil] the scope(s) to access
def from_well_known_path(scope) def from_well_known_path(scope = nil)
home_var, base = windows? ? 'APPDATA' : 'HOME', WELL_KNOWN_PATH home_var, base = windows? ? 'APPDATA' : 'HOME', WELL_KNOWN_PATH
root = ENV[home_var].nil? ? '' : ENV[home_var] root = ENV[home_var].nil? ? '' : ENV[home_var]
base = File.join('.config', base) unless windows? base = File.join('.config', base) unless windows?
path = File.join(root, base) path = File.join(root, base)
return nil unless File.exist?(path) return nil unless File.exist?(path)
File.open(path) do |f| File.open(path) do |f|
return make_creds(scope, f) return make_creds(f, scope)
end end
rescue StandardError => e rescue StandardError => e
raise "#{WELL_KNOWN_ERROR}: #{e}" raise "#{WELL_KNOWN_ERROR}: #{e}"

View File

@ -57,9 +57,9 @@ module Google
# Initializes a ServiceAccountCredentials. # Initializes a ServiceAccountCredentials.
# #
# @param scope [string|array] the scope(s) to access
# @param json_key_io [IO] an IO from which the JSON key can be read # @param json_key_io [IO] an IO from which the JSON key can be read
def initialize(scope, json_key_io) # @param scope [string|array|nil] the scope(s) to access
def initialize(json_key_io, scope = nil)
private_key, client_email = self.class.read_json_key(json_key_io) private_key, client_email = self.class.read_json_key(json_key_io)
super(token_credential_uri: TOKEN_CRED_URI, super(token_credential_uri: TOKEN_CRED_URI,
audience: TOKEN_CRED_URI, audience: TOKEN_CRED_URI,

View File

@ -61,9 +61,9 @@ module Google
# Initializes a UserRefreshCredentials. # Initializes a UserRefreshCredentials.
# #
# @param scope [string|array] the scope(s) to access
# @param json_key_io [IO] an IO from which the JSON key can be read # @param json_key_io [IO] an IO from which the JSON key can be read
def initialize(scope, json_key_io) # @param scope [string|array|nil] the scope(s) to access
def initialize(json_key_io, scope = nil)
user_creds = self.class.read_json_key(json_key_io) user_creds = self.class.read_json_key(json_key_io)
super(token_credential_uri: TOKEN_CRED_URI, super(token_credential_uri: TOKEN_CRED_URI,
client_id: user_creds['client_id'], client_id: user_creds['client_id'],

View File

@ -104,6 +104,18 @@ describe '#get_application_default' do
end end
end end
it 'succeeds with default file without a scope' do
ENV.delete(@var_name) unless ENV[@var_name].nil?
Dir.mktmpdir do |dir|
key_path = File.join(dir, '.config',
CredentialsLoader::WELL_KNOWN_PATH)
FileUtils.mkdir_p(File.dirname(key_path))
File.write(key_path, cred_json_text)
ENV['HOME'] = dir
expect(Google::Auth.get_application_default).to_not be_nil
end
end
it 'succeeds without default file or env if on compute engine' do it 'succeeds without default file or env if on compute engine' do
stubs = Faraday::Adapter::Test::Stubs.new do |stub| stubs = Faraday::Adapter::Test::Stubs.new do |stub|
stub.get('/') do |_env| stub.get('/') do |_env|

View File

@ -47,8 +47,8 @@ describe Google::Auth::ServiceAccountCredentials do
before(:example) do before(:example) do
@key = OpenSSL::PKey::RSA.new(2048) @key = OpenSSL::PKey::RSA.new(2048)
@client = ServiceAccountCredentials.new( @client = ServiceAccountCredentials.new(
'https://www.googleapis.com/auth/userinfo.profile', StringIO.new(cred_json_text),
StringIO.new(cred_json_text)) 'https://www.googleapis.com/auth/userinfo.profile')
end end
def make_auth_stubs(opts = {}) def make_auth_stubs(opts = {})

View File

@ -47,8 +47,8 @@ describe Google::Auth::UserRefreshCredentials do
before(:example) do before(:example) do
@key = OpenSSL::PKey::RSA.new(2048) @key = OpenSSL::PKey::RSA.new(2048)
@client = UserRefreshCredentials.new( @client = UserRefreshCredentials.new(
'https://www.googleapis.com/auth/userinfo.profile', StringIO.new(cred_json_text),
StringIO.new(cred_json_text)) 'https://www.googleapis.com/auth/userinfo.profile')
end end
def make_auth_stubs(opts = {}) def make_auth_stubs(opts = {})