ruby-openid 2.0.3 → 2.0.4
Sign up to get free protection for your applications and to get access to all the features.
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
|