ruby-saml 1.12.4 → 1.18.1
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.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +3 -0
- data/.github/workflows/test.yml +29 -2
- data/{changelog.md → CHANGELOG.md} +64 -15
- data/LICENSE +2 -1
- data/README.md +425 -233
- data/UPGRADING.md +158 -0
- data/lib/onelogin/ruby-saml/authrequest.rb +9 -11
- data/lib/onelogin/ruby-saml/idp_metadata_parser.rb +115 -84
- data/lib/onelogin/ruby-saml/logoutrequest.rb +9 -9
- data/lib/onelogin/ruby-saml/logoutresponse.rb +2 -2
- data/lib/onelogin/ruby-saml/metadata.rb +75 -42
- data/lib/onelogin/ruby-saml/response.rb +130 -70
- data/lib/onelogin/ruby-saml/saml_message.rb +16 -19
- data/lib/onelogin/ruby-saml/settings.rb +214 -110
- data/lib/onelogin/ruby-saml/slo_logoutrequest.rb +51 -37
- data/lib/onelogin/ruby-saml/slo_logoutresponse.rb +9 -9
- data/lib/onelogin/ruby-saml/utils.rb +129 -46
- data/lib/onelogin/ruby-saml/version.rb +1 -1
- data/lib/xml_security.rb +81 -48
- data/ruby-saml.gemspec +40 -14
- metadata +29 -32
- data/.travis.yml +0 -48
data/lib/xml_security.rb
CHANGED
|
@@ -185,15 +185,13 @@ module XMLSecurity
|
|
|
185
185
|
x509_cert_element.text = Base64.encode64(certificate.to_der).gsub(/\n/, "")
|
|
186
186
|
|
|
187
187
|
# add the signature
|
|
188
|
-
issuer_element =
|
|
188
|
+
issuer_element = elements["//saml:Issuer"]
|
|
189
189
|
if issuer_element
|
|
190
|
-
|
|
190
|
+
root.insert_after(issuer_element, signature_element)
|
|
191
|
+
elsif first_child = root.children[0]
|
|
192
|
+
root.insert_before(first_child, signature_element)
|
|
191
193
|
else
|
|
192
|
-
|
|
193
|
-
self.root.insert_before sp_sso_descriptor, signature_element
|
|
194
|
-
else
|
|
195
|
-
self.root.add_element(signature_element)
|
|
196
|
-
end
|
|
194
|
+
root.add_element(signature_element)
|
|
197
195
|
end
|
|
198
196
|
end
|
|
199
197
|
|
|
@@ -205,7 +203,7 @@ module XMLSecurity
|
|
|
205
203
|
|
|
206
204
|
def compute_digest(document, digest_algorithm)
|
|
207
205
|
digest = digest_algorithm.digest(document)
|
|
208
|
-
Base64.encode64(digest).strip
|
|
206
|
+
Base64.encode64(digest).strip
|
|
209
207
|
end
|
|
210
208
|
|
|
211
209
|
end
|
|
@@ -218,12 +216,31 @@ module XMLSecurity
|
|
|
218
216
|
def initialize(response, errors = [])
|
|
219
217
|
super(response)
|
|
220
218
|
@errors = errors
|
|
219
|
+
reset_elements
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def reset_elements
|
|
223
|
+
@referenced_xml = nil
|
|
224
|
+
@cached_signed_info = nil
|
|
225
|
+
@signature = nil
|
|
226
|
+
@signature_algorithm = nil
|
|
227
|
+
@ref = nil
|
|
228
|
+
@processed = false
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def processed
|
|
232
|
+
@processed
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
def referenced_xml
|
|
236
|
+
@referenced_xml
|
|
221
237
|
end
|
|
222
238
|
|
|
223
239
|
def signed_element_id
|
|
224
240
|
@signed_element_id ||= extract_signed_element_id
|
|
225
241
|
end
|
|
226
242
|
|
|
243
|
+
# Validates the referenced_xml, which is the signed part of the document
|
|
227
244
|
def validate_document(idp_cert_fingerprint, soft = true, options = {})
|
|
228
245
|
# get cert from response
|
|
229
246
|
cert_element = REXML::XPath.first(
|
|
@@ -244,7 +261,7 @@ module XMLSecurity
|
|
|
244
261
|
if options[:fingerprint_alg]
|
|
245
262
|
fingerprint_alg = XMLSecurity::BaseDocument.new.algorithm(options[:fingerprint_alg]).new
|
|
246
263
|
else
|
|
247
|
-
fingerprint_alg = OpenSSL::Digest
|
|
264
|
+
fingerprint_alg = OpenSSL::Digest.new('SHA1')
|
|
248
265
|
end
|
|
249
266
|
fingerprint = fingerprint_alg.hexdigest(cert.to_der)
|
|
250
267
|
|
|
@@ -252,6 +269,7 @@ module XMLSecurity
|
|
|
252
269
|
if fingerprint != idp_cert_fingerprint.gsub(/[^a-zA-Z0-9]/,"").downcase
|
|
253
270
|
return append_error("Fingerprint mismatch", soft)
|
|
254
271
|
end
|
|
272
|
+
base64_cert = Base64.encode64(cert.to_der)
|
|
255
273
|
else
|
|
256
274
|
if options[:cert]
|
|
257
275
|
base64_cert = Base64.encode64(options[:cert].to_pem)
|
|
@@ -263,12 +281,10 @@ module XMLSecurity
|
|
|
263
281
|
end
|
|
264
282
|
end
|
|
265
283
|
end
|
|
266
|
-
|
|
267
|
-
check_malformed_doc = options[:check_malformed_doc] if options.key?(:check_malformed_doc)
|
|
268
|
-
validate_signature(base64_cert, soft, check_malformed_doc)
|
|
284
|
+
validate_signature(base64_cert, soft)
|
|
269
285
|
end
|
|
270
286
|
|
|
271
|
-
def validate_document_with_cert(idp_cert, soft = true
|
|
287
|
+
def validate_document_with_cert(idp_cert, soft = true)
|
|
272
288
|
# get cert from response
|
|
273
289
|
cert_element = REXML::XPath.first(
|
|
274
290
|
self,
|
|
@@ -289,16 +305,18 @@ module XMLSecurity
|
|
|
289
305
|
if idp_cert.to_pem != cert.to_pem
|
|
290
306
|
return append_error("Certificate of the Signature element does not match provided certificate", soft)
|
|
291
307
|
end
|
|
292
|
-
else
|
|
293
|
-
base64_cert = Base64.encode64(idp_cert.to_pem)
|
|
294
308
|
end
|
|
295
|
-
|
|
309
|
+
|
|
310
|
+
encoded_idp_cert = Base64.encode64(idp_cert.to_pem)
|
|
311
|
+
validate_signature(encoded_idp_cert, true)
|
|
296
312
|
end
|
|
297
313
|
|
|
298
|
-
def
|
|
314
|
+
def cache_referenced_xml(soft, check_malformed_doc = true)
|
|
315
|
+
reset_elements
|
|
316
|
+
@processed = true
|
|
299
317
|
|
|
300
318
|
begin
|
|
301
|
-
|
|
319
|
+
nokogiri_document = XMLSecurity::BaseDocument.safe_load_xml(self, check_malformed_doc)
|
|
302
320
|
rescue StandardError => error
|
|
303
321
|
@errors << error.message
|
|
304
322
|
return false if soft
|
|
@@ -315,13 +333,15 @@ module XMLSecurity
|
|
|
315
333
|
{"ds"=>DSIG}
|
|
316
334
|
)
|
|
317
335
|
|
|
336
|
+
return if sig_element.nil?
|
|
337
|
+
|
|
318
338
|
# signature method
|
|
319
339
|
sig_alg_value = REXML::XPath.first(
|
|
320
340
|
sig_element,
|
|
321
341
|
"./ds:SignedInfo/ds:SignatureMethod",
|
|
322
342
|
{"ds"=>DSIG}
|
|
323
343
|
)
|
|
324
|
-
signature_algorithm = algorithm(sig_alg_value)
|
|
344
|
+
@signature_algorithm = algorithm(sig_alg_value)
|
|
325
345
|
|
|
326
346
|
# get signature
|
|
327
347
|
base64_signature = REXML::XPath.first(
|
|
@@ -329,7 +349,11 @@ module XMLSecurity
|
|
|
329
349
|
"./ds:SignatureValue",
|
|
330
350
|
{"ds" => DSIG}
|
|
331
351
|
)
|
|
332
|
-
|
|
352
|
+
|
|
353
|
+
return if base64_signature.nil?
|
|
354
|
+
|
|
355
|
+
base64_signature_text = OneLogin::RubySaml::Utils.element_text(base64_signature)
|
|
356
|
+
@signature = base64_signature_text.nil? ? nil : Base64.decode64(base64_signature_text)
|
|
333
357
|
|
|
334
358
|
# canonicalization method
|
|
335
359
|
canon_algorithm = canon_algorithm REXML::XPath.first(
|
|
@@ -338,66 +362,75 @@ module XMLSecurity
|
|
|
338
362
|
'ds' => DSIG
|
|
339
363
|
)
|
|
340
364
|
|
|
341
|
-
noko_sig_element =
|
|
365
|
+
noko_sig_element = nokogiri_document.at_xpath('//ds:Signature', 'ds' => DSIG)
|
|
342
366
|
noko_signed_info_element = noko_sig_element.at_xpath('./ds:SignedInfo', 'ds' => DSIG)
|
|
343
367
|
|
|
344
|
-
|
|
345
|
-
noko_sig_element.remove
|
|
368
|
+
@cached_signed_info = noko_signed_info_element.canonicalize(canon_algorithm)
|
|
346
369
|
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
{ "ds" => DSIG }
|
|
352
|
-
)
|
|
370
|
+
### Now get the @referenced_xml to use?
|
|
371
|
+
rexml_signed_info = REXML::Document.new(@cached_signed_info.to_s).root
|
|
372
|
+
|
|
373
|
+
noko_sig_element.remove
|
|
353
374
|
|
|
354
375
|
# get inclusive namespaces
|
|
355
376
|
inclusive_namespaces = extract_inclusive_namespaces
|
|
356
377
|
|
|
357
378
|
# check digests
|
|
358
|
-
ref = REXML::XPath.first(
|
|
359
|
-
|
|
360
|
-
reference_nodes = document.xpath("//*[@ID=$id]", nil, { 'id' => extract_signed_element_id })
|
|
379
|
+
@ref = REXML::XPath.first(rexml_signed_info, "./ds:Reference", {"ds"=>DSIG})
|
|
380
|
+
return if @ref.nil?
|
|
361
381
|
|
|
362
|
-
|
|
363
|
-
return append_error("Duplicated IDs found", soft)
|
|
364
|
-
end
|
|
382
|
+
reference_nodes = nokogiri_document.xpath("//*[@ID=$id]", nil, { 'id' => extract_signed_element_id })
|
|
365
383
|
|
|
366
384
|
hashed_element = reference_nodes[0]
|
|
385
|
+
return if hashed_element.nil?
|
|
367
386
|
|
|
368
387
|
canon_algorithm = canon_algorithm REXML::XPath.first(
|
|
369
|
-
|
|
388
|
+
rexml_signed_info,
|
|
370
389
|
'./ds:CanonicalizationMethod',
|
|
371
390
|
{ "ds" => DSIG }
|
|
372
391
|
)
|
|
373
392
|
|
|
374
|
-
canon_algorithm = process_transforms(ref, canon_algorithm)
|
|
393
|
+
canon_algorithm = process_transforms(@ref, canon_algorithm)
|
|
375
394
|
|
|
376
|
-
|
|
395
|
+
@referenced_xml = hashed_element.canonicalize(canon_algorithm, inclusive_namespaces)
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
def validate_signature(base64_cert, soft = true)
|
|
399
|
+
if !@processed
|
|
400
|
+
cache_referenced_xml(soft)
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
return append_error("No Signature Algorithm Method found", soft) if @signature_algorithm.nil?
|
|
404
|
+
return append_error("No Signature node found", soft) if @signature.nil?
|
|
405
|
+
return append_error("No canonized SignedInfo ", soft) if @cached_signed_info.nil?
|
|
406
|
+
return append_error("No Reference node found", soft) if @ref.nil?
|
|
407
|
+
return append_error("No referenced XML", soft) if @referenced_xml.nil?
|
|
408
|
+
|
|
409
|
+
# get certificate object
|
|
410
|
+
cert_text = Base64.decode64(base64_cert)
|
|
411
|
+
cert = OpenSSL::X509::Certificate.new(cert_text)
|
|
377
412
|
|
|
378
413
|
digest_algorithm = algorithm(REXML::XPath.first(
|
|
379
|
-
ref,
|
|
414
|
+
@ref,
|
|
380
415
|
"./ds:DigestMethod",
|
|
381
416
|
{ "ds" => DSIG }
|
|
382
417
|
))
|
|
383
|
-
hash = digest_algorithm.digest(
|
|
418
|
+
hash = digest_algorithm.digest(@referenced_xml)
|
|
384
419
|
encoded_digest_value = REXML::XPath.first(
|
|
385
|
-
ref,
|
|
420
|
+
@ref,
|
|
386
421
|
"./ds:DigestValue",
|
|
387
422
|
{ "ds" => DSIG }
|
|
388
423
|
)
|
|
389
|
-
|
|
424
|
+
encoded_digest_value_text = OneLogin::RubySaml::Utils.element_text(encoded_digest_value)
|
|
425
|
+
digest_value = encoded_digest_value_text.nil? ? nil : Base64.decode64(encoded_digest_value_text)
|
|
390
426
|
|
|
391
|
-
|
|
427
|
+
# Compare the computed "hash" with the "signed" hash
|
|
428
|
+
unless hash && hash == digest_value
|
|
392
429
|
return append_error("Digest mismatch", soft)
|
|
393
430
|
end
|
|
394
431
|
|
|
395
|
-
# get certificate object
|
|
396
|
-
cert_text = Base64.decode64(base64_cert)
|
|
397
|
-
cert = OpenSSL::X509::Certificate.new(cert_text)
|
|
398
|
-
|
|
399
432
|
# verify signature
|
|
400
|
-
unless cert.public_key.verify(signature_algorithm.new, signature,
|
|
433
|
+
unless cert.public_key.verify(@signature_algorithm.new, @signature, @cached_signed_info)
|
|
401
434
|
return append_error("Key validation error", soft)
|
|
402
435
|
end
|
|
403
436
|
|
data/ruby-saml.gemspec
CHANGED
|
@@ -6,17 +6,17 @@ Gem::Specification.new do |s|
|
|
|
6
6
|
s.version = OneLogin::RubySaml::VERSION
|
|
7
7
|
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
9
|
-
s.authors = ["
|
|
9
|
+
s.authors = ["SAML Toolkit", "Sixto Martin"]
|
|
10
|
+
s.email = ['contact@iamdigitalservices.com', 'sixto.martin.garcia@gmail.com']
|
|
10
11
|
s.date = Time.now.strftime("%Y-%m-%d")
|
|
11
|
-
s.description = %q{SAML toolkit
|
|
12
|
-
s.email = %q{support@onelogin.com}
|
|
12
|
+
s.description = %q{SAML Ruby toolkit. Add SAML support to your Ruby software using this library}
|
|
13
13
|
s.license = 'MIT'
|
|
14
14
|
s.extra_rdoc_files = [
|
|
15
15
|
"LICENSE",
|
|
16
16
|
"README.md"
|
|
17
17
|
]
|
|
18
18
|
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
19
|
-
s.homepage = %q{https://github.com/
|
|
19
|
+
s.homepage = %q{https://github.com/saml-toolkits/ruby-saml}
|
|
20
20
|
s.rdoc_options = ["--charset=UTF-8"]
|
|
21
21
|
s.require_paths = ["lib"]
|
|
22
22
|
s.rubygems_version = %q{1.3.7}
|
|
@@ -27,12 +27,18 @@ Gem::Specification.new do |s|
|
|
|
27
27
|
# Nokogiri's version dependent on the Ruby version, even though we would
|
|
28
28
|
# have liked to constrain Ruby 1.8.7 to install only the 1.5.x versions.
|
|
29
29
|
if defined?(JRUBY_VERSION)
|
|
30
|
-
if JRUBY_VERSION < '9.
|
|
30
|
+
if JRUBY_VERSION < '9.1.7.0'
|
|
31
31
|
s.add_runtime_dependency('nokogiri', '>= 1.8.2', '<= 1.8.5')
|
|
32
32
|
s.add_runtime_dependency('jruby-openssl', '>= 0.9.8')
|
|
33
33
|
s.add_runtime_dependency('json', '< 2.3.0')
|
|
34
|
+
elsif JRUBY_VERSION < '9.2.0.0'
|
|
35
|
+
s.add_runtime_dependency('nokogiri', '>= 1.9.1', '< 1.10.0')
|
|
36
|
+
elsif JRUBY_VERSION < '9.3.2.0'
|
|
37
|
+
s.add_runtime_dependency('nokogiri', '>= 1.11.4')
|
|
38
|
+
s.add_runtime_dependency('rexml')
|
|
34
39
|
else
|
|
35
|
-
s.add_runtime_dependency('nokogiri', '>= 1.
|
|
40
|
+
s.add_runtime_dependency('nokogiri', '>= 1.13.10')
|
|
41
|
+
s.add_runtime_dependency('rexml')
|
|
36
42
|
end
|
|
37
43
|
elsif RUBY_VERSION < '1.9'
|
|
38
44
|
s.add_runtime_dependency('uuid')
|
|
@@ -41,28 +47,48 @@ Gem::Specification.new do |s|
|
|
|
41
47
|
s.add_runtime_dependency('nokogiri', '>= 1.5.10', '<= 1.6.8.1')
|
|
42
48
|
s.add_runtime_dependency('json', '< 2.3.0')
|
|
43
49
|
elsif RUBY_VERSION < '2.3'
|
|
44
|
-
s.add_runtime_dependency('nokogiri', '>= 1.9.1', '
|
|
50
|
+
s.add_runtime_dependency('nokogiri', '>= 1.9.1', '< 1.10.0')
|
|
51
|
+
elsif RUBY_VERSION < '2.5'
|
|
52
|
+
s.add_runtime_dependency('nokogiri', '>= 1.10.10', '< 1.11.0')
|
|
53
|
+
s.add_runtime_dependency('rexml')
|
|
54
|
+
elsif RUBY_VERSION < '2.6'
|
|
55
|
+
s.add_runtime_dependency('nokogiri', '>= 1.11.4')
|
|
56
|
+
s.add_runtime_dependency('rexml')
|
|
45
57
|
else
|
|
46
|
-
s.add_runtime_dependency('nokogiri', '>= 1.10
|
|
58
|
+
s.add_runtime_dependency('nokogiri', '>= 1.13.10')
|
|
47
59
|
s.add_runtime_dependency('rexml')
|
|
48
60
|
end
|
|
49
61
|
|
|
62
|
+
if RUBY_VERSION >= '3.4.0'
|
|
63
|
+
s.add_runtime_dependency("logger")
|
|
64
|
+
s.add_runtime_dependency("base64")
|
|
65
|
+
s.add_runtime_dependency('mutex_m')
|
|
66
|
+
end
|
|
67
|
+
|
|
50
68
|
s.add_development_dependency('simplecov', '<0.22.0')
|
|
51
69
|
if RUBY_VERSION < '2.4.1'
|
|
52
70
|
s.add_development_dependency('simplecov-lcov', '<0.8.0')
|
|
53
|
-
s.add_development_dependency('term-ansicolor', '1.2.2')
|
|
54
|
-
s.add_development_dependency('mime-types', '<3.6.0')
|
|
55
71
|
else
|
|
56
72
|
s.add_development_dependency('simplecov-lcov', '>0.7.0')
|
|
57
73
|
end
|
|
58
74
|
|
|
59
|
-
s.add_development_dependency('
|
|
60
|
-
s.add_development_dependency('minitest', '~> 5.5')
|
|
75
|
+
s.add_development_dependency('minitest', '~> 5.5', '<5.19.0')
|
|
61
76
|
s.add_development_dependency('mocha', '~> 0.14')
|
|
62
|
-
|
|
77
|
+
|
|
78
|
+
if RUBY_VERSION < '2.0'
|
|
79
|
+
s.add_development_dependency('rake', '~> 10')
|
|
80
|
+
else
|
|
81
|
+
s.add_development_dependency('rake', '>= 12.3.3')
|
|
82
|
+
end
|
|
83
|
+
|
|
63
84
|
s.add_development_dependency('shoulda', '~> 2.11')
|
|
64
85
|
s.add_development_dependency('systemu', '~> 2')
|
|
65
|
-
|
|
86
|
+
|
|
87
|
+
if RUBY_VERSION < '2.1'
|
|
88
|
+
s.add_development_dependency('timecop', '<= 0.6.0')
|
|
89
|
+
else
|
|
90
|
+
s.add_development_dependency('timecop', '~> 0.9')
|
|
91
|
+
end
|
|
66
92
|
|
|
67
93
|
if defined?(JRUBY_VERSION)
|
|
68
94
|
# All recent versions of JRuby play well with pry
|
metadata
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ruby-saml
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.18.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
-
|
|
7
|
+
- SAML Toolkit
|
|
8
|
+
- Sixto Martin
|
|
8
9
|
autorequire:
|
|
9
10
|
bindir: bin
|
|
10
11
|
cert_chain: []
|
|
11
|
-
date: 2025-
|
|
12
|
+
date: 2025-07-29 00:00:00.000000000 Z
|
|
12
13
|
dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
|
14
15
|
name: nokogiri
|
|
@@ -16,14 +17,14 @@ dependencies:
|
|
|
16
17
|
requirements:
|
|
17
18
|
- - ">="
|
|
18
19
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 1.10
|
|
20
|
+
version: 1.13.10
|
|
20
21
|
type: :runtime
|
|
21
22
|
prerelease: false
|
|
22
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
24
|
requirements:
|
|
24
25
|
- - ">="
|
|
25
26
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 1.10
|
|
27
|
+
version: 1.13.10
|
|
27
28
|
- !ruby/object:Gem::Dependency
|
|
28
29
|
name: rexml
|
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -66,20 +67,6 @@ dependencies:
|
|
|
66
67
|
- - ">"
|
|
67
68
|
- !ruby/object:Gem::Version
|
|
68
69
|
version: 0.7.0
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: coveralls
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - ">="
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '0'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - ">="
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '0'
|
|
83
70
|
- !ruby/object:Gem::Dependency
|
|
84
71
|
name: minitest
|
|
85
72
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -87,6 +74,9 @@ dependencies:
|
|
|
87
74
|
- - "~>"
|
|
88
75
|
- !ruby/object:Gem::Version
|
|
89
76
|
version: '5.5'
|
|
77
|
+
- - "<"
|
|
78
|
+
- !ruby/object:Gem::Version
|
|
79
|
+
version: 5.19.0
|
|
90
80
|
type: :development
|
|
91
81
|
prerelease: false
|
|
92
82
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -94,6 +84,9 @@ dependencies:
|
|
|
94
84
|
- - "~>"
|
|
95
85
|
- !ruby/object:Gem::Version
|
|
96
86
|
version: '5.5'
|
|
87
|
+
- - "<"
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: 5.19.0
|
|
97
90
|
- !ruby/object:Gem::Dependency
|
|
98
91
|
name: mocha
|
|
99
92
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -112,16 +105,16 @@ dependencies:
|
|
|
112
105
|
name: rake
|
|
113
106
|
requirement: !ruby/object:Gem::Requirement
|
|
114
107
|
requirements:
|
|
115
|
-
- - "
|
|
108
|
+
- - ">="
|
|
116
109
|
- !ruby/object:Gem::Version
|
|
117
|
-
version:
|
|
110
|
+
version: 12.3.3
|
|
118
111
|
type: :development
|
|
119
112
|
prerelease: false
|
|
120
113
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
114
|
requirements:
|
|
122
|
-
- - "
|
|
115
|
+
- - ">="
|
|
123
116
|
- !ruby/object:Gem::Version
|
|
124
|
-
version:
|
|
117
|
+
version: 12.3.3
|
|
125
118
|
- !ruby/object:Gem::Dependency
|
|
126
119
|
name: shoulda
|
|
127
120
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -154,16 +147,16 @@ dependencies:
|
|
|
154
147
|
name: timecop
|
|
155
148
|
requirement: !ruby/object:Gem::Requirement
|
|
156
149
|
requirements:
|
|
157
|
-
- - "
|
|
150
|
+
- - "~>"
|
|
158
151
|
- !ruby/object:Gem::Version
|
|
159
|
-
version: 0.
|
|
152
|
+
version: '0.9'
|
|
160
153
|
type: :development
|
|
161
154
|
prerelease: false
|
|
162
155
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
156
|
requirements:
|
|
164
|
-
- - "
|
|
157
|
+
- - "~>"
|
|
165
158
|
- !ruby/object:Gem::Version
|
|
166
|
-
version: 0.
|
|
159
|
+
version: '0.9'
|
|
167
160
|
- !ruby/object:Gem::Dependency
|
|
168
161
|
name: pry-byebug
|
|
169
162
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -178,8 +171,11 @@ dependencies:
|
|
|
178
171
|
- - ">="
|
|
179
172
|
- !ruby/object:Gem::Version
|
|
180
173
|
version: '0'
|
|
181
|
-
description: SAML toolkit
|
|
182
|
-
|
|
174
|
+
description: SAML Ruby toolkit. Add SAML support to your Ruby software using this
|
|
175
|
+
library
|
|
176
|
+
email:
|
|
177
|
+
- contact@iamdigitalservices.com
|
|
178
|
+
- sixto.martin.garcia@gmail.com
|
|
183
179
|
executables: []
|
|
184
180
|
extensions: []
|
|
185
181
|
extra_rdoc_files:
|
|
@@ -187,14 +183,15 @@ extra_rdoc_files:
|
|
|
187
183
|
- README.md
|
|
188
184
|
files:
|
|
189
185
|
- ".document"
|
|
186
|
+
- ".github/FUNDING.yml"
|
|
190
187
|
- ".github/workflows/test.yml"
|
|
191
188
|
- ".gitignore"
|
|
192
|
-
-
|
|
189
|
+
- CHANGELOG.md
|
|
193
190
|
- Gemfile
|
|
194
191
|
- LICENSE
|
|
195
192
|
- README.md
|
|
196
193
|
- Rakefile
|
|
197
|
-
-
|
|
194
|
+
- UPGRADING.md
|
|
198
195
|
- gemfiles/nokogiri-1.5.gemfile
|
|
199
196
|
- lib/onelogin/ruby-saml.rb
|
|
200
197
|
- lib/onelogin/ruby-saml/attribute_service.rb
|
|
@@ -231,7 +228,7 @@ files:
|
|
|
231
228
|
- lib/schemas/xmldsig-core-schema.xsd
|
|
232
229
|
- lib/xml_security.rb
|
|
233
230
|
- ruby-saml.gemspec
|
|
234
|
-
homepage: https://github.com/
|
|
231
|
+
homepage: https://github.com/saml-toolkits/ruby-saml
|
|
235
232
|
licenses:
|
|
236
233
|
- MIT
|
|
237
234
|
metadata: {}
|
data/.travis.yml
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
language: ruby
|
|
2
|
-
rvm:
|
|
3
|
-
- 1.9.3
|
|
4
|
-
- 2.0.0
|
|
5
|
-
- 2.1.10
|
|
6
|
-
- 2.2.10
|
|
7
|
-
- 2.3.8
|
|
8
|
-
- 2.4.6
|
|
9
|
-
- 2.5.8
|
|
10
|
-
- 2.6.6
|
|
11
|
-
- 2.7.2
|
|
12
|
-
- 3.0.0
|
|
13
|
-
- jruby-1.7.27
|
|
14
|
-
- jruby-9.1.17.0
|
|
15
|
-
- jruby-9.2.13.0
|
|
16
|
-
gemfile:
|
|
17
|
-
- Gemfile
|
|
18
|
-
- gemfiles/nokogiri-1.5.gemfile
|
|
19
|
-
before_install:
|
|
20
|
-
- gem update bundler
|
|
21
|
-
matrix:
|
|
22
|
-
exclude:
|
|
23
|
-
- rvm: jruby-1.7.27
|
|
24
|
-
gemfile: gemfiles/nokogiri-1.5.gemfile
|
|
25
|
-
- rvm: jruby-9.1.17.0
|
|
26
|
-
gemfile: gemfiles/nokogiri-1.5.gemfile
|
|
27
|
-
- rvm: jruby-9.2.13.0
|
|
28
|
-
gemfile: gemfiles/nokogiri-1.5.gemfile
|
|
29
|
-
- rvm: 2.1.5
|
|
30
|
-
gemfile: gemfiles/nokogiri-1.5.gemfile
|
|
31
|
-
- rvm: 2.1.10
|
|
32
|
-
gemfile: gemfiles/nokogiri-1.5.gemfile
|
|
33
|
-
- rvm: 2.2.10
|
|
34
|
-
gemfile: gemfiles/nokogiri-1.5.gemfile
|
|
35
|
-
- rvm: 2.3.8
|
|
36
|
-
gemfile: gemfiles/nokogiri-1.5.gemfile
|
|
37
|
-
- rvm: 2.4.6
|
|
38
|
-
gemfile: gemfiles/nokogiri-1.5.gemfile
|
|
39
|
-
- rvm: 2.5.8
|
|
40
|
-
gemfile: gemfiles/nokogiri-1.5.gemfile
|
|
41
|
-
- rvm: 2.6.6
|
|
42
|
-
gemfile: gemfiles/nokogiri-1.5.gemfile
|
|
43
|
-
- rvm: 2.7.2
|
|
44
|
-
gemfile: gemfiles/nokogiri-1.5.gemfile
|
|
45
|
-
- rvm: 3.0.0
|
|
46
|
-
gemfile: gemfiles/nokogiri-1.5.gemfile
|
|
47
|
-
env:
|
|
48
|
-
- JRUBY_OPTS="--debug"
|