class Google::Auth::DefaultCredentials

DefaultCredentials is used to preload the credentials file, to determine which type of credentials should be loaded.

Public Class Methods

determine_creds_class(json_key_io) click to toggle source

Reads the input json and determines which creds class to use.

# File lib/googleauth/default_credentials.rb, line 77
def self.determine_creds_class json_key_io
  json_key = MultiJson.load json_key_io.read
  key = "type"
  raise "the json is missing the '#{key}' field" unless json_key.key? key
  type = json_key[key]
  case type
  when "service_account"
    [json_key, ServiceAccountCredentials]
  when "authorized_user"
    [json_key, UserRefreshCredentials]
  else
    raise "credentials type '#{type}' is not supported"
  end
end
make_creds(options = {}) click to toggle source

override CredentialsLoader#make_creds to use the class determined by loading the json.

# File lib/googleauth/default_credentials.rb, line 48
def self.make_creds options = {}
  json_key_io = options[:json_key_io]
  if json_key_io
    json_key, clz = determine_creds_class json_key_io
    warn_if_cloud_sdk_credentials json_key["client_id"]
    io = StringIO.new MultiJson.dump(json_key)
    clz.make_creds options.merge(json_key_io: io)
  else
    warn_if_cloud_sdk_credentials ENV[CredentialsLoader::CLIENT_ID_VAR]
    clz = read_creds
    clz.make_creds options
  end
end
read_creds() click to toggle source
# File lib/googleauth/default_credentials.rb, line 62
def self.read_creds
  env_var = CredentialsLoader::ACCOUNT_TYPE_VAR
  type = ENV[env_var]
  raise "#{env_var} is undefined in env" unless type
  case type
  when "service_account"
    ServiceAccountCredentials
  when "authorized_user"
    UserRefreshCredentials
  else
    raise "credentials type '#{type}' is not supported"
  end
end