ruby-openid 1.1.1 → 1.1.2
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/examples/rails_openid_login_generator/openid_login_generator-0.1.gem +0 -0
- data/examples/rails_openid_login_generator/templates/controller.rb~ +111 -0
- data/lib/openid/consumer.rb +21 -9
- data/lib/openid/server.rb +2 -1
- data/test/runtests.rb~ +21 -0
- metadata +44 -92
- data/examples/cacert.pem +0 -7815
- data/examples/consumerd.rb +0 -290
- data/examples/openid-store/associations/http-localhost_3A3000_2Fserver-LQl7HUNueJIJcpPoAGiHEHNdJMc +0 -6
- data/examples/openid-store/associations/http-www.myopenid.com_2Fserver-ZFp96P4qV1FjqgGt2rtZBvRJWic +0 -6
- data/examples/openid-store/auth_key +0 -1
- data/examples/openid-store/nonces/PNiw86rQ +0 -0
- data/examples/openid-store/nonces/hdZo7WC9 +0 -0
- data/examples/openid-store/nonces/uHhMdi1i +0 -0
- data/examples/rails_server/app/controllers/login_controller.rb~ +0 -35
- data/examples/rails_server/app/controllers/server_controller.rb~ +0 -190
- data/examples/rails_server/db/openid-store/associations/http-localhost_2F_7Cnormal-YU.tkND1J4fEZhnuAoT5Zc0yCA0 +0 -6
- data/examples/rails_server/db/openid-store/associations/http-localhost_2F_7Cnormal-jRS20gc5OzJ5pkpjy9BjqvTj3B0 +0 -6
- data/examples/rails_server/log/development.log +0 -6459
- data/examples/rails_server/log/production.log +0 -0
- data/examples/rails_server/log/server.log +0 -0
- data/examples/rails_server/log/test.log +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.1b2e9635e0f69c0d +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.1b3584d2b3784c97 +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.20ed70e0e63d7e31 +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.30cf5b98539677d5 +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.3910508c0c857695 +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.472170ef38098672 +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.5406e21ba5b1c7bb +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.5d2bd2b7086f12d5 +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.968757c6d12af322 +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.a87a5045744b3abf +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.ca9f0a416be0be57 +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.cd269e6040645b5b +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.cf2acf62b93dbc88 +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.d2ef8fe29591ef9b +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.e23240e097e2c83d +0 -0
- data/examples/rails_server/tmp/sessions/ruby_sess.fb154d2f7c286aba +0 -0
- data/lib/openid/discovery.rb~ +0 -122
- data/lib/openid/stores.rb~ +0 -178
- data/test/teststore.rb~ +0 -47
File without changes
|
File without changes
|
File without changes
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/openid/discovery.rb~
DELETED
@@ -1,122 +0,0 @@
|
|
1
|
-
require "openid/util"
|
2
|
-
require "openid/service"
|
3
|
-
require "openid/parse"
|
4
|
-
|
5
|
-
# try and use the yadis gem, falling back to system yadis
|
6
|
-
begin
|
7
|
-
require 'rubygems'
|
8
|
-
require_gem 'ruby-yadis', ">=0.4"
|
9
|
-
rescue LoadError
|
10
|
-
require "yadis"
|
11
|
-
end
|
12
|
-
|
13
|
-
module OpenID
|
14
|
-
|
15
|
-
OPENID_IDP_2_0_TYPE = 'http://openid.net/server/2.0'
|
16
|
-
OPENID_2_0_TYPE = 'http://openid.net/signon/2.0'
|
17
|
-
OPENID_1_2_TYPE = 'http://openid.net/signon/1.2'
|
18
|
-
OPENID_1_1_TYPE = 'http://openid.net/signon/1.1'
|
19
|
-
OPENID_1_0_TYPE = 'http://openid.net/signon/1.0'
|
20
|
-
OPENID_TYPE_URIS = [OPENID_2_0_TYPE,OPENID_1_2_TYPE,
|
21
|
-
OPENID_1_1_TYPE,OPENID_1_0_TYPE]
|
22
|
-
|
23
|
-
# OpenID::Discovery encapsulates the logic for doing Yadis and OpenID 1.0
|
24
|
-
# style server discovery. This class uses a session object to manage
|
25
|
-
# a list of tried OpenID servers for implemeting server fallback. This is
|
26
|
-
# useful the case when a user's primary server(s) is not available, and
|
27
|
-
# will allow then to try again with one of their alternates.
|
28
|
-
class OpenIDDiscovery < Discovery
|
29
|
-
|
30
|
-
def initialize(session, url, fetcher, suffix=nil)
|
31
|
-
super(session, url, suffix)
|
32
|
-
@fetcher = fetcher
|
33
|
-
end
|
34
|
-
|
35
|
-
# Pass in a custom filter here if you like. Otherwise you'll get all
|
36
|
-
# OpenID sso services. filter should produce objects or subclasses of
|
37
|
-
# OpenIDServiceEndpoint.
|
38
|
-
def discover(filter=nil)
|
39
|
-
unless filter
|
40
|
-
filter = lambda {|s| OpenIDServiceEndpoint.from_endpoint(s)}
|
41
|
-
end
|
42
|
-
|
43
|
-
begin
|
44
|
-
# do yadis discover, filtering out OpenID services
|
45
|
-
return super(filter)
|
46
|
-
rescue YADISParseError, YADISHTTPError
|
47
|
-
|
48
|
-
# Couldn't do Yadis discovery, fall back on OpenID 1.0 disco
|
49
|
-
status, service = self.openid_discovery(@url)
|
50
|
-
if status == SUCCESS
|
51
|
-
return [service.consumer_id, [service]]
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
return [nil, []]
|
56
|
-
end
|
57
|
-
|
58
|
-
# Perform OpenID 1.0 style link rel discovery. No string normalization
|
59
|
-
# will be done on +url+. See Util.normalize_url for information on
|
60
|
-
# textual URL transformations.
|
61
|
-
def openid_discovery(url)
|
62
|
-
ret = @fetcher.get(url)
|
63
|
-
return [HTTP_FAILURE, nil] if ret.nil?
|
64
|
-
|
65
|
-
consumer_id, data = ret
|
66
|
-
server = nil
|
67
|
-
delegate = nil
|
68
|
-
parse_link_attrs(data) do |attrs|
|
69
|
-
rel = attrs["rel"]
|
70
|
-
if rel == "openid.server" and server.nil?
|
71
|
-
href = attrs["href"]
|
72
|
-
server = href unless href.nil?
|
73
|
-
end
|
74
|
-
|
75
|
-
if rel == "openid.delegate" and delegate.nil?
|
76
|
-
href = attrs["href"]
|
77
|
-
delegate = href unless href.nil?
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
return [PARSE_ERROR, nil] if server.nil?
|
82
|
-
|
83
|
-
server_id = delegate.nil? ? consumer_id : delegate
|
84
|
-
|
85
|
-
consumer_id = OpenID::Util.normalize_url(consumer_id)
|
86
|
-
server_id = OpenID::Util.normalize_url(server_id)
|
87
|
-
server_url = OpenID::Util.normalize_url(server)
|
88
|
-
|
89
|
-
service = OpenID::FakeOpenIDServiceEndpoint.new(consumer_id,
|
90
|
-
server_id,
|
91
|
-
server_url)
|
92
|
-
return [SUCCESS, service]
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|
96
|
-
|
97
|
-
class XRIDiscovery < Discovery
|
98
|
-
def initialize(session, iname, suffix=nil)
|
99
|
-
super(session, iname, suffix)
|
100
|
-
end
|
101
|
-
|
102
|
-
def discover(filter=nil)
|
103
|
-
begin
|
104
|
-
services = XRI::ProxyResolver.new.query(@url, OPENID_TYPE_URIS)
|
105
|
-
rescue XRI::XRIHTTPError, ArgumentError
|
106
|
-
return [nil, []]
|
107
|
-
end
|
108
|
-
endpoints = []
|
109
|
-
services.each {|s|
|
110
|
-
se = OpenIDServiceEndpoint.from_endpoint(s)
|
111
|
-
if se
|
112
|
-
se.delegate_url = @url
|
113
|
-
se.yadis_url = @url
|
114
|
-
endpoints << se
|
115
|
-
end
|
116
|
-
}
|
117
|
-
return [@url, endpoints]
|
118
|
-
end
|
119
|
-
|
120
|
-
end
|
121
|
-
|
122
|
-
end
|
data/lib/openid/stores.rb~
DELETED
@@ -1,178 +0,0 @@
|
|
1
|
-
require "openid/util"
|
2
|
-
|
3
|
-
module OpenID
|
4
|
-
|
5
|
-
# Interface for the abstract Store
|
6
|
-
class Store
|
7
|
-
|
8
|
-
@@AUTH_KEY_LEN = 20
|
9
|
-
|
10
|
-
# Put a Association object into storace
|
11
|
-
def store_association(association)
|
12
|
-
raise NotImplementedError
|
13
|
-
end
|
14
|
-
|
15
|
-
# Returns a Association object from storage that matches
|
16
|
-
# the server_url. Returns nil if no such association is found or if
|
17
|
-
# the one matching association is expired. (Is allowed to GC expired
|
18
|
-
# associations when found.)
|
19
|
-
def get_association(server_url)
|
20
|
-
raise NotImplementedError
|
21
|
-
end
|
22
|
-
|
23
|
-
# If there is a matching association, remove it from the store and
|
24
|
-
# return true, otherwise return false.
|
25
|
-
def removeAssociation(server_url, handle)
|
26
|
-
raise NotImplementedError
|
27
|
-
end
|
28
|
-
|
29
|
-
# Stores a nonce (which is passed in as a string).
|
30
|
-
def store_nonce(nonce)
|
31
|
-
raise NotImplementedError
|
32
|
-
end
|
33
|
-
|
34
|
-
# If the nonce is in the store, remove it and return true. Otherwise
|
35
|
-
# return false.
|
36
|
-
def use_nonce(nonce)
|
37
|
-
raise NotImplementedError
|
38
|
-
end
|
39
|
-
|
40
|
-
# Returns a 20-byte auth key used to sign the tokens, to ensure
|
41
|
-
# that they haven't been tampered with in transit. It must return
|
42
|
-
# the same key every time it is called.
|
43
|
-
def get_auth_key
|
44
|
-
raise NotImplementedError
|
45
|
-
end
|
46
|
-
|
47
|
-
# Method return true if the store is dumb-mode-style store.
|
48
|
-
def dumb?
|
49
|
-
false
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
|
55
|
-
class DumbStore < Store
|
56
|
-
|
57
|
-
def initialize(secret_phrase)
|
58
|
-
require "digest/sha1"
|
59
|
-
@auth_key = Digest::SHA1.hexdigest(secret_phrase)
|
60
|
-
end
|
61
|
-
|
62
|
-
def store_association(assoc)
|
63
|
-
nil
|
64
|
-
end
|
65
|
-
|
66
|
-
def get_association(server_url)
|
67
|
-
nil
|
68
|
-
end
|
69
|
-
|
70
|
-
def remove_association(server_url, handle)
|
71
|
-
false
|
72
|
-
end
|
73
|
-
|
74
|
-
def store_nonce(nonce)
|
75
|
-
nil
|
76
|
-
end
|
77
|
-
|
78
|
-
def use_nonce(nonce)
|
79
|
-
true
|
80
|
-
end
|
81
|
-
|
82
|
-
def get_auth_key
|
83
|
-
@auth_key
|
84
|
-
end
|
85
|
-
|
86
|
-
def dumb?
|
87
|
-
true
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
91
|
-
|
92
|
-
class ServerAssocs
|
93
|
-
def initialize
|
94
|
-
@assocs = {}
|
95
|
-
end
|
96
|
-
|
97
|
-
def set(assoc)
|
98
|
-
@assocs[assoc.handle] = assoc
|
99
|
-
end
|
100
|
-
|
101
|
-
def get(handle)
|
102
|
-
@assocs[handle]
|
103
|
-
end
|
104
|
-
|
105
|
-
def remove(handle)
|
106
|
-
return @assocs.delete(handle)
|
107
|
-
end
|
108
|
-
|
109
|
-
def best
|
110
|
-
best = nil
|
111
|
-
@assocs.each do |k, assoc|
|
112
|
-
if best.nil? or best.issued < assoc.issued
|
113
|
-
best = assoc
|
114
|
-
end
|
115
|
-
end
|
116
|
-
return best
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
# An in-memory implementation of Store. This class is mainly used
|
121
|
-
# for testing, though it may be useful for long-running single process apps.
|
122
|
-
#
|
123
|
-
# You should probably be looking at OpenID::FilesystemStore
|
124
|
-
class MemoryStore < Store
|
125
|
-
|
126
|
-
def initialize
|
127
|
-
@server_assocs = {}
|
128
|
-
@nonces = {}
|
129
|
-
@auth_key = OpenID::Util.random_string(@@AUTH_KEY_LEN)
|
130
|
-
end
|
131
|
-
|
132
|
-
def dumb?
|
133
|
-
false
|
134
|
-
end
|
135
|
-
|
136
|
-
def store_association(server_url, assoc)
|
137
|
-
assocs = _get_server_assocs(server_url)
|
138
|
-
assocs.set(self.deepcopy(assoc))
|
139
|
-
end
|
140
|
-
|
141
|
-
def get_association(server_url, handle=nil)
|
142
|
-
assocs = _get_server_assocs(server_url)
|
143
|
-
return assocs.best if handle.nil?
|
144
|
-
return assocs.get(handle)
|
145
|
-
end
|
146
|
-
|
147
|
-
def remove_association(server_url, handle)
|
148
|
-
assocs = _get_server_assocs(server_url)
|
149
|
-
return assocs.remove(handle)
|
150
|
-
end
|
151
|
-
|
152
|
-
def use_nonce(nonce)
|
153
|
-
return true if @nonces.delete(nonce)
|
154
|
-
return false
|
155
|
-
end
|
156
|
-
|
157
|
-
def store_nonce(nonce)
|
158
|
-
@nonces[nonce] = true
|
159
|
-
end
|
160
|
-
|
161
|
-
def get_auth_key
|
162
|
-
@auth_key
|
163
|
-
end
|
164
|
-
|
165
|
-
def _get_server_assocs(server_url)
|
166
|
-
unless @server_assocs.has_key?(server_url)
|
167
|
-
@server_assocs[server_url] = ServerAssocs.new
|
168
|
-
end
|
169
|
-
return @server_assocs[server_url]
|
170
|
-
end
|
171
|
-
|
172
|
-
def deepcopy(o)
|
173
|
-
Marshal.load(Marshal.dump(o))
|
174
|
-
end
|
175
|
-
|
176
|
-
end
|
177
|
-
|
178
|
-
end
|
data/test/teststore.rb~
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require 'fileutils'
|
3
|
-
require 'pathname'
|
4
|
-
require 'tmpdir'
|
5
|
-
|
6
|
-
require 'openid/filestore'
|
7
|
-
require 'storetestcase'
|
8
|
-
|
9
|
-
class FileStoreTestCase < Test::Unit::TestCase
|
10
|
-
include StoreTestCase
|
11
|
-
|
12
|
-
@@dir = Pathname.new(Dir.tmpdir).join('filstoretest')
|
13
|
-
|
14
|
-
def setup
|
15
|
-
FileUtils.rm_rf(@@dir)
|
16
|
-
@store = OpenID::FilesystemStore.new(@@dir)
|
17
|
-
end
|
18
|
-
|
19
|
-
def teardown
|
20
|
-
FileUtils.rm_rf(@@dir)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
class DumbStoreTestCase < Test::Unit::TestCase
|
25
|
-
include StoreTestCase
|
26
|
-
|
27
|
-
def setup
|
28
|
-
@store = OpenID::DumbStore.new('unit-test')
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_nonce
|
32
|
-
assert_equal(true, @store.use_none('anything'))
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
class MemoryStoreTestCase < Test::Unit::TestCase
|
38
|
-
include StoreTestCase
|
39
|
-
|
40
|
-
@@dir = Pathname.new(Dir.tmpdir).join('filstoretest')
|
41
|
-
|
42
|
-
def setup
|
43
|
-
@store = OpenID::MemoryStore.new
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
|