Skip to content

Commit 4ac2e11

Browse files
dbloetechowells79
authored andcommitted
Extensions for StoreRequest and differentiation for ax modes
1 parent ef53840 commit 4ac2e11

File tree

2 files changed

+72
-7
lines changed

2 files changed

+72
-7
lines changed

lib/openid/extensions/ax.rb

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,12 @@ def self.to_type_uris(namespace_map, alias_list_s)
110110
class FetchRequest < AXMessage
111111
attr_reader :requested_attributes
112112
attr_accessor :update_url
113+
114+
MODE = 'fetch_request'
113115

114116
def initialize(update_url = nil)
115117
super()
116-
@mode = 'fetch_request'
118+
@mode = MODE
117119
@requested_attributes = {}
118120
@update_url = update_url
119121
end
@@ -180,7 +182,7 @@ def get_required_attrs
180182
def self.from_openid_request(oidreq)
181183
message = oidreq.message
182184
ax_args = message.get_args(NS_URI)
183-
return nil if ax_args == {}
185+
return nil if ax_args == {} or ax_args['mode'] != MODE
184186
req = new
185187
req.parse_extension_args(ax_args)
186188

@@ -467,11 +469,26 @@ def self.from_success_response(success_response, signed=true)
467469

468470
# A store request attribute exchange message representation
469471
class StoreRequest < KeyValueMessage
472+
473+
MODE = 'store_request'
474+
470475
def initialize
471476
super
472-
@mode = 'store_request'
477+
@mode = MODE
473478
end
474-
479+
480+
# Extract a StoreRequest from an OpenID message
481+
# message: OpenID::Message
482+
# return a StoreRequest or nil if AX arguments are not present
483+
def self.from_openid_request(oidreq)
484+
message = oidreq.message
485+
ax_args = message.get_args(NS_URI)
486+
return nil if ax_args.empty? or ax_args['mode'] != MODE
487+
req = new
488+
req.parse_extension_args(ax_args)
489+
req
490+
end
491+
475492
def get_extension_args(aliases=nil)
476493
ax_args = new_args
477494
kv_args = _get_extension_kv_args(aliases)
@@ -499,7 +516,13 @@ def initialize(succeeded = true, error_message = nil)
499516
end
500517
@error_message = error_message
501518
end
502-
519+
520+
def self.from_success_response(success_response)
521+
resp = nil
522+
ax_args = success_response.message.get_args(NS_URI)
523+
resp = ax_args.key?('error') ? new(false, ax_args['error']) : new
524+
end
525+
503526
def succeeded?
504527
@mode == SUCCESS_MODE
505528
end

test/test_ax.rb

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,28 @@ def test_from_openid_request_no_ax
371371
ax_req = FetchRequest.from_openid_request(openid_req)
372372
assert(ax_req.nil?)
373373
end
374-
374+
375+
def test_from_openid_request_wrong_ax_mode
376+
uri = 'http://under.the.sea/'
377+
name = 'ext0'
378+
value = 'snarfblat'
379+
380+
message = OpenID::Message.from_openid_args({
381+
'mode' => 'id_res',
382+
'ns' => OPENID2_NS,
383+
'ns.ax' => AXMessage::NS_URI,
384+
'ax.update_url' => 'http://example.com/realm/update_path',
385+
'ax.mode' => 'store_request',
386+
'ax.type.' + name => uri,
387+
'ax.count.' + name => '1',
388+
'ax.value.' + name + '.1' => value
389+
})
390+
openid_req = Server::OpenIDRequest.new
391+
openid_req.message = message
392+
ax_req = FetchRequest.from_openid_request(openid_req)
393+
assert(ax_req.nil?)
394+
end
395+
375396
def test_openid_update_url_verification_error
376397
openid_req_msg = Message.from_openid_args({
377398
'mode' => 'checkid_setup',
@@ -602,7 +623,28 @@ def test_get_extension_args_empty
602623
}
603624
assert_equal(eargs, @msg.get_extension_args)
604625
end
605-
626+
627+
def test_from_openid_request_wrong_ax_mode
628+
uri = 'http://under.the.sea/'
629+
name = 'ext0'
630+
value = 'snarfblat'
631+
632+
message = OpenID::Message.from_openid_args({
633+
'mode' => 'id_res',
634+
'ns' => OPENID2_NS,
635+
'ns.ax' => AXMessage::NS_URI,
636+
'ax.update_url' => 'http://example.com/realm/update_path',
637+
'ax.mode' => 'fetch_request',
638+
'ax.type.' + name => uri,
639+
'ax.count.' + name => '1',
640+
'ax.value.' + name + '.1' => value
641+
})
642+
openid_req = Server::OpenIDRequest.new
643+
openid_req.message = message
644+
ax_req = StoreRequest.from_openid_request(openid_req)
645+
assert(ax_req.nil?)
646+
end
647+
606648
def test_get_extension_args_nonempty
607649
@msg.set_values(@type_a, ['foo','bar'])
608650
aliases = NamespaceMap.new

0 commit comments

Comments
 (0)