ruby-samlnechotech 0.7.34 → 0.7.35
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 +13 -5
- data/lib/onelogin/ruby-samlnechotech/saml_message.rb +75 -0
- data/lib/onelogin/ruby-samlnechotech/slo_logoutrequest.rb +66 -0
- data/lib/onelogin/ruby-samlnechotech/slo_logoutresponse.rb +62 -0
- data/lib/onelogin/ruby-samlnechotech/version.rb +1 -1
- data/lib/ruby-samlnechotech.rb +3 -0
- data/test/requests/logoutrequest_fixtures.rb +82 -0
- data/test/slologoutrequest_test.rb +42 -0
- data/test/slologoutresponse_test.rb +44 -0
- metadata +16 -7
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
M2Y3NTY1OWQyMmI4ZmY4YWRjNmI1ZTllNTQ0MzQ0MGYwNDZiZTEzZQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ODExYjkyMTg0YWM4NDcyOTRkYjQzZjZiNmNhNTg4YTdhZWExM2MzZQ==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
OWEwMTY0OGY5YmI4ZGM5N2ZlZjRkZDRhZmNkZGY5MWIzZjY2ZTZmNzE2YjJj
|
10
|
+
MTE2OTJiOWU2OGFkZmNlYjg5MzJiZmJmNTg4NDgyM2Q1MjhlZWJmMTY3MjJj
|
11
|
+
N2NiZjQ1NWM2NjY3MWQ0MDJhNTJlNzZjZDBmMzA2NzVkYTFhNmU=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZGI0OWZmMTU3NWUwNWRlMzI1NmExNTMzOTlhYmI4OWFkNGY0NzdlOGNhNmI4
|
14
|
+
ZTRlYjQ3ZTA3MzY2ZjU2N2VmNGZkOTc5NThjMmI3NThhYmY5NjRlY2NjYzE5
|
15
|
+
M2EyNTVjMmIzMjNjMzI3MzgzMWY5M2U1ZTEzOWRmMmI0MWYxNGI=
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
require 'zlib'
|
3
|
+
require 'base64'
|
4
|
+
|
5
|
+
module Onelogin
|
6
|
+
module Saml
|
7
|
+
class SamlMessage
|
8
|
+
|
9
|
+
ASSERTION = "urn:oasis:names:tc:SAML:2.0:assertion"
|
10
|
+
PROTOCOL = "urn:oasis:names:tc:SAML:2.0:protocol"
|
11
|
+
|
12
|
+
def valid_saml?(document, soft = true)
|
13
|
+
Dir.chdir(File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'schemas'))) do
|
14
|
+
@schema = Nokogiri::XML::Schema(IO.read('saml20protocol_schema.xsd'))
|
15
|
+
@xml = Nokogiri::XML(document.to_s)
|
16
|
+
end
|
17
|
+
if soft
|
18
|
+
@schema.validate(@xml).map{ return false }
|
19
|
+
else
|
20
|
+
@schema.validate(@xml).map{ |error| validation_error("#{error.message}\n\n#{@xml.to_s}") }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def validation_error(message)
|
25
|
+
raise ValidationError.new(message)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def decode_raw_saml(saml)
|
31
|
+
if saml =~ /^</
|
32
|
+
return saml
|
33
|
+
elsif (decoded = decode(saml)) =~ /^</
|
34
|
+
return decoded
|
35
|
+
elsif (inflated = inflate(decoded)) =~ /^</
|
36
|
+
return inflated
|
37
|
+
end
|
38
|
+
|
39
|
+
return nil
|
40
|
+
end
|
41
|
+
|
42
|
+
def encode_raw_saml(saml, settings)
|
43
|
+
saml = Zlib::Deflate.deflate(saml, 9)[2..-5] if settings.compress_request
|
44
|
+
base64_saml = Base64.encode64(saml)
|
45
|
+
return CGI.escape(base64_saml)
|
46
|
+
end
|
47
|
+
|
48
|
+
def decode(encoded)
|
49
|
+
Base64.decode64(encoded)
|
50
|
+
end
|
51
|
+
|
52
|
+
def encode(encoded)
|
53
|
+
Base64.encode64(encoded).gsub(/\n/, "")
|
54
|
+
end
|
55
|
+
|
56
|
+
def escape(unescaped)
|
57
|
+
CGI.escape(unescaped)
|
58
|
+
end
|
59
|
+
|
60
|
+
def unescape(escaped)
|
61
|
+
CGI.unescape(escaped)
|
62
|
+
end
|
63
|
+
|
64
|
+
def inflate(deflated)
|
65
|
+
zlib = Zlib::Inflate.new(-Zlib::MAX_WBITS)
|
66
|
+
zlib.inflate(deflated)
|
67
|
+
end
|
68
|
+
|
69
|
+
def deflate(inflated)
|
70
|
+
Zlib::Deflate.deflate(inflated, 9)[2..-5]
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'zlib'
|
2
|
+
require 'time'
|
3
|
+
require 'nokogiri'
|
4
|
+
|
5
|
+
# Only supports SAML 2.0
|
6
|
+
module Onelogin
|
7
|
+
module Saml
|
8
|
+
class SloLogoutrequest < SamlMessage
|
9
|
+
attr_reader :options
|
10
|
+
attr_reader :request
|
11
|
+
attr_reader :document
|
12
|
+
|
13
|
+
def initialize(request, options = {})
|
14
|
+
raise ArgumentError.new("Request cannot be nil") if request.nil?
|
15
|
+
@options = options
|
16
|
+
@request = decode_raw_saml(request)
|
17
|
+
@document = REXML::Document.new(@request)
|
18
|
+
end
|
19
|
+
|
20
|
+
def is_valid?
|
21
|
+
validate
|
22
|
+
end
|
23
|
+
|
24
|
+
def validate!
|
25
|
+
validate(false)
|
26
|
+
end
|
27
|
+
|
28
|
+
# The value of the user identifier as designated by the initialization request response
|
29
|
+
def name_id
|
30
|
+
@name_id ||= begin
|
31
|
+
node = REXML::XPath.first(document, "/p:LogoutRequest/a:NameID", { "p" => PROTOCOL, "a" => ASSERTION })
|
32
|
+
node.nil? ? nil : node.text
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def id
|
37
|
+
return @id if @id
|
38
|
+
element = REXML::XPath.first(document, "/p:LogoutRequest", {
|
39
|
+
"p" => PROTOCOL} )
|
40
|
+
return nil if element.nil?
|
41
|
+
return element.attributes["ID"]
|
42
|
+
end
|
43
|
+
|
44
|
+
def issuer
|
45
|
+
@issuer ||= begin
|
46
|
+
node = REXML::XPath.first(document, "/p:LogoutRequest/a:Issuer", { "p" => PROTOCOL, "a" => ASSERTION })
|
47
|
+
node.nil? ? nil : node.text
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def validate(soft = true)
|
54
|
+
valid_saml?(document, soft) && validate_request_state(soft)
|
55
|
+
end
|
56
|
+
|
57
|
+
def validate_request_state(soft = true)
|
58
|
+
if request.empty?
|
59
|
+
return soft ? false : validation_error("Blank request")
|
60
|
+
end
|
61
|
+
true
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Onelogin
|
2
|
+
module Saml
|
3
|
+
class SloLogoutresponse < SamlMessage
|
4
|
+
|
5
|
+
def create(settings, request, logout_message = nil, params = {})
|
6
|
+
params = {} if params.nil?
|
7
|
+
|
8
|
+
response_doc = create_logout_response_xml_doc(settings, request, logout_message)
|
9
|
+
response_doc.context[:attribute_quote] = :quote if settings.double_quote_xml_attribute_values
|
10
|
+
|
11
|
+
response = ''
|
12
|
+
response_doc.write(response)
|
13
|
+
|
14
|
+
Logging.debug "Created SLO Logout Response: #{response}"
|
15
|
+
|
16
|
+
encoded_response = encode_raw_saml(response, settings)
|
17
|
+
params_prefix = (settings.idp_slo_target_url =~ /\?/) ? '&' : '?'
|
18
|
+
response_params = "#{params_prefix}SAMLResponse=#{encoded_response}"
|
19
|
+
|
20
|
+
params.each_pair do |key, value|
|
21
|
+
response_params << "&#{key.to_s}=#{escape(value.to_s)}"
|
22
|
+
end
|
23
|
+
|
24
|
+
settings.idp_slo_target_url + response_params
|
25
|
+
end
|
26
|
+
|
27
|
+
def create_logout_response_xml_doc(settings, request, logout_message = nil)
|
28
|
+
uuid = '_' + UUID.new.generate
|
29
|
+
time = Time.now.utc.strftime('%Y-%m-%dT%H:%M:%SZ')
|
30
|
+
|
31
|
+
response_doc = REXML::Document.new
|
32
|
+
|
33
|
+
root = response_doc.add_element 'samlp:LogoutResponse', { 'xmlns:samlp' => 'urn:oasis:names:tc:SAML:2.0:protocol' }
|
34
|
+
root.attributes['ID'] = uuid
|
35
|
+
root.attributes['IssueInstant'] = time
|
36
|
+
root.attributes['Version'] = '2.0'
|
37
|
+
root.attributes['InResponseTo'] = request.id unless request.id.nil?
|
38
|
+
root.attributes['Destination'] = settings.idp_slo_target_url unless settings.idp_slo_target_url.nil?
|
39
|
+
|
40
|
+
# add success message
|
41
|
+
status = root.add_element 'samlp:Status'
|
42
|
+
|
43
|
+
# success status code
|
44
|
+
status_code = status.add_element 'samlp:StatusCode'
|
45
|
+
status_code.attributes['Value'] = 'urn:oasis:names:tc:SAML:2.0:status:Success'
|
46
|
+
|
47
|
+
# success status message
|
48
|
+
logout_message ||= 'Successfully Signed Out'
|
49
|
+
status_message = status.add_element 'samlp:StatusMessage'
|
50
|
+
status_message.text = logout_message
|
51
|
+
|
52
|
+
if settings.issuer != nil
|
53
|
+
issuer = root.add_element "saml:Issuer", { "xmlns:saml" => "urn:oasis:names:tc:SAML:2.0:assertion" }
|
54
|
+
issuer.text = settings.issuer
|
55
|
+
end
|
56
|
+
|
57
|
+
response_doc
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/ruby-samlnechotech.rb
CHANGED
@@ -7,3 +7,6 @@ require 'onelogin/ruby-samlnechotech/settings'
|
|
7
7
|
require 'onelogin/ruby-samlnechotech/validation_error'
|
8
8
|
require 'onelogin/ruby-samlnechotech/metadata'
|
9
9
|
require 'onelogin/ruby-samlnechotech/version'
|
10
|
+
require 'onelogin/ruby-samlnechotech/saml_message'
|
11
|
+
require 'onelogin/ruby-samlnechotech/slo_logoutrequest'
|
12
|
+
require 'onelogin/ruby-samlnechotech/slo_logoutresponse'
|
@@ -0,0 +1,82 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
|
3
|
+
def default_request_opts
|
4
|
+
{
|
5
|
+
:uuid => "_28024690-000e-0130-b6d2-38f6b112be8b",
|
6
|
+
:issue_instant => Time.now.strftime('%Y-%m-%dT%H:%M:%SZ'),
|
7
|
+
:settings => settings
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
def valid_request(opts = {})
|
12
|
+
opts = default_request_opts.merge!(opts)
|
13
|
+
|
14
|
+
"<samlp:LogoutRequest
|
15
|
+
xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\"
|
16
|
+
ID=\"#{random_id}\" Version=\"2.0\"
|
17
|
+
IssueInstant=\"#{opts[:issue_instant]}\"
|
18
|
+
Destination=\"#{opts[:settings].assertion_consumer_logout_service_url}\">
|
19
|
+
<saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">#{opts[:settings].issuer}</saml:Issuer>
|
20
|
+
</samlp:LogoutRequest>"
|
21
|
+
"<samlp:LogoutRequest ID=\"f8a62847-92f2-4f0c-936a-df9efe0cc42f\"
|
22
|
+
Version=\"2.0\"
|
23
|
+
IssueInstant=\"2013-08-29T20:53:50Z\"
|
24
|
+
Destination=\"https://server/adfs/ls/\"
|
25
|
+
Consent=\"urn:oasis:names:tc:SAML:2.0:consent:unspecified\"
|
26
|
+
xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\"
|
27
|
+
>
|
28
|
+
<saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">https://sp.com/</saml:Issuer>
|
29
|
+
<Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\">
|
30
|
+
<SignedInfo>
|
31
|
+
<CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\" />
|
32
|
+
<SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\" />
|
33
|
+
<Reference URI=\"#f8a62847-92f2-4f0c-936a-df9efe0cc42f\">
|
34
|
+
<Transforms>
|
35
|
+
<Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\" />
|
36
|
+
<Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\" />
|
37
|
+
</Transforms>
|
38
|
+
<DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\" />
|
39
|
+
<DigestValue>W7F1E2U1OAHRXn/ItbnsYZyXw/8=</DigestValue>
|
40
|
+
</Reference>
|
41
|
+
</SignedInfo>
|
42
|
+
<SignatureValue></SignatureValue>
|
43
|
+
<KeyInfo>
|
44
|
+
<X509Data>
|
45
|
+
<X509Certificate></X509Certificate>
|
46
|
+
</X509Data>
|
47
|
+
</KeyInfo>
|
48
|
+
</Signature>
|
49
|
+
<saml:NameID xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\"
|
50
|
+
Format=\"http://schemas.xmlsoap.org/claims/UPN\"
|
51
|
+
>user</saml:NameID>
|
52
|
+
<samlp:SessionIndex>_2537f94b-a150-415e-9a45-3c6fa2b6dd60</samlp:SessionIndex>
|
53
|
+
</samlp:LogoutRequest>"
|
54
|
+
end
|
55
|
+
|
56
|
+
def invalid_xml_request
|
57
|
+
"<samlp:SomethingAwful
|
58
|
+
xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\"
|
59
|
+
ID=\"#{random_id}\" Version=\"2.0\">
|
60
|
+
</samlp:SomethingAwful>"
|
61
|
+
end
|
62
|
+
|
63
|
+
def settings
|
64
|
+
@settings ||= Onelogin::Saml::Settings.new(
|
65
|
+
{
|
66
|
+
:assertion_consumer_service_url => "http://app.muda.no/sso/consume",
|
67
|
+
:assertion_consumer_logout_service_url => "http://app.muda.no/sso/consume_logout",
|
68
|
+
:issuer => "http://app.muda.no",
|
69
|
+
:sp_name_qualifier => "http://sso.muda.no",
|
70
|
+
:idp_sso_target_url => "http://sso.muda.no/sso",
|
71
|
+
:idp_slo_target_url => "http://sso.muda.no/slo",
|
72
|
+
:idp_cert_fingerprint => "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00",
|
73
|
+
:name_identifier_format => "urn:oasis:names:tc:SAML:2.0:nameid-format:transient",
|
74
|
+
}
|
75
|
+
)
|
76
|
+
end
|
77
|
+
|
78
|
+
# logoutresponse fixtures
|
79
|
+
def random_id
|
80
|
+
"_#{UUID.new.generate}"
|
81
|
+
end
|
82
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "test_helper"))
|
2
|
+
require 'rexml/document'
|
3
|
+
require 'requests/logoutrequest_fixtures'
|
4
|
+
class RubySamlTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
context "SloLogoutrequest" do
|
7
|
+
context "#new" do
|
8
|
+
should "raise an exception when request is initialized with nil" do
|
9
|
+
assert_raises(ArgumentError) { Onelogin::Saml::SloLogoutrequest.new(nil) }
|
10
|
+
end
|
11
|
+
should "accept constructor-injected options" do
|
12
|
+
logoutrequest= Onelogin::Saml::SloLogoutrequest.new(valid_request, { :foo => :bar} )
|
13
|
+
assert !logoutrequest.options.empty?
|
14
|
+
end
|
15
|
+
should "support base64 encoded responses" do
|
16
|
+
expected_request = valid_request
|
17
|
+
logoutrequest= Onelogin::Saml::SloLogoutrequest.new(Base64.encode64(expected_request))
|
18
|
+
|
19
|
+
assert_equal expected_request, logoutrequest.request
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "#validate!" do
|
24
|
+
should "validates good requests" do
|
25
|
+
logoutrequest = Onelogin::Saml::SloLogoutrequest.new(valid_request)
|
26
|
+
logoutrequest.validate!
|
27
|
+
end
|
28
|
+
|
29
|
+
should "raise error for invalid xml" do
|
30
|
+
logoutrequest = Onelogin::Saml::SloLogoutrequest.new(invalid_xml_request)
|
31
|
+
assert_raises(Onelogin::Saml::ValidationError) { logoutrequest.validate! }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
# logoutresponse fixtures
|
38
|
+
def random_id
|
39
|
+
"_#{UUID.new.generate}"
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "test_helper"))
|
2
|
+
require 'requests/logoutrequest_fixtures'
|
3
|
+
|
4
|
+
class SloResponseTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
context "SloLogoutresponse" do
|
7
|
+
settings = Onelogin::Saml::Settings.new
|
8
|
+
settings.idp_slo_target_url = "http://unauth.com/logout"
|
9
|
+
settings.name_identifier_value = "f00f00"
|
10
|
+
logoutrequest = Onelogin::Saml::SloLogoutrequest.new(valid_request)
|
11
|
+
|
12
|
+
should "create the deflated SAMLRequest URL parameter" do
|
13
|
+
|
14
|
+
unauth_url = Onelogin::Saml::SloLogoutresponse.new.create(settings, logoutrequest)
|
15
|
+
assert unauth_url =~ /^http:\/\/unauth\.com\/logout\?SAMLResponse=/
|
16
|
+
|
17
|
+
inflated = decode_saml_response_payload(unauth_url)
|
18
|
+
|
19
|
+
assert_match /^<samlp:LogoutResponse/, inflated
|
20
|
+
end
|
21
|
+
|
22
|
+
should "set InResponseTo" do
|
23
|
+
|
24
|
+
unauth_url = Onelogin::Saml::SloLogoutresponse.new.create(settings, logoutrequest)
|
25
|
+
inflated = decode_saml_response_payload(unauth_url)
|
26
|
+
|
27
|
+
assert_match %r(InResponseTo='#{logoutrequest.id}'), inflated
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
def decode_saml_response_payload(unauth_url)
|
34
|
+
payload = CGI.unescape(unauth_url.split("SAMLResponse=").last)
|
35
|
+
decoded = Base64.decode64(payload)
|
36
|
+
|
37
|
+
zstream = Zlib::Inflate.new(-Zlib::MAX_WBITS)
|
38
|
+
inflated = zstream.inflate(decoded)
|
39
|
+
zstream.finish
|
40
|
+
zstream.close
|
41
|
+
inflated
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-samlnechotech
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.35
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OneLogin LLC, beekermememe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: canonix
|
@@ -42,14 +42,14 @@ dependencies:
|
|
42
42
|
name: nokogiri
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - '>='
|
45
|
+
- - ! '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 1.5.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - '>='
|
52
|
+
- - ! '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 1.5.0
|
55
55
|
description: SAML toolkit for Ruby on Rails forked and modified by beekermememe
|
@@ -73,7 +73,10 @@ files:
|
|
73
73
|
- lib/onelogin/ruby-samlnechotech/logoutresponse.rb
|
74
74
|
- lib/onelogin/ruby-samlnechotech/metadata.rb
|
75
75
|
- lib/onelogin/ruby-samlnechotech/response.rb
|
76
|
+
- lib/onelogin/ruby-samlnechotech/saml_message.rb
|
76
77
|
- lib/onelogin/ruby-samlnechotech/settings.rb
|
78
|
+
- lib/onelogin/ruby-samlnechotech/slo_logoutrequest.rb
|
79
|
+
- lib/onelogin/ruby-samlnechotech/slo_logoutresponse.rb
|
77
80
|
- lib/onelogin/ruby-samlnechotech/validation_error.rb
|
78
81
|
- lib/onelogin/ruby-samlnechotech/version.rb
|
79
82
|
- lib/ruby-samlnechotech.rb
|
@@ -88,6 +91,7 @@ files:
|
|
88
91
|
- test/logoutrequest_test.rb
|
89
92
|
- test/logoutresponse_test.rb
|
90
93
|
- test/request_test.rb
|
94
|
+
- test/requests/logoutrequest_fixtures.rb
|
91
95
|
- test/response_test.rb
|
92
96
|
- test/responses/adfs_response_sha1.xml
|
93
97
|
- test/responses/adfs_response_sha256.xml
|
@@ -108,6 +112,8 @@ files:
|
|
108
112
|
- test/responses/starfield_response.xml.base64
|
109
113
|
- test/responses/wrapped_response_2.xml.base64
|
110
114
|
- test/settings_test.rb
|
115
|
+
- test/slologoutrequest_test.rb
|
116
|
+
- test/slologoutresponse_test.rb
|
111
117
|
- test/test_helper.rb
|
112
118
|
- test/xml_security_test.rb
|
113
119
|
homepage: https://github.com/beekermememe/ruby-saml
|
@@ -120,17 +126,17 @@ require_paths:
|
|
120
126
|
- lib
|
121
127
|
required_ruby_version: !ruby/object:Gem::Requirement
|
122
128
|
requirements:
|
123
|
-
- - '>='
|
129
|
+
- - ! '>='
|
124
130
|
- !ruby/object:Gem::Version
|
125
131
|
version: '0'
|
126
132
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
133
|
requirements:
|
128
|
-
- - '>='
|
134
|
+
- - ! '>='
|
129
135
|
- !ruby/object:Gem::Version
|
130
136
|
version: '0'
|
131
137
|
requirements: []
|
132
138
|
rubyforge_project: http://www.rubygems.org/gems/ruby-samlnechotech
|
133
|
-
rubygems_version: 2.
|
139
|
+
rubygems_version: 2.1.11
|
134
140
|
signing_key:
|
135
141
|
specification_version: 4
|
136
142
|
summary: SAML Ruby Tookit
|
@@ -140,6 +146,7 @@ test_files:
|
|
140
146
|
- test/logoutrequest_test.rb
|
141
147
|
- test/logoutresponse_test.rb
|
142
148
|
- test/request_test.rb
|
149
|
+
- test/requests/logoutrequest_fixtures.rb
|
143
150
|
- test/response_test.rb
|
144
151
|
- test/responses/adfs_response_sha1.xml
|
145
152
|
- test/responses/adfs_response_sha256.xml
|
@@ -160,5 +167,7 @@ test_files:
|
|
160
167
|
- test/responses/starfield_response.xml.base64
|
161
168
|
- test/responses/wrapped_response_2.xml.base64
|
162
169
|
- test/settings_test.rb
|
170
|
+
- test/slologoutrequest_test.rb
|
171
|
+
- test/slologoutresponse_test.rb
|
163
172
|
- test/test_helper.rb
|
164
173
|
- test/xml_security_test.rb
|