ruby-openid 2.0.3 → 2.0.4
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.
Potentially problematic release.
This version of ruby-openid might be problematic. Click here for more details.
- data/CHANGELOG +30 -49
- data/UPGRADE +1 -1
- data/lib/openid/association.rb +1 -1
- data/lib/openid/consumer.rb +1 -1
- data/lib/openid/consumer/associationmanager.rb +1 -1
- data/lib/openid/consumer/discovery.rb +2 -2
- data/lib/openid/consumer/html_parse.rb +4 -6
- data/lib/openid/consumer/idres.rb +17 -11
- data/lib/openid/cryptutil.rb +16 -4
- data/lib/openid/dh.rb +7 -3
- data/lib/openid/extensions/pape.rb +1 -1
- data/lib/openid/extensions/sreg.rb +2 -1
- data/lib/openid/fetchers.rb +7 -1
- data/lib/openid/kvpost.rb +6 -5
- data/lib/openid/protocolerror.rb +3 -1
- data/lib/openid/server.rb +1 -1
- data/lib/openid/store/filesystem.rb +2 -2
- data/lib/openid/util.rb +3 -4
- data/lib/openid/yadis/htmltokenizer.rb +5 -5
- data/lib/openid/yadis/parsehtml.rb +1 -1
- data/test/test_associationmanager.rb +1 -1
- data/test/test_checkid_request.rb +0 -3
- data/test/test_consumer.rb +1 -1
- data/test/test_cryptutil.rb +2 -0
- data/test/test_discover.rb +9 -0
- data/test/test_fetchers.rb +35 -4
- data/test/test_filters.rb +3 -3
- data/test/test_idres.rb +9 -21
- data/test/test_linkparse.rb +2 -2
- data/test/test_server.rb +1 -1
- data/test/test_sreg.rb +1 -0
- data/test/test_util.rb +1 -0
- data/test/testutil.rb +13 -2
- metadata +2 -2
data/CHANGELOG
CHANGED
@@ -1,60 +1,41 @@
|
|
1
|
-
|
2
|
-
tagged 2.0.
|
3
|
-
|
4
|
-
Fri Jan 11 11:29:57 PST 2008 cygnus@janrain.com
|
5
|
-
* Set version to 2.0.3
|
6
|
-
|
7
|
-
Thu Jan 10 15:23:31 PST 2008 Kevin Turner <kevin@janrain.com>
|
8
|
-
* UPGRADE: formatting
|
9
|
-
|
10
|
-
Thu Jan 10 15:18:17 PST 2008 Kevin Turner <kevin@janrain.com>
|
11
|
-
* Consumer.Response: documentation for identity_url and display_identifier
|
12
|
-
|
13
|
-
Too bad that rdoc doesn't automatically display this in the documentation for
|
14
|
-
SuccessResponse; you have to follow the link to the Response docs.
|
15
|
-
|
16
|
-
Tue Jan 8 16:14:56 PST 2008 Kevin Turner <kevin@janrain.com>
|
17
|
-
* examples/discover: correct namespace of DiscoveryFailure
|
1
|
+
Tue Feb 12 18:02:31 PST 2008 Kevin Turner <kevin@janrain.com>
|
2
|
+
tagged 2.0.4
|
18
3
|
|
19
|
-
|
20
|
-
*
|
4
|
+
Tue Feb 12 18:01:44 PST 2008 Kevin Turner <kevin@janrain.com>
|
5
|
+
* set version to 2.0.4
|
21
6
|
|
22
|
-
|
23
|
-
*
|
7
|
+
Tue Feb 12 17:49:53 PST 2008 Kevin Turner <kevin@janrain.com>
|
8
|
+
* HTMLTokenizer: raise OpenIDError instead of RuntimeError
|
24
9
|
|
25
|
-
|
26
|
-
*
|
10
|
+
Thu Jan 31 11:34:11 PST 2008 Kevin Turner <kevin@janrain.com>
|
11
|
+
* Consumer.IdResHandler.verify_return_to_args: include more details in exception messages.
|
27
12
|
|
28
|
-
|
29
|
-
*
|
13
|
+
Mon Jan 21 15:50:54 PST 2008 Kevin Turner <kevin@janrain.com>
|
14
|
+
* StandardFetcher.fetch: catch more exceptions to wrap in to FetchingErrors.
|
30
15
|
|
31
|
-
|
32
|
-
*
|
16
|
+
Mon Jan 21 14:23:10 PST 2008 Kevin Turner <kevin@janrain.com>
|
17
|
+
* OpenID::normalize_url: urinorm raises URI::Error, not ArgumentError.
|
33
18
|
|
34
|
-
|
35
|
-
*
|
19
|
+
Tue Jan 15 11:48:49 PST 2008 rubys@intertwingly.net
|
20
|
+
* The following set of changes gets ruby-openid to work with Ruby 1.9,
|
21
|
+
revision 15006 and REXML revision 1301. The codebase with this
|
22
|
+
patch continues to work on Ruby 1.8.6.
|
36
23
|
|
37
|
-
|
38
|
-
*
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
Mon Jan 7 17:40:45 PST 2008 Kevin Turner <kevin@janrain.com>
|
44
|
-
* Yadis: remove mkXRDTag, mkXRDSTag. These don't seem to make as much sense with REXML as they did with ElementTree.
|
45
|
-
|
46
|
-
Mon Jan 7 17:33:41 PST 2008 Kevin Turner <kevin@janrain.com>
|
47
|
-
* remove comment applicable to Python
|
24
|
+
Mon Jan 14 18:06:29 PST 2008 Kevin Turner <kevin@janrain.com>
|
25
|
+
* Consumer.complete_id_res: catch all OpenIDError instead of just DiscoveryFailure and ProtocolError. Fixes #104.
|
26
|
+
|
27
|
+
This seems to be the desired behavior.
|
28
|
+
|
29
|
+
IdResHandler.check_auth: don't bother casting an OpenIDError to another OpenIDError.
|
48
30
|
|
49
|
-
Mon Jan
|
50
|
-
*
|
31
|
+
Mon Jan 14 17:59:38 PST 2008 Kevin Turner <kevin@janrain.com>
|
32
|
+
* OpenID::ServerError: add server_url to attributes.
|
51
33
|
|
52
|
-
|
53
|
-
*
|
54
|
-
patch contributed by =masaki
|
34
|
+
Mon Jan 14 17:21:10 PST 2008 Kevin Turner <kevin@janrain.com>
|
35
|
+
* ProtocolError, ServerError: subclass OpenIDError
|
55
36
|
|
56
|
-
|
57
|
-
*
|
37
|
+
Mon Jan 14 17:20:01 PST 2008 Kevin Turner <kevin@janrain.com>
|
38
|
+
* UPGRADE: fix typo in example path
|
58
39
|
|
59
|
-
Fri
|
60
|
-
tagged 2.0.
|
40
|
+
Fri Jan 11 11:31:29 PST 2008 cygnus@janrain.com
|
41
|
+
tagged 2.0.3
|
data/UPGRADE
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
The flow is largely the same, however there are a number of significant
|
6
6
|
changes. The consumer example is helpful to look at:
|
7
|
-
examples/
|
7
|
+
examples/rails_openid/app/controllers/consumer_controller.rb
|
8
8
|
|
9
9
|
|
10
10
|
=== Stores
|
data/lib/openid/association.rb
CHANGED
@@ -223,7 +223,7 @@ module OpenID
|
|
223
223
|
self.class.check_session_type(assoc_type, session_type)
|
224
224
|
session_types = [session_type]
|
225
225
|
end
|
226
|
-
session_types
|
226
|
+
for session_type in session_types do
|
227
227
|
@allowed_types << [assoc_type, session_type]
|
228
228
|
end
|
229
229
|
end
|
data/lib/openid/consumer.rb
CHANGED
@@ -383,7 +383,7 @@ module OpenID
|
|
383
383
|
|
384
384
|
begin
|
385
385
|
idres = handle_idres(message, current_url)
|
386
|
-
rescue
|
386
|
+
rescue OpenIDError => why
|
387
387
|
return FailureResponse.new(last_requested_endpoint, why.message)
|
388
388
|
else
|
389
389
|
return SuccessResponse.new(idres.endpoint, message,
|
@@ -287,7 +287,7 @@ module OpenID
|
|
287
287
|
expires_in = self.class.extract_expires_in(assoc_response)
|
288
288
|
|
289
289
|
# OpenID 1 has funny association session behaviour.
|
290
|
-
if assoc_response.is_openid1
|
290
|
+
if assoc_response.is_openid1
|
291
291
|
session_type = get_openid1_session_type(assoc_response)
|
292
292
|
else
|
293
293
|
session_type = assoc_response.get_arg(OPENID2_NS, 'session_type',
|
@@ -284,8 +284,8 @@ module OpenID
|
|
284
284
|
# DiscoveryFailure
|
285
285
|
begin
|
286
286
|
normalized = URINorm.urinorm(url)
|
287
|
-
rescue
|
288
|
-
raise DiscoveryFailure.new(
|
287
|
+
rescue URI::Error => why
|
288
|
+
raise DiscoveryFailure.new("Error normalizing #{url}: #{why.message}", nil)
|
289
289
|
else
|
290
290
|
defragged = URI::parse(normalized)
|
291
291
|
defragged.fragment = nil
|
@@ -2,10 +2,8 @@ require "openid/yadis/htmltokenizer"
|
|
2
2
|
|
3
3
|
module OpenID
|
4
4
|
|
5
|
-
REFLAGS = Regexp::MULTILINE | Regexp::IGNORECASE | Regexp::EXTENDED
|
6
|
-
|
7
5
|
# Stuff to remove before we start looking for tags
|
8
|
-
REMOVED_RE =
|
6
|
+
REMOVED_RE = /
|
9
7
|
# Comments
|
10
8
|
<!--.*?-->
|
11
9
|
|
@@ -18,9 +16,9 @@ module OpenID
|
|
18
16
|
# make sure script is not an XML namespace
|
19
17
|
(?!:)
|
20
18
|
|
21
|
-
[^>]
|
19
|
+
[^>]*>.*?<\/script>
|
22
20
|
|
23
|
-
|
21
|
+
/mixu
|
24
22
|
|
25
23
|
def OpenID.openid_unescape(s)
|
26
24
|
s.gsub('&','&').gsub('<','<').gsub('>','>').gsub('"','"')
|
@@ -75,7 +73,7 @@ module OpenID
|
|
75
73
|
end
|
76
74
|
|
77
75
|
end
|
78
|
-
rescue
|
76
|
+
rescue Exception # just stop parsing if there's an error
|
79
77
|
end
|
80
78
|
return links
|
81
79
|
end
|
@@ -160,17 +160,28 @@ module OpenID
|
|
160
160
|
return_to_parsed_query.each_pair do |rt_key, rt_val|
|
161
161
|
msg_val = query[rt_key]
|
162
162
|
if msg_val.nil?
|
163
|
-
raise ProtocolError, "Message missing return_to argument #{rt_key}"
|
163
|
+
raise ProtocolError, "Message missing return_to argument '#{rt_key}'"
|
164
164
|
elsif msg_val != rt_val
|
165
|
-
raise ProtocolError, ("Parameter #{rt_key} value "\
|
165
|
+
raise ProtocolError, ("Parameter '#{rt_key}' value "\
|
166
166
|
"#{msg_val.inspect} does not match "\
|
167
167
|
"return_to's value #{rt_val.inspect}")
|
168
168
|
end
|
169
169
|
end
|
170
170
|
@message.get_args(BARE_NS).each_pair do |bare_key, bare_val|
|
171
|
-
|
172
|
-
|
173
|
-
|
171
|
+
rt_val = return_to_parsed_query[bare_key]
|
172
|
+
if not return_to_parsed_query.has_key? bare_key
|
173
|
+
# This may be caused by your web framework throwing extra
|
174
|
+
# entries in to your parameters hash that were not GET or
|
175
|
+
# POST parameters. For example, Rails has been known to
|
176
|
+
# add "controller" and "action" keys; another server adds
|
177
|
+
# at least a "format" key.
|
178
|
+
raise ProtocolError, ("Unexpected parameter (not on return_to): "\
|
179
|
+
"'#{bare_key}'=#{rt_val.inspect})")
|
180
|
+
end
|
181
|
+
if rt_val != bare_val
|
182
|
+
raise ProtocolError, ("Parameter '#{bare_key}' value "\
|
183
|
+
"#{bare_val.inspect} does not match "\
|
184
|
+
"return_to's value #{rt_val.inspect}")
|
174
185
|
end
|
175
186
|
end
|
176
187
|
end
|
@@ -222,12 +233,7 @@ module OpenID
|
|
222
233
|
"request: #{why.message}"
|
223
234
|
end
|
224
235
|
|
225
|
-
|
226
|
-
response = OpenID.make_kv_post(request, server_url)
|
227
|
-
rescue ServerError => why
|
228
|
-
raise ProtocolError, "Error from #{server_url} during "\
|
229
|
-
"check_authentication: #{why.message}"
|
230
|
-
end
|
236
|
+
response = OpenID.make_kv_post(request, server_url)
|
231
237
|
|
232
238
|
process_check_auth_response(response)
|
233
239
|
end
|
data/lib/openid/cryptutil.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
require "openid/util"
|
2
2
|
require "digest/sha1"
|
3
3
|
require "digest/sha2"
|
4
|
-
|
5
|
-
require "hmac
|
4
|
+
begin
|
5
|
+
require "digest/hmac"
|
6
|
+
rescue LoadError
|
7
|
+
require "hmac/sha1"
|
8
|
+
require "hmac/sha2"
|
9
|
+
end
|
6
10
|
|
7
11
|
module OpenID
|
8
12
|
# This module contains everything needed to perform low-level
|
@@ -26,7 +30,11 @@ module OpenID
|
|
26
30
|
end
|
27
31
|
|
28
32
|
def CryptUtil.hmac_sha1(key, text)
|
29
|
-
|
33
|
+
if Digest.const_defined? :HMAC
|
34
|
+
Digest::HMAC.new(key,Digest::SHA1).update(text).digest
|
35
|
+
else
|
36
|
+
return HMAC::SHA1.digest(key, text)
|
37
|
+
end
|
30
38
|
end
|
31
39
|
|
32
40
|
def CryptUtil.sha256(text)
|
@@ -34,7 +42,11 @@ module OpenID
|
|
34
42
|
end
|
35
43
|
|
36
44
|
def CryptUtil.hmac_sha256(key, text)
|
37
|
-
|
45
|
+
if Digest.const_defined? :HMAC
|
46
|
+
Digest::HMAC.new(key,Digest::SHA256).update(text).digest
|
47
|
+
else
|
48
|
+
return HMAC::SHA256.digest(key, text)
|
49
|
+
end
|
38
50
|
end
|
39
51
|
|
40
52
|
# Generate a random string of the given length, composed of the
|
data/lib/openid/dh.rb
CHANGED
@@ -56,9 +56,13 @@ module OpenID
|
|
56
56
|
"Inputs were #{s.inspect} and #{t.inspect}"
|
57
57
|
end
|
58
58
|
|
59
|
-
|
60
|
-
|
61
|
-
|
59
|
+
if String.method_defined? :bytes
|
60
|
+
s.bytes.zip(t.bytes).map{|sb,tb| sb^tb}.pack('C*')
|
61
|
+
else
|
62
|
+
indices = 0...(s.length)
|
63
|
+
chrs = indices.collect {|i| (s[i]^t[i]).chr}
|
64
|
+
chrs.join("")
|
65
|
+
end
|
62
66
|
end
|
63
67
|
|
64
68
|
# This code is taken from this post:
|
@@ -133,7 +133,7 @@ module OpenID
|
|
133
133
|
end
|
134
134
|
if nist_level and nist_level >= 0 and nist_level < 5
|
135
135
|
@nist_auth_level = nist_level
|
136
|
-
elsif strict
|
136
|
+
elsif strict
|
137
137
|
raise ArgumentError, "nist_auth_level must be an integer 0 through 4, not #{nist_level_str.inspect}"
|
138
138
|
end
|
139
139
|
end
|
@@ -194,7 +194,8 @@ module OpenID
|
|
194
194
|
|
195
195
|
# Add the given list of fields to the request.
|
196
196
|
def request_fields(field_names, required = false, strict = false)
|
197
|
-
raise ArgumentError unless field_names
|
197
|
+
raise ArgumentError unless field_names.respond_to?(:each) and
|
198
|
+
field_names[0].is_a?(String)
|
198
199
|
field_names.each{|fn|request_field(fn, required, strict)}
|
199
200
|
end
|
200
201
|
|
data/lib/openid/fetchers.rb
CHANGED
@@ -112,7 +112,7 @@ module OpenID
|
|
112
112
|
|
113
113
|
class StandardFetcher
|
114
114
|
|
115
|
-
USER_AGENT = "ruby-openid/#{OpenID::VERSION} (#{
|
115
|
+
USER_AGENT = "ruby-openid/#{OpenID::VERSION} (#{RUBY_PLATFORM})"
|
116
116
|
|
117
117
|
REDIRECT_LIMIT = 5
|
118
118
|
|
@@ -196,6 +196,12 @@ module OpenID
|
|
196
196
|
}
|
197
197
|
rescue OpenSSL::SSL::SSLError => why
|
198
198
|
raise SSLFetchingError, "Error connecting to SSL URL #{url}: #{why}"
|
199
|
+
rescue FetchingError => why
|
200
|
+
raise why
|
201
|
+
rescue Exception => why
|
202
|
+
# Things we've caught here include a Timeout::Error, which descends
|
203
|
+
# from SignalException.
|
204
|
+
raise FetchingError, "Error fetching #{url}: #{why}"
|
199
205
|
end
|
200
206
|
|
201
207
|
case response
|
data/lib/openid/kvpost.rb
CHANGED
@@ -4,21 +4,22 @@ require "openid/fetchers"
|
|
4
4
|
module OpenID
|
5
5
|
# Exception that is raised when the server returns a 400 response
|
6
6
|
# code to a direct request.
|
7
|
-
class ServerError <
|
7
|
+
class ServerError < OpenIDError
|
8
8
|
attr_reader :error_text, :error_code, :message
|
9
9
|
|
10
|
-
def initialize(error_text, error_code, message)
|
10
|
+
def initialize(error_text, error_code, message, server_url)
|
11
11
|
super(error_text)
|
12
12
|
@error_text = error_text
|
13
13
|
@error_code = error_code
|
14
|
+
@server_url = server_url
|
14
15
|
@message = message
|
15
16
|
end
|
16
17
|
|
17
|
-
def self.from_message(msg)
|
18
|
+
def self.from_message(msg, server_url)
|
18
19
|
error_text = msg.get_arg(OPENID_NS, 'error',
|
19
20
|
'<no error message supplied>')
|
20
21
|
error_code = msg.get_arg(OPENID_NS, 'error_code')
|
21
|
-
return self.new(error_text, error_code, msg)
|
22
|
+
return self.new(error_text, error_code, msg, server_url)
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
@@ -34,7 +35,7 @@ module OpenID
|
|
34
35
|
when 200
|
35
36
|
return msg
|
36
37
|
when 400
|
37
|
-
raise ServerError.from_message(msg)
|
38
|
+
raise ServerError.from_message(msg, server_url)
|
38
39
|
else
|
39
40
|
error_message = "bad status code from server #{server_url}: "\
|
40
41
|
"#{response.code}"
|
data/lib/openid/protocolerror.rb
CHANGED
data/lib/openid/server.rb
CHANGED
@@ -430,7 +430,7 @@ module OpenID
|
|
430
430
|
# mode:: +checkid_immediate+ or +checkid_setup+
|
431
431
|
attr_accessor :mode
|
432
432
|
|
433
|
-
attr_accessor :
|
433
|
+
attr_accessor :op_endpoint
|
434
434
|
|
435
435
|
# These parameters are assigned directly as attributes,
|
436
436
|
# see the #CheckIDRequest class documentation for their
|
@@ -174,7 +174,7 @@ module OpenID
|
|
174
174
|
end
|
175
175
|
|
176
176
|
def cleanup_associations
|
177
|
-
association_filenames = Dir[@association_dir.join("*")]
|
177
|
+
association_filenames = Dir[@association_dir.join("*").to_s]
|
178
178
|
count = 0
|
179
179
|
association_filenames.each do |af|
|
180
180
|
begin
|
@@ -204,7 +204,7 @@ module OpenID
|
|
204
204
|
end
|
205
205
|
|
206
206
|
def cleanup_nonces
|
207
|
-
nonces = Dir[@nonce_dir.join("*")]
|
207
|
+
nonces = Dir[@nonce_dir.join("*").to_s]
|
208
208
|
now = Time.now.to_i
|
209
209
|
|
210
210
|
count = 0
|
data/lib/openid/util.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require "base64"
|
2
1
|
require "cgi"
|
3
2
|
require "uri"
|
4
3
|
require "logger"
|
@@ -12,7 +11,7 @@ module OpenID
|
|
12
11
|
class AssertionError < Exception
|
13
12
|
end
|
14
13
|
|
15
|
-
VERSION = "2.0.
|
14
|
+
VERSION = "2.0.4"
|
16
15
|
|
17
16
|
# Exceptions that are raised by the library are subclasses of this
|
18
17
|
# exception type, so if you want to catch all exceptions raised by
|
@@ -38,7 +37,7 @@ module OpenID
|
|
38
37
|
end
|
39
38
|
|
40
39
|
def Util.to_base64(s)
|
41
|
-
|
40
|
+
[s].pack('m').gsub("\n", "")
|
42
41
|
end
|
43
42
|
|
44
43
|
def Util.from_base64(s)
|
@@ -46,7 +45,7 @@ module OpenID
|
|
46
45
|
if !BASE64_RE.match(without_newlines)
|
47
46
|
raise ArgumentError, "Malformed input: #{s.inspect}"
|
48
47
|
end
|
49
|
-
|
48
|
+
without_newlines.unpack('m').first
|
50
49
|
end
|
51
50
|
|
52
51
|
def Util.urlencode(args)
|
@@ -74,7 +74,7 @@ class HTMLTokenizer
|
|
74
74
|
# Token is a comment
|
75
75
|
tag_end = @page.index('-->', (@cur_pos + 1))
|
76
76
|
if tag_end.nil?
|
77
|
-
raise "No end found to started comment:\n#{@page[@cur_pos,80]}"
|
77
|
+
raise OpenIDError, "No end found to started comment:\n#{@page[@cur_pos,80]}"
|
78
78
|
end
|
79
79
|
# p @page[@cur_pos .. (tag_end+2)]
|
80
80
|
HTMLComment.new(@page[@cur_pos .. (tag_end + 2)])
|
@@ -82,7 +82,7 @@ class HTMLTokenizer
|
|
82
82
|
# Token is a html tag
|
83
83
|
tag_end = @page.index('>', (@cur_pos + 1))
|
84
84
|
if tag_end.nil?
|
85
|
-
raise "No end found to started tag:\n#{@page[@cur_pos,80]}"
|
85
|
+
raise OpenIDError, "No end found to started tag:\n#{@page[@cur_pos,80]}"
|
86
86
|
end
|
87
87
|
# p @page[@cur_pos .. tag_end]
|
88
88
|
HTMLTag.new(@page[@cur_pos .. tag_end])
|
@@ -209,7 +209,7 @@ class HTMLComment < HTMLToken
|
|
209
209
|
super(text)
|
210
210
|
temp_arr = text.scan(/^<!--\s*(.*?)\s*-->$/m)
|
211
211
|
if temp_arr[0].nil?
|
212
|
-
raise "Text passed to HTMLComment.initialize is not a comment"
|
212
|
+
raise OpenIDError, "Text passed to HTMLComment.initialize is not a comment"
|
213
213
|
end
|
214
214
|
|
215
215
|
@contents = temp_arr[0][0]
|
@@ -222,7 +222,7 @@ class HTMLTag < HTMLToken
|
|
222
222
|
def initialize(text)
|
223
223
|
super(text)
|
224
224
|
if ?< != text[0] or ?> != text[-1]
|
225
|
-
raise "Text passed to HTMLComment.initialize is not a comment"
|
225
|
+
raise OpenIDError, "Text passed to HTMLComment.initialize is not a comment"
|
226
226
|
end
|
227
227
|
|
228
228
|
@attr_hash = Hash.new
|
@@ -230,7 +230,7 @@ class HTMLTag < HTMLToken
|
|
230
230
|
|
231
231
|
tag_name = text.scan(/[\w:-]+/)[0]
|
232
232
|
if tag_name.nil?
|
233
|
-
raise "Error, tag is nil: #{tag_name}"
|
233
|
+
raise OpenIDError, "Error, tag is nil: #{tag_name}"
|
234
234
|
end
|
235
235
|
|
236
236
|
if ?/ == text[1]
|
@@ -15,7 +15,7 @@ module OpenID
|
|
15
15
|
return nil if ['/head', 'body', '/body'].member?(el.tag_name)
|
16
16
|
|
17
17
|
if el.tag_name == 'head'
|
18
|
-
unless el.to_s[-2] ==
|
18
|
+
unless el.to_s[-2] == ?/ # tag ends with a /: a short tag
|
19
19
|
in_head = true
|
20
20
|
end
|
21
21
|
end
|
data/test/test_consumer.rb
CHANGED
@@ -100,7 +100,7 @@ module OpenID
|
|
100
100
|
|
101
101
|
consumer = Consumer.new(@session, nil)
|
102
102
|
consumer.extend(InstanceDefExtension)
|
103
|
-
consumer.instance_def(:association_manager) do
|
103
|
+
consumer.instance_def(:association_manager) do |service|
|
104
104
|
assoc_manager
|
105
105
|
end
|
106
106
|
consumer
|
data/test/test_cryptutil.rb
CHANGED
data/test/test_discover.rb
CHANGED
@@ -777,4 +777,13 @@ module OpenID
|
|
777
777
|
assert_equal 'http://recycled.invalid/', @endpoint.display_identifier
|
778
778
|
end
|
779
779
|
end
|
780
|
+
|
781
|
+
|
782
|
+
class TestNormalizeURL < Test::Unit::TestCase
|
783
|
+
def test_no_host
|
784
|
+
assert_raise(DiscoveryFailure) {
|
785
|
+
OpenID::normalize_url('http:///too-many.invalid/slashes')
|
786
|
+
}
|
787
|
+
end
|
788
|
+
end
|
780
789
|
end
|
data/test/test_fetchers.rb
CHANGED
@@ -266,6 +266,11 @@ EOF
|
|
266
266
|
class FakeConnection < Net::HTTP
|
267
267
|
attr_reader :use_ssl, :ca_file
|
268
268
|
|
269
|
+
def initialize *args
|
270
|
+
super
|
271
|
+
@ca_file = nil
|
272
|
+
end
|
273
|
+
|
269
274
|
def use_ssl=(v)
|
270
275
|
@use_ssl = v
|
271
276
|
end
|
@@ -362,7 +367,26 @@ EOF
|
|
362
367
|
}
|
363
368
|
end
|
364
369
|
|
365
|
-
class
|
370
|
+
class TimeoutConnection
|
371
|
+
def start(&block)
|
372
|
+
raise Timeout::Error
|
373
|
+
end
|
374
|
+
end
|
375
|
+
|
376
|
+
def test_fetchingerror
|
377
|
+
f = OpenID::StandardFetcher.new
|
378
|
+
|
379
|
+
f.extend(OpenID::InstanceDefExtension)
|
380
|
+
f.instance_def(:make_connection) do |uri|
|
381
|
+
TimeoutConnection.new
|
382
|
+
end
|
383
|
+
|
384
|
+
assert_raise(OpenID::FetchingError) {
|
385
|
+
f.fetch("https://bogus.com/")
|
386
|
+
}
|
387
|
+
end
|
388
|
+
|
389
|
+
class TestingException < OpenID::FetchingError; end
|
366
390
|
|
367
391
|
class NoSSLSupportConnection
|
368
392
|
def supports_ssl?
|
@@ -420,7 +444,7 @@ EOF
|
|
420
444
|
}
|
421
445
|
end
|
422
446
|
|
423
|
-
class PostConnectionCheckException <
|
447
|
+
class PostConnectionCheckException < OpenID::FetchingError; end
|
424
448
|
|
425
449
|
class UseSSLConnection < NoSSLSupportConnection
|
426
450
|
def use_ssl?
|
@@ -473,13 +497,20 @@ end
|
|
473
497
|
|
474
498
|
class ProxyTest < Test::Unit::TestCase
|
475
499
|
def test_proxy_unreachable
|
476
|
-
|
500
|
+
begin
|
477
501
|
f = OpenID::StandardFetcher.new('127.0.0.1', 1)
|
478
502
|
# If this tries to connect to the proxy (on port 1), I expect
|
479
503
|
# a 'connection refused' error. If it tries to contact the below
|
480
504
|
# URI first, it will get some other sort of error.
|
481
505
|
f.fetch("http://unittest.invalid")
|
482
|
-
|
506
|
+
rescue OpenID::FetchingError => why
|
507
|
+
# XXX: Is this a translatable string that is going to break?
|
508
|
+
if why.message =~ /Connection refused/
|
509
|
+
return
|
510
|
+
end
|
511
|
+
raise why
|
512
|
+
end
|
513
|
+
flunk "expected Connection Refused, but it passed."
|
483
514
|
end
|
484
515
|
|
485
516
|
def test_proxy_env
|
data/test/test_filters.rb
CHANGED
@@ -84,28 +84,28 @@ module OpenID
|
|
84
84
|
|
85
85
|
def test_nil_filter
|
86
86
|
# A transform filter with a single nil filter should return nil.
|
87
|
-
endpoint = "unused"
|
88
87
|
nil_filter = Proc.new { |endpoint| nil }
|
89
88
|
t = Yadis::TransformFilterMaker.new([nil_filter])
|
89
|
+
endpoint = "unused"
|
90
90
|
assert(t.apply_filters(endpoint).nil?)
|
91
91
|
end
|
92
92
|
|
93
93
|
def test_identity_filter
|
94
94
|
# A transform filter with an identity filter should return the
|
95
95
|
# input.
|
96
|
-
endpoint = "unused"
|
97
96
|
identity_filter = Proc.new { |endpoint| endpoint }
|
98
97
|
t = Yadis::TransformFilterMaker.new([identity_filter])
|
98
|
+
endpoint = "unused"
|
99
99
|
assert(t.apply_filters(endpoint) == endpoint)
|
100
100
|
end
|
101
101
|
|
102
102
|
def test_return_different_endpoint
|
103
103
|
# Make sure the result of the filter is returned, rather than
|
104
104
|
# the input.
|
105
|
-
endpoint = "unused"
|
106
105
|
returned_endpoint = "returned endpoint"
|
107
106
|
filter = Proc.new { |endpoint| returned_endpoint }
|
108
107
|
t = Yadis::TransformFilterMaker.new([filter])
|
108
|
+
endpoint = "unused"
|
109
109
|
assert(t.apply_filters(endpoint) == returned_endpoint)
|
110
110
|
end
|
111
111
|
|
data/test/test_idres.rb
CHANGED
@@ -145,7 +145,7 @@ module OpenID
|
|
145
145
|
end
|
146
146
|
|
147
147
|
def test_unexpected_arg_okay
|
148
|
-
assert_bad_args("
|
148
|
+
assert_bad_args("Unexpected parameter", {
|
149
149
|
'openid.mode' => 'id_res',
|
150
150
|
'openid.return_to' => 'http://example.com/',
|
151
151
|
'foo' => 'bar',
|
@@ -158,7 +158,7 @@ module OpenID
|
|
158
158
|
'openid.return_to' => 'http://example.com/?foo=bar',
|
159
159
|
})
|
160
160
|
|
161
|
-
assert_bad_args(
|
161
|
+
assert_bad_args("Parameter 'foo' val", {
|
162
162
|
'openid.mode' => 'id_res',
|
163
163
|
'openid.return_to' => 'http://example.com/?foo=bar',
|
164
164
|
'foo' => 'foos',
|
@@ -314,22 +314,6 @@ module OpenID
|
|
314
314
|
}
|
315
315
|
end
|
316
316
|
|
317
|
-
def test_kv_server_error
|
318
|
-
OpenID.extend(OverrideMethodMixin)
|
319
|
-
send_error = lambda do |req, server_url|
|
320
|
-
msg = Message.new(OPENID2_NS)
|
321
|
-
raise ServerError.from_message(msg), 'For you!'
|
322
|
-
end
|
323
|
-
|
324
|
-
OpenID.with_method_overridden(:make_kv_post, send_error) do
|
325
|
-
assert_protocol_error("Error from") {
|
326
|
-
call_check_auth do |idres|
|
327
|
-
idres.instance_def(:create_check_auth_request) { nil }
|
328
|
-
end
|
329
|
-
}
|
330
|
-
end
|
331
|
-
end
|
332
|
-
|
333
317
|
def test_check_auth_okay
|
334
318
|
OpenID.extend(OverrideMethodMixin)
|
335
319
|
me = self
|
@@ -619,7 +603,9 @@ module OpenID
|
|
619
603
|
'identity' => 'sour grapes',
|
620
604
|
'claimed_id' => 'monkeysoft',
|
621
605
|
'op_endpoint' => 'Phone Home'}) do |idres|
|
622
|
-
idres.instance_def(:discover_and_verify)
|
606
|
+
idres.instance_def(:discover_and_verify) do |to_match|
|
607
|
+
@endpoint = endpoint
|
608
|
+
end
|
623
609
|
end
|
624
610
|
}
|
625
611
|
assert(endpoint.equal?(result))
|
@@ -640,7 +626,9 @@ module OpenID
|
|
640
626
|
'claimed_id' => 'monkeysoft',
|
641
627
|
'op_endpoint' => 'Green Cheese'}) do |idres|
|
642
628
|
idres.extend(InstanceDefExtension)
|
643
|
-
idres.instance_def(:discover_and_verify)
|
629
|
+
idres.instance_def(:discover_and_verify) do |to_match|
|
630
|
+
@endpoint = endpoint
|
631
|
+
end
|
644
632
|
end
|
645
633
|
}
|
646
634
|
assert(endpoint.equal?(result))
|
@@ -721,7 +709,7 @@ module OpenID
|
|
721
709
|
assert_raises(verified_error) {
|
722
710
|
call_verify_modify({'ns' => OPENID1_NS,
|
723
711
|
'identity' => @endpoint.local_id}) { |idres|
|
724
|
-
idres.instance_def(:discover_and_verify) do
|
712
|
+
idres.instance_def(:discover_and_verify) do |to_match|
|
725
713
|
raise verified_error
|
726
714
|
end
|
727
715
|
}
|
data/test/test_linkparse.rb
CHANGED
data/test/test_server.rb
CHANGED
data/test/test_sreg.rb
CHANGED
data/test/test_util.rb
CHANGED
data/test/testutil.rb
CHANGED
@@ -63,12 +63,20 @@ module OpenID
|
|
63
63
|
def with_method_overridden(method_name, proc)
|
64
64
|
original = method(method_name)
|
65
65
|
begin
|
66
|
+
# TODO: find a combination of undef calls which prevent the warning
|
67
|
+
verbose, $VERBOSE = $VERBOSE, false
|
66
68
|
define_method(method_name, proc)
|
67
69
|
module_function(method_name)
|
70
|
+
$VERBOSE = verbose
|
68
71
|
yield
|
69
72
|
ensure
|
70
|
-
|
71
|
-
|
73
|
+
if original.respond_to? :owner
|
74
|
+
original.owner.send(:undef_method, method_name)
|
75
|
+
original.owner.send :define_method, method_name, original
|
76
|
+
else
|
77
|
+
define_method(method_name, original)
|
78
|
+
module_function(method_name)
|
79
|
+
end
|
72
80
|
end
|
73
81
|
end
|
74
82
|
end
|
@@ -84,7 +92,10 @@ module OpenID
|
|
84
92
|
module InstanceDefExtension
|
85
93
|
def instance_def(method_name, &proc)
|
86
94
|
(class << self;self;end).instance_eval do
|
95
|
+
# TODO: find a combination of undef calls which prevent the warning
|
96
|
+
verbose, $VERBOSE = $VERBOSE, false
|
87
97
|
define_method(method_name, proc)
|
98
|
+
$VERBOSE = verbose
|
88
99
|
end
|
89
100
|
end
|
90
101
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: ruby-openid
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 2.0.
|
7
|
-
date: 2008-
|
6
|
+
version: 2.0.4
|
7
|
+
date: 2008-02-13 00:00:00 -08:00
|
8
8
|
summary: A library for consuming and serving OpenID identities.
|
9
9
|
require_paths:
|
10
10
|
- lib
|