signet 0.2.2 → 0.2.3
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 +5 -0
- data/lib/signet.rb +1 -2
- data/lib/signet/oauth_1/client.rb +0 -1
- data/lib/signet/oauth_2/client.rb +73 -13
- data/lib/signet/version.rb +1 -1
- data/tasks/gem.rake +16 -0
- metadata +31 -17
data/CHANGELOG
CHANGED
data/lib/signet.rb
CHANGED
@@ -42,8 +42,7 @@ module Signet #:nodoc:
|
|
42
42
|
raise ParseError,
|
43
43
|
"Unexpected auth param format: '#{auth_param_string}'."
|
44
44
|
end
|
45
|
-
|
46
|
-
auth_param_pairs << pair
|
45
|
+
auth_param_pairs << match.captures[0] # Appending pair
|
47
46
|
remainder = match.post_match
|
48
47
|
last_match = match
|
49
48
|
end
|
@@ -17,6 +17,7 @@ require 'addressable/uri'
|
|
17
17
|
require 'signet'
|
18
18
|
require 'signet/errors'
|
19
19
|
require 'signet/oauth_2'
|
20
|
+
require 'jwt'
|
20
21
|
|
21
22
|
module Signet
|
22
23
|
module OAuth2
|
@@ -61,6 +62,8 @@ module Signet
|
|
61
62
|
# to be refreshed.
|
62
63
|
# - <code>:access_token</code> —
|
63
64
|
# The current access token for this client.
|
65
|
+
# - <code>:id_token</code> —
|
66
|
+
# The current ID token for this client.
|
64
67
|
#
|
65
68
|
# @example
|
66
69
|
# client = Signet::OAuth2::Client.new(
|
@@ -119,6 +122,8 @@ module Signet
|
|
119
122
|
# to be refreshed.
|
120
123
|
# - <code>:access_token</code> —
|
121
124
|
# The current access token for this client.
|
125
|
+
# - <code>:id_token</code> —
|
126
|
+
# The current ID token for this client.
|
122
127
|
# - <code>:expires_in</code> —
|
123
128
|
# The current access token for this client.
|
124
129
|
#
|
@@ -163,8 +168,12 @@ module Signet
|
|
163
168
|
# to be refreshed.
|
164
169
|
# - <code>:access_token</code> —
|
165
170
|
# The current access token for this client.
|
171
|
+
# - <code>:id_token</code> —
|
172
|
+
# The current ID token for this client.
|
166
173
|
# - <code>:expires_in</code> —
|
167
174
|
# The current access token for this client.
|
175
|
+
# - <code>:issued_at</code> —
|
176
|
+
# The timestamp that the token was issued at.
|
168
177
|
#
|
169
178
|
# @example
|
170
179
|
# client.update!(
|
@@ -181,9 +190,26 @@ module Signet
|
|
181
190
|
accu[key.to_s] = value
|
182
191
|
accu
|
183
192
|
end
|
184
|
-
|
185
|
-
self.access_token = options["access_token"]
|
186
|
-
self.expires_in = options["expires_in"]
|
193
|
+
|
194
|
+
self.access_token = options["access_token"] if options["access_token"]
|
195
|
+
self.expires_in = options["expires_in"] if options["expires_in"]
|
196
|
+
|
197
|
+
# The refresh token may not be returned in a token response.
|
198
|
+
# In which case, the old one should continue to be used.
|
199
|
+
if options["refresh_token"]
|
200
|
+
self.refresh_token = options["refresh_token"]
|
201
|
+
end
|
202
|
+
# The ID token may not be returned in a token response.
|
203
|
+
# In which case, the old one should continue to be used.
|
204
|
+
if options["id_token"]
|
205
|
+
self.id_token = options["id_token"]
|
206
|
+
end
|
207
|
+
# By default, the token is issued at `Time.now` when `expires_in` is
|
208
|
+
# set, but this can be used to supply a more precise time.
|
209
|
+
if options["issued_at"]
|
210
|
+
self.issued_at = options["issued_at"]
|
211
|
+
end
|
212
|
+
|
187
213
|
return self
|
188
214
|
end
|
189
215
|
|
@@ -473,7 +499,7 @@ module Signet
|
|
473
499
|
#
|
474
500
|
# @return [String] The refresh token.
|
475
501
|
def refresh_token
|
476
|
-
return @refresh_token
|
502
|
+
return @refresh_token ||= nil
|
477
503
|
end
|
478
504
|
|
479
505
|
##
|
@@ -490,7 +516,7 @@ module Signet
|
|
490
516
|
#
|
491
517
|
# @return [String] The access token.
|
492
518
|
def access_token
|
493
|
-
return @access_token
|
519
|
+
return @access_token ||= nil
|
494
520
|
end
|
495
521
|
|
496
522
|
##
|
@@ -502,6 +528,35 @@ module Signet
|
|
502
528
|
@access_token = new_access_token
|
503
529
|
end
|
504
530
|
|
531
|
+
##
|
532
|
+
# Returns the ID token associated with this client.
|
533
|
+
#
|
534
|
+
# @return [String] The ID token.
|
535
|
+
def id_token
|
536
|
+
return @id_token ||= nil
|
537
|
+
end
|
538
|
+
|
539
|
+
##
|
540
|
+
# Sets the ID token associated with this client.
|
541
|
+
#
|
542
|
+
# @param [String] new_id_token
|
543
|
+
# The ID token.
|
544
|
+
def id_token=(new_id_token)
|
545
|
+
@id_token = new_id_token
|
546
|
+
end
|
547
|
+
|
548
|
+
##
|
549
|
+
# Returns the decoded ID token associated with this client.
|
550
|
+
#
|
551
|
+
# @param [OpenSSL::PKey::RSA, Object] public_key
|
552
|
+
# The public key to use to verify the ID token. Skips verification if
|
553
|
+
# omitted.
|
554
|
+
#
|
555
|
+
# @return [String] The decoded ID token.
|
556
|
+
def decoded_id_token(public_key=nil)
|
557
|
+
JWT.decode(self.id_token, public_key, !!public_key)
|
558
|
+
end
|
559
|
+
|
505
560
|
##
|
506
561
|
# Returns the lifetime of the access token in seconds.
|
507
562
|
#
|
@@ -517,8 +572,12 @@ module Signet
|
|
517
572
|
# @param [String] new_expires_in
|
518
573
|
# The access token lifetime.
|
519
574
|
def expires_in=(new_expires_in)
|
520
|
-
|
521
|
-
|
575
|
+
if new_expires_in != nil
|
576
|
+
@expires_in = new_expires_in.to_i
|
577
|
+
@issued_at = Time.now
|
578
|
+
else
|
579
|
+
@expires_in, @issued_at = nil, nil
|
580
|
+
end
|
522
581
|
end
|
523
582
|
|
524
583
|
##
|
@@ -556,7 +615,7 @@ module Signet
|
|
556
615
|
# @return [TrueClass, FalseClass]
|
557
616
|
# The expiration state of the access token.
|
558
617
|
def expired?
|
559
|
-
return Time.now >= self.expires_at
|
618
|
+
return self.expires_at == nil || Time.now >= self.expires_at
|
560
619
|
end
|
561
620
|
|
562
621
|
##
|
@@ -601,11 +660,6 @@ module Signet
|
|
601
660
|
if self.client_secret == nil
|
602
661
|
raise ArgumentError, 'Missing client secret.'
|
603
662
|
end
|
604
|
-
if self.redirect_uri && !self.code
|
605
|
-
# Grant type can be assumed to be `authorization_code` because of
|
606
|
-
# the presence of the redirect URI.
|
607
|
-
raise ArgumentError, 'Missing authorization code.'
|
608
|
-
end
|
609
663
|
method = 'POST'
|
610
664
|
parameters = {"grant_type" => self.grant_type}
|
611
665
|
case self.grant_type
|
@@ -620,6 +674,12 @@ module Signet
|
|
620
674
|
parameters['assertion'] = self.assertion
|
621
675
|
when 'refresh_token'
|
622
676
|
parameters['refresh_token'] = self.refresh_token
|
677
|
+
else
|
678
|
+
if self.redirect_uri
|
679
|
+
# Grant type was intended to be `authorization_code` because of
|
680
|
+
# the presence of the redirect URI.
|
681
|
+
raise ArgumentError, 'Missing authorization code.'
|
682
|
+
end
|
623
683
|
end
|
624
684
|
parameters['client_id'] = self.client_id
|
625
685
|
parameters['client_secret'] = self.client_secret
|
data/lib/signet/version.rb
CHANGED
data/tasks/gem.rake
CHANGED
@@ -25,6 +25,7 @@ namespace :gem do
|
|
25
25
|
s.add_runtime_dependency("httpadapter", "~> 1.0.0")
|
26
26
|
s.add_runtime_dependency("addressable", "~> 2.2.1")
|
27
27
|
s.add_runtime_dependency("json", ">= 1.4.6")
|
28
|
+
s.add_runtime_dependency("jwt", ">= 0.1.4")
|
28
29
|
|
29
30
|
s.add_development_dependency("rake", "~> 0.8.3")
|
30
31
|
s.add_development_dependency("rspec", "~> 1.1.11")
|
@@ -41,6 +42,21 @@ namespace :gem do
|
|
41
42
|
p.need_zip = true
|
42
43
|
end
|
43
44
|
|
45
|
+
desc "Generates .gemspec file"
|
46
|
+
task :gemspec do
|
47
|
+
spec_string = GEM_SPEC.to_ruby
|
48
|
+
|
49
|
+
begin
|
50
|
+
Thread.new { eval("$SAFE = 3\n#{spec_string}", binding) }.join
|
51
|
+
rescue
|
52
|
+
abort "unsafe gemspec: #{$!}"
|
53
|
+
else
|
54
|
+
File.open("#{GEM_SPEC.name}.gemspec", 'w') do |file|
|
55
|
+
file.write spec_string
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
44
60
|
desc "Show information about the gem"
|
45
61
|
task :debug do
|
46
62
|
puts GEM_SPEC.to_ruby
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: signet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 3
|
10
|
+
version: 0.2.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Bob Aman
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-11-15 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: httpadapter
|
@@ -67,9 +66,25 @@ dependencies:
|
|
67
66
|
type: :runtime
|
68
67
|
version_requirements: *id003
|
69
68
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
69
|
+
name: jwt
|
71
70
|
prerelease: false
|
72
71
|
requirement: &id004 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
hash: 19
|
77
|
+
segments:
|
78
|
+
- 0
|
79
|
+
- 1
|
80
|
+
- 4
|
81
|
+
version: 0.1.4
|
82
|
+
type: :runtime
|
83
|
+
version_requirements: *id004
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: rake
|
86
|
+
prerelease: false
|
87
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
73
88
|
none: false
|
74
89
|
requirements:
|
75
90
|
- - ~>
|
@@ -81,11 +96,11 @@ dependencies:
|
|
81
96
|
- 3
|
82
97
|
version: 0.8.3
|
83
98
|
type: :development
|
84
|
-
version_requirements: *
|
99
|
+
version_requirements: *id005
|
85
100
|
- !ruby/object:Gem::Dependency
|
86
101
|
name: rspec
|
87
102
|
prerelease: false
|
88
|
-
requirement: &
|
103
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
89
104
|
none: false
|
90
105
|
requirements:
|
91
106
|
- - ~>
|
@@ -97,11 +112,11 @@ dependencies:
|
|
97
112
|
- 11
|
98
113
|
version: 1.1.11
|
99
114
|
type: :development
|
100
|
-
version_requirements: *
|
115
|
+
version_requirements: *id006
|
101
116
|
- !ruby/object:Gem::Dependency
|
102
117
|
name: launchy
|
103
118
|
prerelease: false
|
104
|
-
requirement: &
|
119
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
105
120
|
none: false
|
106
121
|
requirements:
|
107
122
|
- - ~>
|
@@ -113,11 +128,11 @@ dependencies:
|
|
113
128
|
- 2
|
114
129
|
version: 0.3.2
|
115
130
|
type: :development
|
116
|
-
version_requirements: *
|
131
|
+
version_requirements: *id007
|
117
132
|
- !ruby/object:Gem::Dependency
|
118
133
|
name: diff-lcs
|
119
134
|
prerelease: false
|
120
|
-
requirement: &
|
135
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
121
136
|
none: false
|
122
137
|
requirements:
|
123
138
|
- - ~>
|
@@ -129,11 +144,11 @@ dependencies:
|
|
129
144
|
- 2
|
130
145
|
version: 1.1.2
|
131
146
|
type: :development
|
132
|
-
version_requirements: *
|
147
|
+
version_requirements: *id008
|
133
148
|
- !ruby/object:Gem::Dependency
|
134
149
|
name: typhoeus
|
135
150
|
prerelease: false
|
136
|
-
requirement: &
|
151
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
137
152
|
none: false
|
138
153
|
requirements:
|
139
154
|
- - ~>
|
@@ -145,7 +160,7 @@ dependencies:
|
|
145
160
|
- 31
|
146
161
|
version: 0.1.31
|
147
162
|
type: :development
|
148
|
-
version_requirements: *
|
163
|
+
version_requirements: *id009
|
149
164
|
description: |
|
150
165
|
Signet is an OAuth 1.0 / OAuth 2.0 implementation.
|
151
166
|
|
@@ -193,7 +208,6 @@ files:
|
|
193
208
|
- LICENSE
|
194
209
|
- Rakefile
|
195
210
|
- README.md
|
196
|
-
has_rdoc: true
|
197
211
|
homepage: http://signet.rubyforge.org/
|
198
212
|
licenses: []
|
199
213
|
|
@@ -224,7 +238,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
224
238
|
requirements: []
|
225
239
|
|
226
240
|
rubyforge_project: signet
|
227
|
-
rubygems_version: 1.
|
241
|
+
rubygems_version: 1.8.6
|
228
242
|
signing_key:
|
229
243
|
specification_version: 3
|
230
244
|
summary: Package Summary
|