googleauth 0.8.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.kokoro/build.sh +2 -34
  3. data/.kokoro/continuous/common.cfg +5 -0
  4. data/.kokoro/continuous/linux.cfg +1 -1
  5. data/.kokoro/osx.sh +2 -33
  6. data/.kokoro/presubmit/common.cfg +5 -0
  7. data/.kokoro/presubmit/linux.cfg +1 -1
  8. data/.kokoro/release.cfg +53 -0
  9. data/.kokoro/trampoline.sh +3 -23
  10. data/.kokoro/windows.sh +2 -30
  11. data/.rubocop.yml +7 -24
  12. data/CHANGELOG.md +24 -39
  13. data/Gemfile +14 -14
  14. data/README.md +21 -1
  15. data/Rakefile +84 -10
  16. data/googleauth.gemspec +23 -23
  17. data/lib/googleauth.rb +6 -6
  18. data/lib/googleauth/application_default.rb +11 -11
  19. data/lib/googleauth/client_id.rb +16 -16
  20. data/lib/googleauth/compute_engine.rb +27 -27
  21. data/lib/googleauth/credentials.rb +35 -37
  22. data/lib/googleauth/credentials_loader.rb +64 -67
  23. data/lib/googleauth/default_credentials.rb +18 -18
  24. data/lib/googleauth/iam.rb +9 -9
  25. data/lib/googleauth/json_key_reader.rb +6 -6
  26. data/lib/googleauth/scope_util.rb +11 -11
  27. data/lib/googleauth/service_account.rb +42 -42
  28. data/lib/googleauth/signet.rb +15 -17
  29. data/lib/googleauth/stores/file_token_store.rb +8 -8
  30. data/lib/googleauth/stores/redis_token_store.rb +17 -17
  31. data/lib/googleauth/token_store.rb +6 -6
  32. data/lib/googleauth/user_authorizer.rb +55 -59
  33. data/lib/googleauth/user_refresh.rb +27 -27
  34. data/lib/googleauth/version.rb +1 -1
  35. data/lib/googleauth/web_user_authorizer.rb +55 -56
  36. data/spec/googleauth/apply_auth_examples.rb +46 -46
  37. data/spec/googleauth/client_id_spec.rb +54 -54
  38. data/spec/googleauth/compute_engine_spec.rb +41 -41
  39. data/spec/googleauth/credentials_spec.rb +97 -97
  40. data/spec/googleauth/get_application_default_spec.rb +114 -114
  41. data/spec/googleauth/iam_spec.rb +25 -25
  42. data/spec/googleauth/scope_util_spec.rb +24 -24
  43. data/spec/googleauth/service_account_spec.rb +204 -194
  44. data/spec/googleauth/signet_spec.rb +37 -38
  45. data/spec/googleauth/stores/file_token_store_spec.rb +12 -12
  46. data/spec/googleauth/stores/redis_token_store_spec.rb +11 -11
  47. data/spec/googleauth/stores/store_examples.rb +16 -16
  48. data/spec/googleauth/user_authorizer_spec.rb +120 -121
  49. data/spec/googleauth/user_refresh_spec.rb +151 -146
  50. data/spec/googleauth/web_user_authorizer_spec.rb +66 -66
  51. data/spec/spec_helper.rb +19 -19
  52. metadata +4 -6
  53. data/.kokoro/common.cfg +0 -22
  54. data/.travis.yml +0 -40
@@ -27,131 +27,131 @@
27
27
  # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
28
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
29
 
30
- spec_dir = File.expand_path(File.join(File.dirname(__FILE__)))
31
- $LOAD_PATH.unshift(spec_dir)
30
+ spec_dir = File.expand_path File.join(File.dirname(__FILE__))
31
+ $LOAD_PATH.unshift spec_dir
32
32
  $LOAD_PATH.uniq!
33
33
 
34
- require 'spec_helper'
35
- require 'fakefs/safe'
36
- require 'googleauth'
34
+ require "spec_helper"
35
+ require "fakefs/safe"
36
+ require "googleauth"
37
37
 
38
38
  describe Google::Auth::ClientId do
39
- shared_examples 'it has a valid config' do
40
- it 'should include a valid id' do
41
- expect(client_id.id).to eql 'abc@example.com'
39
+ shared_examples "it has a valid config" do
40
+ it "should include a valid id" do
41
+ expect(client_id.id).to eql "abc@example.com"
42
42
  end
43
43
 
44
- it 'should include a valid secret' do
45
- expect(client_id.secret).to eql 'notasecret'
44
+ it "should include a valid secret" do
45
+ expect(client_id.secret).to eql "notasecret"
46
46
  end
47
47
  end
48
48
 
49
- shared_examples 'it can successfully load client_id' do
50
- context 'loaded from hash' do
49
+ shared_examples "it can successfully load client_id" do
50
+ context "loaded from hash" do
51
51
  let(:client_id) { Google::Auth::ClientId.from_hash config }
52
52
 
53
- it_behaves_like 'it has a valid config'
53
+ it_behaves_like "it has a valid config"
54
54
  end
55
55
 
56
- context 'loaded from file' do
57
- file_path = '/client_secrets.json'
56
+ context "loaded from file" do
57
+ file_path = "/client_secrets.json"
58
58
 
59
- let(:client_id) do
59
+ let :client_id do
60
60
  FakeFS do
61
- content = MultiJson.dump(config)
62
- File.write(file_path, content)
63
- Google::Auth::ClientId.from_file(file_path)
61
+ content = MultiJson.dump config
62
+ File.write file_path, content
63
+ Google::Auth::ClientId.from_file file_path
64
64
  end
65
65
  end
66
66
 
67
- it_behaves_like 'it has a valid config'
67
+ it_behaves_like "it has a valid config"
68
68
  end
69
69
  end
70
70
 
71
- describe 'with web config' do
72
- let(:config) do
71
+ describe "with web config" do
72
+ let :config do
73
73
  {
74
- 'web' => {
75
- 'client_id' => 'abc@example.com',
76
- 'client_secret' => 'notasecret'
74
+ "web" => {
75
+ "client_id" => "abc@example.com",
76
+ "client_secret" => "notasecret"
77
77
  }
78
78
  }
79
79
  end
80
- it_behaves_like 'it can successfully load client_id'
80
+ it_behaves_like "it can successfully load client_id"
81
81
  end
82
82
 
83
- describe 'with installed app config' do
84
- let(:config) do
83
+ describe "with installed app config" do
84
+ let :config do
85
85
  {
86
- 'installed' => {
87
- 'client_id' => 'abc@example.com',
88
- 'client_secret' => 'notasecret'
86
+ "installed" => {
87
+ "client_id" => "abc@example.com",
88
+ "client_secret" => "notasecret"
89
89
  }
90
90
  }
91
91
  end
92
- it_behaves_like 'it can successfully load client_id'
92
+ it_behaves_like "it can successfully load client_id"
93
93
  end
94
94
 
95
- context 'with missing top level property' do
96
- let(:config) do
95
+ context "with missing top level property" do
96
+ let :config do
97
97
  {
98
- 'notvalid' => {
99
- 'client_id' => 'abc@example.com',
100
- 'client_secret' => 'notasecret'
98
+ "notvalid" => {
99
+ "client_id" => "abc@example.com",
100
+ "client_secret" => "notasecret"
101
101
  }
102
102
  }
103
103
  end
104
104
 
105
- it 'should raise error' do
105
+ it "should raise error" do
106
106
  expect { Google::Auth::ClientId.from_hash config }.to raise_error(
107
107
  /Expected top level property/
108
108
  )
109
109
  end
110
110
  end
111
111
 
112
- context 'with missing client id' do
113
- let(:config) do
112
+ context "with missing client id" do
113
+ let :config do
114
114
  {
115
- 'web' => {
116
- 'client_secret' => 'notasecret'
115
+ "web" => {
116
+ "client_secret" => "notasecret"
117
117
  }
118
118
  }
119
119
  end
120
120
 
121
- it 'should raise error' do
121
+ it "should raise error" do
122
122
  expect { Google::Auth::ClientId.from_hash config }.to raise_error(
123
123
  /Client id can not be nil/
124
124
  )
125
125
  end
126
126
  end
127
127
 
128
- context 'with missing client secret' do
129
- let(:config) do
128
+ context "with missing client secret" do
129
+ let :config do
130
130
  {
131
- 'web' => {
132
- 'client_id' => 'abc@example.com'
131
+ "web" => {
132
+ "client_id" => "abc@example.com"
133
133
  }
134
134
  }
135
135
  end
136
136
 
137
- it 'should raise error' do
137
+ it "should raise error" do
138
138
  expect { Google::Auth::ClientId.from_hash config }.to raise_error(
139
139
  /Client secret can not be nil/
140
140
  )
141
141
  end
142
142
  end
143
143
 
144
- context 'with cloud sdk credentials' do
145
- let(:config) do
144
+ context "with cloud sdk credentials" do
145
+ let :config do
146
146
  {
147
- 'web' => {
148
- 'client_id' => Google::Auth::CredentialsLoader::CLOUD_SDK_CLIENT_ID,
149
- 'client_secret' => 'notasecret'
147
+ "web" => {
148
+ "client_id" => Google::Auth::CredentialsLoader::CLOUD_SDK_CLIENT_ID,
149
+ "client_secret" => "notasecret"
150
150
  }
151
151
  }
152
152
  end
153
153
 
154
- it 'should raise warning' do
154
+ it "should raise warning" do
155
155
  expect { Google::Auth::ClientId.from_hash config }.to output(
156
156
  Google::Auth::CredentialsLoader::CLOUD_SDK_CREDENTIALS_WARNING + "\n"
157
157
  ).to_stderr
@@ -27,65 +27,65 @@
27
27
  # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
28
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
29
 
30
- spec_dir = File.expand_path(File.join(File.dirname(__FILE__)))
31
- $LOAD_PATH.unshift(spec_dir)
30
+ spec_dir = File.expand_path File.join(File.dirname(__FILE__))
31
+ $LOAD_PATH.unshift spec_dir
32
32
  $LOAD_PATH.uniq!
33
33
 
34
- require 'apply_auth_examples'
35
- require 'faraday'
36
- require 'googleauth/compute_engine'
37
- require 'spec_helper'
34
+ require "apply_auth_examples"
35
+ require "faraday"
36
+ require "googleauth/compute_engine"
37
+ require "spec_helper"
38
38
 
39
39
  describe Google::Auth::GCECredentials do
40
- MD_URI = 'http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token'.freeze
40
+ MD_URI = "http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token".freeze
41
41
  GCECredentials = Google::Auth::GCECredentials
42
42
 
43
- before(:example) do
43
+ before :example do
44
44
  @client = GCECredentials.new
45
45
  end
46
46
 
47
- def make_auth_stubs(opts = {})
48
- access_token = opts[:access_token] || ''
49
- body = MultiJson.dump('access_token' => access_token,
50
- 'token_type' => 'Bearer',
51
- 'expires_in' => 3600)
47
+ def make_auth_stubs opts = {}
48
+ access_token = opts[:access_token] || ""
49
+ body = MultiJson.dump("access_token" => access_token,
50
+ "token_type" => "Bearer",
51
+ "expires_in" => 3600)
52
52
  stub_request(:get, MD_URI)
53
- .with(headers: { 'Metadata-Flavor' => 'Google' })
54
- .to_return(body: body,
55
- status: 200,
56
- headers: { 'Content-Type' => 'application/json' })
53
+ .with(headers: { "Metadata-Flavor" => "Google" })
54
+ .to_return(body: body,
55
+ status: 200,
56
+ headers: { "Content-Type" => "application/json" })
57
57
  end
58
58
 
59
- it_behaves_like 'apply/apply! are OK'
59
+ it_behaves_like "apply/apply! are OK"
60
60
 
61
- context 'metadata is unavailable' do
62
- describe '#fetch_access_token' do
63
- it 'should fail if the metadata request returns a 404' do
61
+ context "metadata is unavailable" do
62
+ describe "#fetch_access_token" do
63
+ it "should fail if the metadata request returns a 404" do
64
64
  stub = stub_request(:get, MD_URI)
65
- .to_return(status: 404,
66
- headers: { 'Metadata-Flavor' => 'Google' })
65
+ .to_return(status: 404,
66
+ headers: { "Metadata-Flavor" => "Google" })
67
67
  expect { @client.fetch_access_token! }
68
68
  .to raise_error Signet::AuthorizationError
69
69
  expect(stub).to have_been_requested
70
70
  end
71
71
 
72
- it 'should fail if the metadata request returns an unexpected code' do
72
+ it "should fail if the metadata request returns an unexpected code" do
73
73
  stub = stub_request(:get, MD_URI)
74
- .to_return(status: 503,
75
- headers: { 'Metadata-Flavor' => 'Google' })
74
+ .to_return(status: 503,
75
+ headers: { "Metadata-Flavor" => "Google" })
76
76
  expect { @client.fetch_access_token! }
77
77
  .to raise_error Signet::AuthorizationError
78
78
  expect(stub).to have_been_requested
79
79
  end
80
80
 
81
- it 'should fail with Signet::AuthorizationError if request times out' do
81
+ it "should fail with Signet::AuthorizationError if request times out" do
82
82
  allow_any_instance_of(Faraday::Connection).to receive(:get)
83
83
  .and_raise(Faraday::TimeoutError)
84
84
  expect { @client.fetch_access_token! }
85
85
  .to raise_error Signet::AuthorizationError
86
86
  end
87
87
 
88
- it 'should fail with Signet::AuthorizationError if request fails' do
88
+ it "should fail with Signet::AuthorizationError if request fails" do
89
89
  allow_any_instance_of(Faraday::Connection).to receive(:get)
90
90
  .and_raise(Faraday::ConnectionFailed, nil)
91
91
  expect { @client.fetch_access_token! }
@@ -94,27 +94,27 @@ describe Google::Auth::GCECredentials do
94
94
  end
95
95
  end
96
96
 
97
- describe '#on_gce?' do
98
- it 'should be true when Metadata-Flavor is Google' do
99
- stub = stub_request(:get, 'http://169.254.169.254')
100
- .to_return(status: 200,
101
- headers: { 'Metadata-Flavor' => 'Google' })
97
+ describe "#on_gce?" do
98
+ it "should be true when Metadata-Flavor is Google" do
99
+ stub = stub_request(:get, "http://169.254.169.254")
100
+ .to_return(status: 200,
101
+ headers: { "Metadata-Flavor" => "Google" })
102
102
  expect(GCECredentials.on_gce?({}, true)).to eq(true)
103
103
  expect(stub).to have_been_requested
104
104
  end
105
105
 
106
- it 'should be false when Metadata-Flavor is not Google' do
107
- stub = stub_request(:get, 'http://169.254.169.254')
108
- .to_return(status: 200,
109
- headers: { 'Metadata-Flavor' => 'NotGoogle' })
106
+ it "should be false when Metadata-Flavor is not Google" do
107
+ stub = stub_request(:get, "http://169.254.169.254")
108
+ .to_return(status: 200,
109
+ headers: { "Metadata-Flavor" => "NotGoogle" })
110
110
  expect(GCECredentials.on_gce?({}, true)).to eq(false)
111
111
  expect(stub).to have_been_requested
112
112
  end
113
113
 
114
- it 'should be false if the response is not 200' do
115
- stub = stub_request(:get, 'http://169.254.169.254')
116
- .to_return(status: 404,
117
- headers: { 'Metadata-Flavor' => 'NotGoogle' })
114
+ it "should be false if the response is not 200" do
115
+ stub = stub_request(:get, "http://169.254.169.254")
116
+ .to_return(status: 404,
117
+ headers: { "Metadata-Flavor" => "NotGoogle" })
118
118
  expect(GCECredentials.on_gce?({}, true)).to eq(false)
119
119
  expect(stub).to have_been_requested
120
120
  end
@@ -27,34 +27,34 @@
27
27
  # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
28
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
29
 
30
- require 'googleauth'
30
+ require "googleauth"
31
31
 
32
32
 
33
33
  # This test is testing the private class Google::Auth::Credentials. We want to
34
34
  # make sure that the passed in scope propogates to the Signet object. This means
35
35
  # testing the private API, which is generally frowned on.
36
36
  describe Google::Auth::Credentials, :private do
37
- let(:default_keyfile_hash) do
37
+ let :default_keyfile_hash do
38
38
  {
39
- 'private_key_id' => 'testabc1234567890xyz',
40
- 'private_key' => "-----BEGIN RSA PRIVATE KEY-----\nMIIBOwIBAAJBAOyi0Hy1l4Ym2m2o71Q0TF4O9E81isZEsX0bb+Bqz1SXEaSxLiXM\nUZE8wu0eEXivXuZg6QVCW/5l+f2+9UPrdNUCAwEAAQJAJkqubA/Chj3RSL92guy3\nktzeodarLyw8gF8pOmpuRGSiEo/OLTeRUMKKD1/kX4f9sxf3qDhB4e7dulXR1co/\nIQIhAPx8kMW4XTTL6lJYd2K5GrH8uBMp8qL5ya3/XHrBgw3dAiEA7+3Iw3ULTn2I\n1J34WlJ2D5fbzMzB4FAHUNEV7Ys3f1kCIQDtUahCMChrl7+H5t9QS+xrn77lRGhs\nB50pjvy95WXpgQIhAI2joW6JzTfz8fAapb+kiJ/h9Vcs1ZN3iyoRlNFb61JZAiA8\nNy5NyNrMVwtB/lfJf1dAK/p/Bwd8LZLtgM6PapRfgw==\n-----END RSA PRIVATE KEY-----\n",
41
- 'client_email' => 'credz-testabc1234567890xyz@developer.gserviceaccount.com',
42
- 'client_id' => 'credz-testabc1234567890xyz.apps.googleusercontent.com',
43
- 'type' => 'service_account',
44
- 'project_id' => 'a_project_id'
39
+ "private_key_id" => "testabc1234567890xyz",
40
+ "private_key" => "-----BEGIN RSA PRIVATE KEY-----\nMIIBOwIBAAJBAOyi0Hy1l4Ym2m2o71Q0TF4O9E81isZEsX0bb+Bqz1SXEaSxLiXM\nUZE8wu0eEXivXuZg6QVCW/5l+f2+9UPrdNUCAwEAAQJAJkqubA/Chj3RSL92guy3\nktzeodarLyw8gF8pOmpuRGSiEo/OLTeRUMKKD1/kX4f9sxf3qDhB4e7dulXR1co/\nIQIhAPx8kMW4XTTL6lJYd2K5GrH8uBMp8qL5ya3/XHrBgw3dAiEA7+3Iw3ULTn2I\n1J34WlJ2D5fbzMzB4FAHUNEV7Ys3f1kCIQDtUahCMChrl7+H5t9QS+xrn77lRGhs\nB50pjvy95WXpgQIhAI2joW6JzTfz8fAapb+kiJ/h9Vcs1ZN3iyoRlNFb61JZAiA8\nNy5NyNrMVwtB/lfJf1dAK/p/Bwd8LZLtgM6PapRfgw==\n-----END RSA PRIVATE KEY-----\n",
41
+ "client_email" => "credz-testabc1234567890xyz@developer.gserviceaccount.com",
42
+ "client_id" => "credz-testabc1234567890xyz.apps.googleusercontent.com",
43
+ "type" => "service_account",
44
+ "project_id" => "a_project_id"
45
45
  }
46
46
  end
47
47
 
48
- it 'uses a default scope' do
49
- mocked_signet = double('Signet::OAuth2::Client')
48
+ it "uses a default scope" do
49
+ mocked_signet = double "Signet::OAuth2::Client"
50
50
  allow(mocked_signet).to receive(:configure_connection).and_return(mocked_signet)
51
51
  allow(mocked_signet).to receive(:fetch_access_token!).and_return(true)
52
52
  allow(mocked_signet).to receive(:client_id)
53
53
  allow(Signet::OAuth2::Client).to receive(:new) do |options|
54
- expect(options[:token_credential_uri]).to eq('https://oauth2.googleapis.com/token')
55
- expect(options[:audience]).to eq('https://oauth2.googleapis.com/token')
54
+ expect(options[:token_credential_uri]).to eq("https://oauth2.googleapis.com/token")
55
+ expect(options[:audience]).to eq("https://oauth2.googleapis.com/token")
56
56
  expect(options[:scope]).to eq([])
57
- expect(options[:issuer]).to eq(default_keyfile_hash['client_email'])
57
+ expect(options[:issuer]).to eq(default_keyfile_hash["client_email"])
58
58
  expect(options[:signing_key]).to be_a_kind_of(OpenSSL::PKey::RSA)
59
59
 
60
60
  mocked_signet
@@ -63,49 +63,49 @@ describe Google::Auth::Credentials, :private do
63
63
  Google::Auth::Credentials.new default_keyfile_hash
64
64
  end
65
65
 
66
- it 'uses a custom scope' do
67
- mocked_signet = double('Signet::OAuth2::Client')
66
+ it "uses a custom scope" do
67
+ mocked_signet = double "Signet::OAuth2::Client"
68
68
  allow(mocked_signet).to receive(:configure_connection).and_return(mocked_signet)
69
69
  allow(mocked_signet).to receive(:fetch_access_token!).and_return(true)
70
70
  allow(mocked_signet).to receive(:client_id)
71
71
  allow(Signet::OAuth2::Client).to receive(:new) do |options|
72
- expect(options[:token_credential_uri]).to eq('https://oauth2.googleapis.com/token')
73
- expect(options[:audience]).to eq('https://oauth2.googleapis.com/token')
74
- expect(options[:scope]).to eq(['http://example.com/scope'])
75
- expect(options[:issuer]).to eq(default_keyfile_hash['client_email'])
72
+ expect(options[:token_credential_uri]).to eq("https://oauth2.googleapis.com/token")
73
+ expect(options[:audience]).to eq("https://oauth2.googleapis.com/token")
74
+ expect(options[:scope]).to eq(["http://example.com/scope"])
75
+ expect(options[:issuer]).to eq(default_keyfile_hash["client_email"])
76
76
  expect(options[:signing_key]).to be_a_kind_of(OpenSSL::PKey::RSA)
77
77
 
78
78
  mocked_signet
79
79
  end
80
80
 
81
- Google::Auth::Credentials.new default_keyfile_hash, scope: 'http://example.com/scope'
81
+ Google::Auth::Credentials.new default_keyfile_hash, scope: "http://example.com/scope"
82
82
  end
83
83
 
84
- it 'can be subclassed to pass in other env paths' do
85
- TEST_PATH_ENV_VAR = 'TEST_PATH'.freeze
86
- TEST_PATH_ENV_VAL = '/unknown/path/to/file.txt'.freeze
87
- TEST_JSON_ENV_VAR = 'TEST_JSON_VARS'.freeze
84
+ it "can be subclassed to pass in other env paths" do
85
+ TEST_PATH_ENV_VAR = "TEST_PATH".freeze
86
+ TEST_PATH_ENV_VAL = "/unknown/path/to/file.txt".freeze
87
+ TEST_JSON_ENV_VAR = "TEST_JSON_VARS".freeze
88
88
 
89
89
  ENV[TEST_PATH_ENV_VAR] = TEST_PATH_ENV_VAL
90
- ENV[TEST_JSON_ENV_VAR] = JSON.generate(default_keyfile_hash)
90
+ ENV[TEST_JSON_ENV_VAR] = JSON.generate default_keyfile_hash
91
91
 
92
92
  class TestCredentials < Google::Auth::Credentials
93
- SCOPE = 'http://example.com/scope'.freeze
93
+ SCOPE = "http://example.com/scope".freeze
94
94
  PATH_ENV_VARS = [TEST_PATH_ENV_VAR].freeze
95
95
  JSON_ENV_VARS = [TEST_JSON_ENV_VAR].freeze
96
96
  end
97
97
 
98
98
  allow(::File).to receive(:file?).with(TEST_PATH_ENV_VAL) { false }
99
99
 
100
- mocked_signet = double('Signet::OAuth2::Client')
100
+ mocked_signet = double "Signet::OAuth2::Client"
101
101
  allow(mocked_signet).to receive(:configure_connection).and_return(mocked_signet)
102
102
  allow(mocked_signet).to receive(:fetch_access_token!).and_return(true)
103
103
  allow(mocked_signet).to receive(:client_id)
104
104
  allow(Signet::OAuth2::Client).to receive(:new) do |options|
105
- expect(options[:token_credential_uri]).to eq('https://oauth2.googleapis.com/token')
106
- expect(options[:audience]).to eq('https://oauth2.googleapis.com/token')
107
- expect(options[:scope]).to eq(['http://example.com/scope'])
108
- expect(options[:issuer]).to eq(default_keyfile_hash['client_email'])
105
+ expect(options[:token_credential_uri]).to eq("https://oauth2.googleapis.com/token")
106
+ expect(options[:audience]).to eq("https://oauth2.googleapis.com/token")
107
+ expect(options[:scope]).to eq(["http://example.com/scope"])
108
+ expect(options[:issuer]).to eq(default_keyfile_hash["client_email"])
109
109
  expect(options[:signing_key]).to be_a_kind_of(OpenSSL::PKey::RSA)
110
110
 
111
111
  mocked_signet
@@ -114,32 +114,32 @@ describe Google::Auth::Credentials, :private do
114
114
  creds = TestCredentials.default
115
115
  expect(creds).to be_a_kind_of(TestCredentials)
116
116
  expect(creds.client).to eq(mocked_signet)
117
- expect(creds.project_id).to eq(default_keyfile_hash['project_id'])
117
+ expect(creds.project_id).to eq(default_keyfile_hash["project_id"])
118
118
  end
119
119
 
120
- it 'subclasses can use PATH_ENV_VARS to get keyfile path' do
120
+ it "subclasses can use PATH_ENV_VARS to get keyfile path" do
121
121
  class TestCredentials < Google::Auth::Credentials
122
- SCOPE = 'http://example.com/scope'.freeze
123
- PATH_ENV_VARS = ['PATH_ENV_DUMMY', 'PATH_ENV_TEST'].freeze
124
- JSON_ENV_VARS = ['JSON_ENV_DUMMY'].freeze
125
- DEFAULT_PATHS = ['~/default/path/to/file.txt'].freeze
122
+ SCOPE = "http://example.com/scope".freeze
123
+ PATH_ENV_VARS = %w[PATH_ENV_DUMMY PATH_ENV_TEST].freeze
124
+ JSON_ENV_VARS = ["JSON_ENV_DUMMY"].freeze
125
+ DEFAULT_PATHS = ["~/default/path/to/file.txt"].freeze
126
126
  end
127
127
 
128
- allow(::ENV).to receive(:[]).with('PATH_ENV_DUMMY') { '/fake/path/to/file.txt' }
129
- allow(::File).to receive(:file?).with('/fake/path/to/file.txt') { false }
130
- allow(::ENV).to receive(:[]).with('PATH_ENV_TEST') { '/unknown/path/to/file.txt' }
131
- allow(::File).to receive(:file?).with('/unknown/path/to/file.txt') { true }
132
- allow(::File).to receive(:read).with('/unknown/path/to/file.txt') { JSON.generate(default_keyfile_hash) }
128
+ allow(::ENV).to receive(:[]).with("PATH_ENV_DUMMY") { "/fake/path/to/file.txt" }
129
+ allow(::File).to receive(:file?).with("/fake/path/to/file.txt") { false }
130
+ allow(::ENV).to receive(:[]).with("PATH_ENV_TEST") { "/unknown/path/to/file.txt" }
131
+ allow(::File).to receive(:file?).with("/unknown/path/to/file.txt") { true }
132
+ allow(::File).to receive(:read).with("/unknown/path/to/file.txt") { JSON.generate default_keyfile_hash }
133
133
 
134
- mocked_signet = double('Signet::OAuth2::Client')
134
+ mocked_signet = double "Signet::OAuth2::Client"
135
135
  allow(mocked_signet).to receive(:configure_connection).and_return(mocked_signet)
136
136
  allow(mocked_signet).to receive(:fetch_access_token!).and_return(true)
137
137
  allow(mocked_signet).to receive(:client_id)
138
138
  allow(Signet::OAuth2::Client).to receive(:new) do |options|
139
- expect(options[:token_credential_uri]).to eq('https://oauth2.googleapis.com/token')
140
- expect(options[:audience]).to eq('https://oauth2.googleapis.com/token')
141
- expect(options[:scope]).to eq(['http://example.com/scope'])
142
- expect(options[:issuer]).to eq(default_keyfile_hash['client_email'])
139
+ expect(options[:token_credential_uri]).to eq("https://oauth2.googleapis.com/token")
140
+ expect(options[:audience]).to eq("https://oauth2.googleapis.com/token")
141
+ expect(options[:scope]).to eq(["http://example.com/scope"])
142
+ expect(options[:issuer]).to eq(default_keyfile_hash["client_email"])
143
143
  expect(options[:signing_key]).to be_a_kind_of(OpenSSL::PKey::RSA)
144
144
 
145
145
  mocked_signet
@@ -148,31 +148,31 @@ describe Google::Auth::Credentials, :private do
148
148
  creds = TestCredentials.default
149
149
  expect(creds).to be_a_kind_of(TestCredentials)
150
150
  expect(creds.client).to eq(mocked_signet)
151
- expect(creds.project_id).to eq(default_keyfile_hash['project_id'])
151
+ expect(creds.project_id).to eq(default_keyfile_hash["project_id"])
152
152
  end
153
153
 
154
- it 'subclasses can use JSON_ENV_VARS to get keyfile contents' do
154
+ it "subclasses can use JSON_ENV_VARS to get keyfile contents" do
155
155
  class TestCredentials < Google::Auth::Credentials
156
- SCOPE = 'http://example.com/scope'.freeze
157
- PATH_ENV_VARS = ['PATH_ENV_DUMMY'].freeze
158
- JSON_ENV_VARS = ['JSON_ENV_DUMMY', 'JSON_ENV_TEST'].freeze
159
- DEFAULT_PATHS = ['~/default/path/to/file.txt'].freeze
156
+ SCOPE = "http://example.com/scope".freeze
157
+ PATH_ENV_VARS = ["PATH_ENV_DUMMY"].freeze
158
+ JSON_ENV_VARS = %w[JSON_ENV_DUMMY JSON_ENV_TEST].freeze
159
+ DEFAULT_PATHS = ["~/default/path/to/file.txt"].freeze
160
160
  end
161
161
 
162
- allow(::ENV).to receive(:[]).with('PATH_ENV_DUMMY') { '/fake/path/to/file.txt' }
163
- allow(::File).to receive(:file?).with('/fake/path/to/file.txt') { false }
164
- allow(::ENV).to receive(:[]).with('JSON_ENV_DUMMY') { nil }
165
- allow(::ENV).to receive(:[]).with('JSON_ENV_TEST') { JSON.generate(default_keyfile_hash) }
162
+ allow(::ENV).to receive(:[]).with("PATH_ENV_DUMMY") { "/fake/path/to/file.txt" }
163
+ allow(::File).to receive(:file?).with("/fake/path/to/file.txt") { false }
164
+ allow(::ENV).to receive(:[]).with("JSON_ENV_DUMMY") { nil }
165
+ allow(::ENV).to receive(:[]).with("JSON_ENV_TEST") { JSON.generate default_keyfile_hash }
166
166
 
167
- mocked_signet = double('Signet::OAuth2::Client')
167
+ mocked_signet = double "Signet::OAuth2::Client"
168
168
  allow(mocked_signet).to receive(:configure_connection).and_return(mocked_signet)
169
169
  allow(mocked_signet).to receive(:fetch_access_token!).and_return(true)
170
170
  allow(mocked_signet).to receive(:client_id)
171
171
  allow(Signet::OAuth2::Client).to receive(:new) do |options|
172
- expect(options[:token_credential_uri]).to eq('https://oauth2.googleapis.com/token')
173
- expect(options[:audience]).to eq('https://oauth2.googleapis.com/token')
174
- expect(options[:scope]).to eq(['http://example.com/scope'])
175
- expect(options[:issuer]).to eq(default_keyfile_hash['client_email'])
172
+ expect(options[:token_credential_uri]).to eq("https://oauth2.googleapis.com/token")
173
+ expect(options[:audience]).to eq("https://oauth2.googleapis.com/token")
174
+ expect(options[:scope]).to eq(["http://example.com/scope"])
175
+ expect(options[:issuer]).to eq(default_keyfile_hash["client_email"])
176
176
  expect(options[:signing_key]).to be_a_kind_of(OpenSSL::PKey::RSA)
177
177
 
178
178
  mocked_signet
@@ -181,32 +181,32 @@ describe Google::Auth::Credentials, :private do
181
181
  creds = TestCredentials.default
182
182
  expect(creds).to be_a_kind_of(TestCredentials)
183
183
  expect(creds.client).to eq(mocked_signet)
184
- expect(creds.project_id).to eq(default_keyfile_hash['project_id'])
184
+ expect(creds.project_id).to eq(default_keyfile_hash["project_id"])
185
185
  end
186
186
 
187
- it 'subclasses can use DEFAULT_PATHS to get keyfile path' do
187
+ it "subclasses can use DEFAULT_PATHS to get keyfile path" do
188
188
  class TestCredentials < Google::Auth::Credentials
189
- SCOPE = 'http://example.com/scope'.freeze
190
- PATH_ENV_VARS = ['PATH_ENV_DUMMY'].freeze
191
- JSON_ENV_VARS = ['JSON_ENV_DUMMY'].freeze
192
- DEFAULT_PATHS = ['~/default/path/to/file.txt'].freeze
189
+ SCOPE = "http://example.com/scope".freeze
190
+ PATH_ENV_VARS = ["PATH_ENV_DUMMY"].freeze
191
+ JSON_ENV_VARS = ["JSON_ENV_DUMMY"].freeze
192
+ DEFAULT_PATHS = ["~/default/path/to/file.txt"].freeze
193
193
  end
194
194
 
195
- allow(::ENV).to receive(:[]).with('PATH_ENV_DUMMY') { '/fake/path/to/file.txt' }
196
- allow(::File).to receive(:file?).with('/fake/path/to/file.txt') { false }
197
- allow(::ENV).to receive(:[]).with('JSON_ENV_DUMMY') { nil }
198
- allow(::File).to receive(:file?).with('~/default/path/to/file.txt') { true }
199
- allow(::File).to receive(:read).with('~/default/path/to/file.txt') { JSON.generate(default_keyfile_hash) }
195
+ allow(::ENV).to receive(:[]).with("PATH_ENV_DUMMY") { "/fake/path/to/file.txt" }
196
+ allow(::File).to receive(:file?).with("/fake/path/to/file.txt") { false }
197
+ allow(::ENV).to receive(:[]).with("JSON_ENV_DUMMY") { nil }
198
+ allow(::File).to receive(:file?).with("~/default/path/to/file.txt") { true }
199
+ allow(::File).to receive(:read).with("~/default/path/to/file.txt") { JSON.generate default_keyfile_hash }
200
200
 
201
- mocked_signet = double('Signet::OAuth2::Client')
201
+ mocked_signet = double "Signet::OAuth2::Client"
202
202
  allow(mocked_signet).to receive(:configure_connection).and_return(mocked_signet)
203
203
  allow(mocked_signet).to receive(:fetch_access_token!).and_return(true)
204
204
  allow(mocked_signet).to receive(:client_id)
205
205
  allow(Signet::OAuth2::Client).to receive(:new) do |options|
206
- expect(options[:token_credential_uri]).to eq('https://oauth2.googleapis.com/token')
207
- expect(options[:audience]).to eq('https://oauth2.googleapis.com/token')
208
- expect(options[:scope]).to eq(['http://example.com/scope'])
209
- expect(options[:issuer]).to eq(default_keyfile_hash['client_email'])
206
+ expect(options[:token_credential_uri]).to eq("https://oauth2.googleapis.com/token")
207
+ expect(options[:audience]).to eq("https://oauth2.googleapis.com/token")
208
+ expect(options[:scope]).to eq(["http://example.com/scope"])
209
+ expect(options[:issuer]).to eq(default_keyfile_hash["client_email"])
210
210
  expect(options[:signing_key]).to be_a_kind_of(OpenSSL::PKey::RSA)
211
211
 
212
212
  mocked_signet
@@ -215,23 +215,23 @@ describe Google::Auth::Credentials, :private do
215
215
  creds = TestCredentials.default
216
216
  expect(creds).to be_a_kind_of(TestCredentials)
217
217
  expect(creds.client).to eq(mocked_signet)
218
- expect(creds.project_id).to eq(default_keyfile_hash['project_id'])
218
+ expect(creds.project_id).to eq(default_keyfile_hash["project_id"])
219
219
  end
220
220
 
221
- it 'subclasses that find no matches default to Google::Auth.get_application_default' do
221
+ it "subclasses that find no matches default to Google::Auth.get_application_default" do
222
222
  class TestCredentials < Google::Auth::Credentials
223
- SCOPE = 'http://example.com/scope'.freeze
224
- PATH_ENV_VARS = ['PATH_ENV_DUMMY'].freeze
225
- JSON_ENV_VARS = ['JSON_ENV_DUMMY'].freeze
226
- DEFAULT_PATHS = ['~/default/path/to/file.txt'].freeze
223
+ SCOPE = "http://example.com/scope".freeze
224
+ PATH_ENV_VARS = ["PATH_ENV_DUMMY"].freeze
225
+ JSON_ENV_VARS = ["JSON_ENV_DUMMY"].freeze
226
+ DEFAULT_PATHS = ["~/default/path/to/file.txt"].freeze
227
227
  end
228
228
 
229
- allow(::ENV).to receive(:[]).with('PATH_ENV_DUMMY') { '/fake/path/to/file.txt' }
230
- allow(::File).to receive(:file?).with('/fake/path/to/file.txt') { false }
231
- allow(::ENV).to receive(:[]).with('JSON_ENV_DUMMY') { nil }
232
- allow(::File).to receive(:file?).with('~/default/path/to/file.txt') { false }
229
+ allow(::ENV).to receive(:[]).with("PATH_ENV_DUMMY") { "/fake/path/to/file.txt" }
230
+ allow(::File).to receive(:file?).with("/fake/path/to/file.txt") { false }
231
+ allow(::ENV).to receive(:[]).with("JSON_ENV_DUMMY") { nil }
232
+ allow(::File).to receive(:file?).with("~/default/path/to/file.txt") { false }
233
233
 
234
- mocked_signet = double('Signet::OAuth2::Client')
234
+ mocked_signet = double "Signet::OAuth2::Client"
235
235
  allow(mocked_signet).to receive(:configure_connection).and_return(mocked_signet)
236
236
  allow(mocked_signet).to receive(:fetch_access_token!).and_return(true)
237
237
  allow(mocked_signet).to receive(:client_id)
@@ -243,10 +243,10 @@ describe Google::Auth::Credentials, :private do
243
243
  default_keyfile_hash
244
244
  end
245
245
  allow(Signet::OAuth2::Client).to receive(:new) do |options|
246
- expect(options[:token_credential_uri]).to eq('https://oauth2.googleapis.com/token')
247
- expect(options[:audience]).to eq('https://oauth2.googleapis.com/token')
248
- expect(options[:scope]).to eq(['http://example.com/scope'])
249
- expect(options[:issuer]).to eq(default_keyfile_hash['client_email'])
246
+ expect(options[:token_credential_uri]).to eq("https://oauth2.googleapis.com/token")
247
+ expect(options[:audience]).to eq("https://oauth2.googleapis.com/token")
248
+ expect(options[:scope]).to eq(["http://example.com/scope"])
249
+ expect(options[:issuer]).to eq(default_keyfile_hash["client_email"])
250
250
  expect(options[:signing_key]).to be_a_kind_of(OpenSSL::PKey::RSA)
251
251
 
252
252
  mocked_signet
@@ -255,14 +255,14 @@ describe Google::Auth::Credentials, :private do
255
255
  creds = TestCredentials.default
256
256
  expect(creds).to be_a_kind_of(TestCredentials)
257
257
  expect(creds.client).to eq(mocked_signet)
258
- expect(creds.project_id).to eq(default_keyfile_hash['project_id'])
258
+ expect(creds.project_id).to eq(default_keyfile_hash["project_id"])
259
259
  end
260
260
 
261
- it 'warns when cloud sdk credentials are used' do
262
- mocked_signet = double('Signet::OAuth2::Client')
261
+ it "warns when cloud sdk credentials are used" do
262
+ mocked_signet = double "Signet::OAuth2::Client"
263
263
  allow(mocked_signet).to receive(:configure_connection).and_return(mocked_signet)
264
264
  allow(mocked_signet).to receive(:fetch_access_token!).and_return(true)
265
- allow(Signet::OAuth2::Client).to receive(:new) do |options|
265
+ allow(Signet::OAuth2::Client).to receive(:new) do |_options|
266
266
  mocked_signet
267
267
  end
268
268
  allow(mocked_signet).to receive(:client_id).and_return(Google::Auth::CredentialsLoader::CLOUD_SDK_CLIENT_ID)