google-api 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +5 -1
- data/google-api.gemspec +1 -1
- data/lib/google-api/active_record_inclusions.rb +4 -4
- data/lib/google-api/encrypter.rb +26 -0
- data/lib/google-api.rb +1 -8
- data/spec/google-api/encrypter_spec.rb +29 -0
- data/spec/google-api_spec.rb +0 -28
- metadata +7 -4
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
## v0.0
|
1
|
+
## v0.2.0 (2012-11-24)
|
2
|
+
|
3
|
+
* Rewrite token encryption to use OpenSSL's Cipher. (NOTE: This is a non-backward compatible change!)
|
4
|
+
|
5
|
+
## v0.1.0 (2012-11-14)
|
2
6
|
|
3
7
|
* Generalize #update_oauth! method for an oauthable ActiveRecord object. See active_record_inclusions.rb for more.
|
4
8
|
|
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.
|
14
|
+
gem.version = "0.2.0"
|
15
15
|
|
16
16
|
gem.add_runtime_dependency 'mime-types', '~> 1.0'
|
17
17
|
gem.add_runtime_dependency 'oauth2', '~> 0.8.0'
|
@@ -14,8 +14,8 @@ module GoogleAPI
|
|
14
14
|
def oauthable
|
15
15
|
define_method :oauth_hash do
|
16
16
|
{
|
17
|
-
access_token: GoogleAPI.decrypt!(oauth_access_token),
|
18
|
-
refresh_token: GoogleAPI.decrypt!(oauth_refresh_token),
|
17
|
+
access_token: GoogleAPI::Encrypter.decrypt!(oauth_access_token),
|
18
|
+
refresh_token: GoogleAPI::Encrypter.decrypt!(oauth_refresh_token),
|
19
19
|
expires_at: oauth_access_token_expires_at
|
20
20
|
}
|
21
21
|
end
|
@@ -25,10 +25,10 @@ module GoogleAPI
|
|
25
25
|
# that you want to update on the object can be passed as a final parameter.
|
26
26
|
define_method :update_oauth! do |access_token, refresh_token = nil, additional_attrs = {}|
|
27
27
|
attrs = {
|
28
|
-
oauth_access_token: GoogleAPI.encrypt!(access_token),
|
28
|
+
oauth_access_token: GoogleAPI::Encrypter.encrypt!(access_token),
|
29
29
|
oauth_access_token_expires_at: 59.minutes.from_now # it's actually an hour from now, but just to make sure we don't overlap at all, let's set it to 59 minutes
|
30
30
|
}.merge(additional_attrs)
|
31
|
-
attrs[:oauth_refresh_token] = GoogleAPI.encrypt!(refresh_token) if refresh_token
|
31
|
+
attrs[:oauth_refresh_token] = GoogleAPI::Encrypter.encrypt!(refresh_token) if refresh_token
|
32
32
|
update_attributes(attrs)
|
33
33
|
end
|
34
34
|
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module GoogleAPI
|
2
|
+
class Encrypter
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def encrypt!(value)
|
7
|
+
crypt(:encrypt, value)
|
8
|
+
end
|
9
|
+
|
10
|
+
def decrypt!(value)
|
11
|
+
crypt(:decrypt, value)
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
def crypt(method, value)
|
16
|
+
cipher = OpenSSL::Cipher::AES256.new(:CBC)
|
17
|
+
cipher.send(method)
|
18
|
+
cipher.key = GoogleAPI.encryption_key
|
19
|
+
result = cipher.update(value)
|
20
|
+
result << cipher.final
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
data/lib/google-api.rb
CHANGED
@@ -3,6 +3,7 @@ require 'oauth2'
|
|
3
3
|
require 'google-api/oauth2'
|
4
4
|
require 'google-api/api'
|
5
5
|
require 'google-api/client'
|
6
|
+
require 'google-api/encrypter'
|
6
7
|
if defined?(::Rails)
|
7
8
|
require 'google-api/railtie'
|
8
9
|
else
|
@@ -56,14 +57,6 @@ module GoogleAPI
|
|
56
57
|
@discovered_apis = {}
|
57
58
|
end
|
58
59
|
|
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
|
-
|
67
60
|
end
|
68
61
|
|
69
62
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GoogleAPI::Encrypter do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
GoogleAPI.configure do |config|
|
7
|
+
config.client_id = 'test id'
|
8
|
+
config.client_secret = 'test secret'
|
9
|
+
config.encryption_key = 'a really really really really really really long encryption key'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#encrypt!" do
|
14
|
+
|
15
|
+
it "should return an encrypted version of the string" do
|
16
|
+
GoogleAPI::Encrypter.encrypt!('test').should == "0\xC2\xF3y\b\xA00\xB1\x9C\xBD;\xC7s61\x8E"
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#decrypt!" do
|
22
|
+
|
23
|
+
it "should return an decrypted version of the string" do
|
24
|
+
GoogleAPI::Encrypter.decrypt!("0\xC2\xF3y\b\xA00\xB1\x9C\xBD;\xC7s61\x8E").should == 'test'
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
data/spec/google-api_spec.rb
CHANGED
@@ -116,32 +116,4 @@ describe GoogleAPI do
|
|
116
116
|
|
117
117
|
end
|
118
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
|
-
|
147
119
|
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.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
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-11-
|
12
|
+
date: 2012-11-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mime-types
|
@@ -127,6 +127,7 @@ files:
|
|
127
127
|
- lib/google-api/active_record_inclusions.rb
|
128
128
|
- lib/google-api/api.rb
|
129
129
|
- lib/google-api/client.rb
|
130
|
+
- lib/google-api/encrypter.rb
|
130
131
|
- lib/google-api/oauth2.rb
|
131
132
|
- lib/google-api/railtie.rb
|
132
133
|
- spec/fixtures/discovery_drive.json
|
@@ -136,6 +137,7 @@ files:
|
|
136
137
|
- spec/fixtures/refresh_access_token.json
|
137
138
|
- spec/google-api/api_spec.rb
|
138
139
|
- spec/google-api/client_spec.rb
|
140
|
+
- spec/google-api/encrypter_spec.rb
|
139
141
|
- spec/google-api_spec.rb
|
140
142
|
- spec/spec_helper.rb
|
141
143
|
- spec/support/faraday_stubs.rb
|
@@ -156,7 +158,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
156
158
|
version: '0'
|
157
159
|
segments:
|
158
160
|
- 0
|
159
|
-
hash:
|
161
|
+
hash: 1675511776149438759
|
160
162
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
163
|
none: false
|
162
164
|
requirements:
|
@@ -165,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
167
|
version: '0'
|
166
168
|
segments:
|
167
169
|
- 0
|
168
|
-
hash:
|
170
|
+
hash: 1675511776149438759
|
169
171
|
requirements: []
|
170
172
|
rubyforge_project:
|
171
173
|
rubygems_version: 1.8.24
|
@@ -180,6 +182,7 @@ test_files:
|
|
180
182
|
- spec/fixtures/refresh_access_token.json
|
181
183
|
- spec/google-api/api_spec.rb
|
182
184
|
- spec/google-api/client_spec.rb
|
185
|
+
- spec/google-api/encrypter_spec.rb
|
183
186
|
- spec/google-api_spec.rb
|
184
187
|
- spec/spec_helper.rb
|
185
188
|
- spec/support/faraday_stubs.rb
|