google-api 0.0.1.beta → 0.0.1.rc1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## v0.0.1.rc1 (2012-09-20)
2
+
3
+ * Add OAuth2 token encryption.
4
+
1
5
  ## v0.0.1.beta (2012-09-05)
2
6
 
3
7
  * Full test suite for all classes and modules.
data/README.md CHANGED
@@ -32,7 +32,8 @@ This gem couldn't be easier to set up. Once you have a Client ID and Secret from
32
32
  ```ruby
33
33
  GoogleAPI.configure do |config|
34
34
  config.client_id = '[CLIENT ID]'
35
- config.client_secret = '[Client SECRET]'
35
+ config.client_secret = '[CLIENT SECRET]'
36
+ config.encryption_key = '[ENCRYPTION KEY]'
36
37
  end
37
38
  ```
38
39
 
@@ -65,14 +66,14 @@ user.google.drive.files.list
65
66
 
66
67
  This will fetch all files and folders in the user's Google Drive and return them in an array of hashes.
67
68
 
68
- ## What Google APIs can this gem be used for?
69
+ ## What Google APIs has this gem be tested against?
69
70
 
70
71
  * Calendar
71
72
  * Drive
72
73
 
73
- ## I need to use an API that is not yet included
74
+ ## I need to use an API that is not yet tested
74
75
 
75
- Open an issue, and we will do our best to integrate and fully test the API you need. Or, you can submit a pull request with the necessary updates!
76
+ Open an issue, and we will do our best to fully test the API you need. Or, you can submit a pull request with any necessary updates!
76
77
 
77
78
  ## Contributing
78
79
 
data/google-api.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |gem|
11
11
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
12
12
  gem.name = "google-api"
13
13
  gem.require_paths = ["lib"]
14
- gem.version = "0.0.1.beta"
14
+ gem.version = "0.0.1.rc1"
15
15
 
16
16
  gem.add_runtime_dependency 'mime-types', '~> 1.0'
17
17
  gem.add_runtime_dependency 'oauth2', '~> 0.8.0'
@@ -14,14 +14,14 @@ module GoogleAPI
14
14
  def oauthable
15
15
  define_method :oauth_hash do
16
16
  {
17
- access_token: oauth_access_token,
18
- refresh_token: oauth_refresh_token,
17
+ access_token: GoogleAPI.decrypt!(oauth_access_token),
18
+ refresh_token: GoogleAPI.decrypt!(oauth_refresh_token),
19
19
  expires_at: oauth_access_token_expires_at
20
20
  }
21
21
  end
22
22
 
23
23
  define_method :update_access_token! do |access_token|
24
- self.oauth_access_token = access_token
24
+ self.oauth_access_token = GoogleAPI.encrypt!(access_token)
25
25
  self.oauth_access_token_expires_at = 59.minutes.from_now
26
26
  self.save
27
27
  end
@@ -125,7 +125,7 @@ module GoogleAPI
125
125
  when 'query'
126
126
  query_params << "#{param}=#{options.delete(param)}" if options[param]
127
127
  end
128
- end
128
+ end if api_method['parameters']
129
129
  url += "?#{query_params.join('&')}" if query_params.length > 0
130
130
  end
131
131
 
data/lib/google-api.rb CHANGED
@@ -17,7 +17,7 @@ module GoogleAPI
17
17
  # https://github.com/sferik/twitter/blob/v3.6.0/lib/twitter/configurable.rb
18
18
  class << self
19
19
 
20
- attr_accessor :client_id, :client_secret, :development_mode, :logger
20
+ attr_accessor :client_id, :client_secret, :encryption_key, :development_mode, :logger
21
21
 
22
22
  # Configuration options:
23
23
  #
@@ -26,7 +26,7 @@ module GoogleAPI
26
26
  def configure
27
27
  yield self
28
28
 
29
- raise ArgumentError, "GoogleAPI requires both a :client_id and :client_secret configuration option to be set." unless [client_id, client_secret].all?
29
+ raise ArgumentError, "GoogleAPI requires both a :client_id and :client_secret configuration option to be set." unless [client_id, client_secret, encryption_key].all?
30
30
 
31
31
  @development_mode ||= false
32
32
  @logger ||= defined?(::Rails) ? Rails.logger : stdout_logger
@@ -56,6 +56,14 @@ module GoogleAPI
56
56
  @discovered_apis = {}
57
57
  end
58
58
 
59
+ def encrypt!(string)
60
+ Base64.encode64("#{string}#{encryption_key}")
61
+ end
62
+
63
+ def decrypt!(string)
64
+ Base64.decode64(string).sub(/#{Regexp.escape(encryption_key)}$/, '')
65
+ end
66
+
59
67
  end
60
68
 
61
69
  end
@@ -20,6 +20,7 @@ describe GoogleAPI::API do
20
20
  GoogleAPI.configure do |config|
21
21
  config.client_id = 'test id'
22
22
  config.client_secret = 'test secret'
23
+ config.encryption_key = 'encryption key'
23
24
  end
24
25
  object.authenticated = true
25
26
  end
@@ -8,6 +8,7 @@ describe GoogleAPI::Client do
8
8
  GoogleAPI.configure do |config|
9
9
  config.client_id = 'test id'
10
10
  config.client_secret = 'test secret'
11
+ config.encryption_key = 'encryption key'
11
12
  end
12
13
  object.authenticated = true
13
14
  client.client.connection = TEST_CONNECTION
@@ -9,6 +9,7 @@ describe GoogleAPI do
9
9
  GoogleAPI.configure do |config|
10
10
  config.client_id = nil
11
11
  config.client_secret = 'test secret'
12
+ config.encryption_key = 'encryption key'
12
13
  end
13
14
  }.to raise_error(ArgumentError)
14
15
  end
@@ -18,15 +19,27 @@ describe GoogleAPI do
18
19
  GoogleAPI.configure do |config|
19
20
  config.client_id = 'test id'
20
21
  config.client_secret = nil
22
+ config.encryption_key = 'encryption key'
21
23
  end
22
24
  }.to raise_error(ArgumentError)
23
25
  end
24
26
 
25
- it "should raise an error when both the CLIENT ID and SECRET are blank" do
27
+ it "should raise an error when the ENCRYPTION KEY is blank" do
28
+ expect {
29
+ GoogleAPI.configure do |config|
30
+ config.client_id = 'test id'
31
+ config.client_secret = 'test secret'
32
+ config.encryption_key = nil
33
+ end
34
+ }.to raise_error(ArgumentError)
35
+ end
36
+
37
+ it "should raise an error when CLIENT ID, CLIENT SECRET, and ENCRYPTION KEY are blank" do
26
38
  expect {
27
39
  GoogleAPI.configure do |config|
28
40
  config.client_id = nil
29
41
  config.client_secret = nil
42
+ config.encryption_key = nil
30
43
  end
31
44
  }.to raise_error(ArgumentError)
32
45
  end
@@ -35,6 +48,7 @@ describe GoogleAPI do
35
48
  GoogleAPI.configure do |config|
36
49
  config.client_id = 'test id'
37
50
  config.client_secret = 'test secret'
51
+ config.encryption_key = 'encryption key'
38
52
  end
39
53
 
40
54
  GoogleAPI.development_mode.should be_false
@@ -44,6 +58,7 @@ describe GoogleAPI do
44
58
  GoogleAPI.configure do |config|
45
59
  config.client_id = 'test id'
46
60
  config.client_secret = 'test secret'
61
+ config.encryption_key = 'encryption key'
47
62
  config.development_mode = true
48
63
  end
49
64
 
@@ -59,6 +74,7 @@ describe GoogleAPI do
59
74
  GoogleAPI.configure do |config|
60
75
  config.client_id = 'test id'
61
76
  config.client_secret = 'test secret'
77
+ config.encryption_key = 'encryption key'
62
78
  end
63
79
 
64
80
  end
@@ -69,6 +85,7 @@ describe GoogleAPI do
69
85
  GoogleAPI.configure do |config|
70
86
  config.client_id = 'test id'
71
87
  config.client_secret = 'test secret'
88
+ config.encryption_key = 'encryption key'
72
89
  end
73
90
  end
74
91
 
@@ -99,4 +116,32 @@ describe GoogleAPI do
99
116
 
100
117
  end
101
118
 
119
+ describe "#encrypt!" do
120
+
121
+ it "should return an encrypted version of the string" do
122
+ GoogleAPI.configure do |config|
123
+ config.client_id = 'test id'
124
+ config.client_secret = 'test secret'
125
+ config.encryption_key = 'encryption key'
126
+ end
127
+
128
+ GoogleAPI.encrypt!('test').should == "dGVzdGVuY3J5cHRpb24ga2V5\n"
129
+ end
130
+
131
+ end
132
+
133
+ describe "#decrypt!" do
134
+
135
+ it "should return an decrypted version of the string" do
136
+ GoogleAPI.configure do |config|
137
+ config.client_id = 'test id'
138
+ config.client_secret = 'test secret'
139
+ config.encryption_key = 'encryption key'
140
+ end
141
+
142
+ GoogleAPI.decrypt!("dGVzdGVuY3J5cHRpb24ga2V5\n").should == 'test'
143
+ end
144
+
145
+ end
146
+
102
147
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.beta
4
+ version: 0.0.1.rc1
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-06 00:00:00.000000000 Z
12
+ date: 2012-09-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mime-types
@@ -155,7 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
155
155
  version: '0'
156
156
  segments:
157
157
  - 0
158
- hash: -2769347911649466323
158
+ hash: -4437608343180398710
159
159
  required_rubygems_version: !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements: