Skip to content

Commit ab68c0c

Browse files
authored
Merge pull request SAML-Toolkits#502 from valerauko/add-valid-until
Add valid until accessor to parsed metadata
2 parents 99cdec3 + 90d7f66 commit ab68c0c

File tree

4 files changed

+20
-3
lines changed

4 files changed

+20
-3
lines changed

lib/onelogin/ruby-saml/idp_metadata_parser.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,8 @@ def to_hash(options = {})
207207
:idp_attribute_names => attribute_names,
208208
:idp_cert => nil,
209209
:idp_cert_fingerprint => nil,
210-
:idp_cert_multi => nil
210+
:idp_cert_multi => nil,
211+
:valid_until => valid_until
211212
}.tap do |response_hash|
212213
merge_certificates_into(response_hash) unless certificates.nil?
213214
end
@@ -224,6 +225,13 @@ def idp_name_id_format
224225
Utils.element_text(node)
225226
end
226227

228+
# @return [String|nil] 'validUntil' attribute of metadata
229+
#
230+
def valid_until
231+
root = @idpsso_descriptor.root
232+
root.attributes['validUntil'] if root && root.attributes
233+
end
234+
227235
# @param binding_priority [Array]
228236
# @return [String|nil] SingleSignOnService binding if exists
229237
#

lib/onelogin/ruby-saml/settings.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ def initialize(overrides = {}, keep_security_attributes = false)
3838
attr_accessor :idp_cert_multi
3939
attr_accessor :idp_attribute_names
4040
attr_accessor :idp_name_qualifier
41+
attr_accessor :valid_until
4142
# SP Data
4243
attr_accessor :issuer
4344
attr_accessor :assertion_consumer_service_url

test/idp_metadata_parser_test.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def initialize; end
2929
assert_equal "https://hello.example.com/access/saml/logout", settings.idp_slo_target_url
3030
assert_equal "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", settings.name_identifier_format
3131
assert_equal ["AuthToken", "SSOStartPage"], settings.idp_attribute_names
32+
assert_equal '2014-04-17T18:02:33.910Z', settings.valid_until
3233
end
3334

3435
it "extract certificate from md:KeyDescriptor[@use='signing']" do
@@ -76,7 +77,7 @@ def initialize; end
7677

7778
options[:sso_binding] = ['invalid_binding', 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect']
7879
settings = idp_metadata_parser.parse(idp_metadata, options)
79-
assert_equal "https://idp.example.com/idp/profile/SAML2/Redirect/SSO", settings.idp_sso_target_url
80+
assert_equal "https://idp.example.com/idp/profile/SAML2/Redirect/SSO", settings.idp_sso_target_url
8081
end
8182

8283
it "uses settings options as hash for overrides" do
@@ -121,6 +122,7 @@ def initialize; end
121122
assert_equal "https://hello.example.com/access/saml/logout", metadata[:idp_slo_target_url]
122123
assert_equal "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", metadata[:name_identifier_format]
123124
assert_equal ["AuthToken", "SSOStartPage"], metadata[:idp_attribute_names]
125+
assert_equal '2014-04-17T18:02:33.910Z', metadata[:valid_until]
124126
end
125127

126128
it "extract certificate from md:KeyDescriptor[@use='signing']" do
@@ -242,6 +244,7 @@ def initialize; end
242244
assert_equal "https://hello.example.com/access/saml/logout", settings.idp_slo_target_url
243245
assert_equal "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", settings.name_identifier_format
244246
assert_equal ["AuthToken", "SSOStartPage"], settings.idp_attribute_names
247+
assert_equal '2014-04-17T18:02:33.910Z', settings.valid_until
245248
assert_equal OpenSSL::SSL::VERIFY_PEER, @http.verify_mode
246249
end
247250

@@ -275,6 +278,7 @@ def initialize; end
275278
assert_equal "https://hello.example.com/access/saml/logout", parsed_metadata[:idp_slo_target_url]
276279
assert_equal "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", parsed_metadata[:name_identifier_format]
277280
assert_equal ["AuthToken", "SSOStartPage"], parsed_metadata[:idp_attribute_names]
281+
assert_equal '2014-04-17T18:02:33.910Z', parsed_metadata[:valid_until]
278282
assert_equal OpenSSL::SSL::VERIFY_PEER, @http.verify_mode
279283
end
280284

@@ -341,14 +345,17 @@ def initialize; end
341345
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", @settings.idp_cert_fingerprint
342346
assert_equal "https://hello.example.com/access/saml/logout", @settings.idp_slo_target_url
343347
assert_equal ["AuthToken", "SSOStartPage"], @settings.idp_attribute_names
348+
assert_equal '2014-04-17T18:02:33.910Z', @settings.valid_until
344349
end
345350

346351
it "should handle multiple descriptors at once" do
347352
settings = @idp_metadata_parser.parse_to_array(@idp_metadata)
348353
assert_equal "https://foo.example.com/access/saml/idp.xml", settings.first[:idp_entity_id]
349354
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", settings.first[:idp_cert_fingerprint]
355+
assert_equal '2014-04-17T18:02:33.910Z', settings.first[:valid_until]
350356
assert_equal "https://bar.example.com/access/saml/idp.xml", settings.last[:idp_entity_id]
351357
assert_equal "08:EB:6E:60:A2:14:4E:89:EC:FA:05:74:9D:72:BF:5D:BE:54:F0:1A", settings.last[:idp_cert_fingerprint]
358+
assert_equal '2014-04-17T18:02:33.910Z', settings.last[:valid_until]
352359
end
353360
end
354361

test/settings_test.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class SettingsTest < Minitest::Test
1111

1212
it "should provide getters and settings" do
1313
accessors = [
14-
:idp_entity_id, :idp_sso_target_url, :idp_slo_target_url,
14+
:idp_entity_id, :idp_sso_target_url, :idp_slo_target_url, :valid_until,
1515
:idp_cert, :idp_cert_fingerprint, :idp_cert_fingerprint_algorithm, :idp_cert_multi,
1616
:idp_attribute_names, :issuer, :assertion_consumer_service_url, :assertion_consumer_service_binding,
1717
:single_logout_service_url, :single_logout_service_binding,
@@ -40,6 +40,7 @@ class SettingsTest < Minitest::Test
4040
:idp_sso_target_url => "http://sso.muda.no/sso",
4141
:idp_slo_target_url => "http://sso.muda.no/slo",
4242
:idp_cert_fingerprint => "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00",
43+
:valid_until => '2029-04-16T03:35:08.277Z',
4344
:name_identifier_format => "urn:oasis:names:tc:SAML:2.0:nameid-format:transient",
4445
:attributes_index => 30,
4546
:passive => true,

0 commit comments

Comments
 (0)