saml-kit 0.3.0 → 0.3.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/exe/saml-kit-create-self-signed-certificate +1 -1
- data/exe/saml-kit-decode-http-post +1 -3
- data/exe/saml-kit-decode-http-redirect +2 -3
- data/lib/saml/kit.rb +1 -14
- data/lib/saml/kit/assertion.rb +14 -11
- data/lib/saml/kit/bindings/url_builder.rb +1 -1
- data/lib/saml/kit/builders.rb +2 -2
- data/lib/saml/kit/builders/assertion.rb +3 -2
- data/lib/saml/kit/builders/authentication_request.rb +3 -2
- data/lib/saml/kit/builders/encrypted_assertion.rb +20 -0
- data/lib/saml/kit/builders/identity_provider_metadata.rb +4 -3
- data/lib/saml/kit/builders/logout_request.rb +3 -2
- data/lib/saml/kit/builders/logout_response.rb +3 -2
- data/lib/saml/kit/builders/metadata.rb +4 -3
- data/lib/saml/kit/builders/response.rb +14 -5
- data/lib/saml/kit/builders/service_provider_metadata.rb +2 -1
- data/lib/saml/kit/builders/templates/assertion.builder +21 -23
- data/lib/saml/kit/builders/templates/encrypted_assertion.builder +5 -0
- data/lib/saml/kit/configuration.rb +2 -2
- data/lib/saml/kit/document.rb +11 -1
- data/lib/saml/kit/metadata.rb +13 -6
- data/lib/saml/kit/namespaces.rb +0 -11
- data/lib/saml/kit/signature.rb +1 -1
- data/lib/saml/kit/trustable.rb +7 -1
- data/lib/saml/kit/version.rb +1 -1
- data/lib/saml/kit/xml_templatable.rb +37 -0
- data/saml-kit.gemspec +1 -3
- metadata +10 -56
- data/lib/saml/kit/builders/templates/certificate.builder +0 -7
- data/lib/saml/kit/builders/templates/nil_class.builder +0 -0
- data/lib/saml/kit/builders/templates/xml_encryption.builder +0 -16
- data/lib/saml/kit/builders/templates/xml_signature.builder +0 -20
- data/lib/saml/kit/builders/xml_encryption.rb +0 -20
- data/lib/saml/kit/builders/xml_signature.rb +0 -40
- data/lib/saml/kit/certificate.rb +0 -96
- data/lib/saml/kit/crypto.rb +0 -17
- data/lib/saml/kit/crypto/oaep_cipher.rb +0 -22
- data/lib/saml/kit/crypto/rsa_cipher.rb +0 -23
- data/lib/saml/kit/crypto/simple_cipher.rb +0 -38
- data/lib/saml/kit/crypto/unknown_cipher.rb +0 -18
- data/lib/saml/kit/fingerprint.rb +0 -50
- data/lib/saml/kit/id.rb +0 -14
- data/lib/saml/kit/key_pair.rb +0 -29
- data/lib/saml/kit/self_signed_certificate.rb +0 -28
- data/lib/saml/kit/signatures.rb +0 -57
- data/lib/saml/kit/templatable.rb +0 -67
- data/lib/saml/kit/template.rb +0 -33
- data/lib/saml/kit/xml.rb +0 -80
- data/lib/saml/kit/xml_decryption.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea04912ee0a128c6ad73be1006827a0759698b07
|
4
|
+
data.tar.gz: 3a2c7424b611f7c60fd67d55e8df21c7339d9ae6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7241a12e8e8614289205f12b238208742514e70bd66ce33e42ca7244597d62db1622de32c6ed1e968e2cc5cf9e735bbf3ab78fcd2c15f829b325e518621eb1a7
|
7
|
+
data.tar.gz: 8e280182ced754e6d2120e9c65d04233dc0ea979cbe0e74002d2e9156b4bdb8aa3030e122c21c24b6ca353b14daf83a45a261a4178ffe4cbc992cac716fca4b1
|
@@ -3,7 +3,7 @@ require 'saml/kit'
|
|
3
3
|
|
4
4
|
puts "Enter Passphrase:"
|
5
5
|
passphrase = STDIN.read.strip
|
6
|
-
certificate, private_key =
|
6
|
+
certificate, private_key = ::Xml::Kit::SelfSignedCertificate.new(passphrase).create
|
7
7
|
|
8
8
|
puts "** BEGIN File Format **"
|
9
9
|
print certificate
|
@@ -2,7 +2,5 @@
|
|
2
2
|
require 'saml/kit'
|
3
3
|
|
4
4
|
saml = STDIN.read
|
5
|
-
|
6
5
|
binding = Saml::Kit::Bindings::HttpPost.new(location: '')
|
7
|
-
|
8
|
-
puts Nokogiri::XML(xml).to_xml(indent: 2)
|
6
|
+
puts binding.deserialize('SAMLRequest' => saml).to_xml(pretty: true)
|
@@ -2,6 +2,5 @@
|
|
2
2
|
require 'saml/kit'
|
3
3
|
|
4
4
|
saml = STDIN.read
|
5
|
-
binding = Saml::Kit::HttpRedirectBinding.new(location: '')
|
6
|
-
|
7
|
-
puts Nokogiri::XML(xml).to_xml(indent: 2)
|
5
|
+
binding = Saml::Kit::Bindings::HttpRedirectBinding.new(location: '')
|
6
|
+
puts binding.deserialize('SAMLRequest' => saml).to_xml(pretty: true)
|
data/lib/saml/kit.rb
CHANGED
@@ -7,16 +7,13 @@ require "active_support/core_ext/hash/indifferent_access"
|
|
7
7
|
require "active_support/core_ext/numeric/time"
|
8
8
|
require "active_support/deprecation"
|
9
9
|
require "active_support/duration"
|
10
|
-
require "builder"
|
11
10
|
require "logger"
|
12
11
|
require "net/http"
|
13
12
|
require "nokogiri"
|
14
13
|
require "securerandom"
|
15
|
-
require "
|
16
|
-
require "xmldsig"
|
14
|
+
require "xml/kit"
|
17
15
|
|
18
16
|
require "saml/kit/buildable"
|
19
|
-
require "saml/kit/templatable"
|
20
17
|
require "saml/kit/builders"
|
21
18
|
require "saml/kit/namespaces"
|
22
19
|
require "saml/kit/serializable"
|
@@ -30,27 +27,17 @@ require "saml/kit/document"
|
|
30
27
|
require "saml/kit/assertion"
|
31
28
|
require "saml/kit/authentication_request"
|
32
29
|
require "saml/kit/bindings"
|
33
|
-
require "saml/kit/certificate"
|
34
30
|
require "saml/kit/configuration"
|
35
|
-
require "saml/kit/crypto"
|
36
31
|
require "saml/kit/default_registry"
|
37
|
-
require "saml/kit/fingerprint"
|
38
|
-
require "saml/kit/key_pair"
|
39
32
|
require "saml/kit/logout_response"
|
40
33
|
require "saml/kit/logout_request"
|
41
34
|
require "saml/kit/metadata"
|
42
35
|
require "saml/kit/composite_metadata"
|
43
36
|
require "saml/kit/response"
|
44
|
-
require "saml/kit/id"
|
45
37
|
require "saml/kit/identity_provider_metadata"
|
46
38
|
require "saml/kit/invalid_document"
|
47
|
-
require "saml/kit/self_signed_certificate"
|
48
39
|
require "saml/kit/service_provider_metadata"
|
49
40
|
require "saml/kit/signature"
|
50
|
-
require "saml/kit/signatures"
|
51
|
-
require "saml/kit/template"
|
52
|
-
require "saml/kit/xml"
|
53
|
-
require "saml/kit/xml_decryption"
|
54
41
|
|
55
42
|
I18n.load_path += Dir[File.expand_path("kit/locales/*.yml", File.dirname(__FILE__))]
|
56
43
|
|
data/lib/saml/kit/assertion.rb
CHANGED
@@ -72,17 +72,20 @@ module Saml
|
|
72
72
|
attr_reader :configuration
|
73
73
|
|
74
74
|
def assertion
|
75
|
-
@assertion ||=
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
75
|
+
@assertion ||=
|
76
|
+
if encrypted?
|
77
|
+
private_keys = configuration.private_keys(use: :encryption)
|
78
|
+
decryptor = ::Xml::Kit::Decryption.new(private_keys: private_keys)
|
79
|
+
decrypted = decryptor.decrypt(@xml_hash['Response']['EncryptedAssertion'])
|
80
|
+
Saml::Kit.logger.debug(decrypted)
|
81
|
+
Hash.from_xml(decrypted)['Assertion']
|
82
|
+
else
|
83
|
+
result = @xml_hash.fetch('Response', {}).fetch('Assertion', {})
|
84
|
+
return result if result.is_a?(Hash)
|
85
|
+
|
86
|
+
errors[:assertion] << error_message(:must_contain_single_assertion)
|
87
|
+
{}
|
88
|
+
end
|
86
89
|
end
|
87
90
|
|
88
91
|
def parse_date(value)
|
data/lib/saml/kit/builders.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
+
require 'saml/kit/xml_templatable'
|
1
2
|
require 'saml/kit/builders/assertion'
|
2
3
|
require 'saml/kit/builders/authentication_request'
|
4
|
+
require 'saml/kit/builders/encrypted_assertion'
|
3
5
|
require 'saml/kit/builders/identity_provider_metadata'
|
4
6
|
require 'saml/kit/builders/logout_request'
|
5
7
|
require 'saml/kit/builders/logout_response'
|
6
8
|
require 'saml/kit/builders/metadata'
|
7
9
|
require 'saml/kit/builders/response'
|
8
10
|
require 'saml/kit/builders/service_provider_metadata'
|
9
|
-
require 'saml/kit/builders/xml_encryption'
|
10
|
-
require 'saml/kit/builders/xml_signature'
|
11
11
|
|
12
12
|
module Saml
|
13
13
|
module Kit
|
@@ -1,11 +1,12 @@
|
|
1
1
|
module Saml
|
2
2
|
module Kit
|
3
3
|
module Builders
|
4
|
+
# {include:file:lib/saml/kit/builders/templates/assertion.builder}
|
4
5
|
class Assertion
|
5
|
-
include
|
6
|
+
include XmlTemplatable
|
6
7
|
extend Forwardable
|
7
8
|
|
8
|
-
def_delegators :@response_builder, :
|
9
|
+
def_delegators :@response_builder, :embed_signature, :request, :issuer, :reference_id, :now, :configuration, :user, :version, :destination
|
9
10
|
|
10
11
|
def initialize(response_builder)
|
11
12
|
@response_builder = response_builder
|
@@ -1,16 +1,17 @@
|
|
1
1
|
module Saml
|
2
2
|
module Kit
|
3
3
|
module Builders
|
4
|
+
# {include:file:lib/saml/kit/builders/templates/authentication_request.builder}
|
4
5
|
# {include:file:spec/saml/builders/authentication_request_spec.rb}
|
5
6
|
class AuthenticationRequest
|
6
|
-
include
|
7
|
+
include XmlTemplatable
|
7
8
|
attr_accessor :id, :now, :issuer, :assertion_consumer_service_url, :name_id_format, :destination
|
8
9
|
attr_accessor :version
|
9
10
|
attr_reader :configuration
|
10
11
|
|
11
12
|
def initialize(configuration: Saml::Kit.configuration)
|
12
13
|
@configuration = configuration
|
13
|
-
@id = Id.generate
|
14
|
+
@id = ::Xml::Kit::Id.generate
|
14
15
|
@issuer = configuration.issuer
|
15
16
|
@name_id_format = Namespaces::PERSISTENT
|
16
17
|
@now = Time.now.utc
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Saml
|
2
|
+
module Kit
|
3
|
+
module Builders
|
4
|
+
# {include:file:lib/saml/kit/builders/templates/encrypted_assertion.builder}
|
5
|
+
class EncryptedAssertion
|
6
|
+
include XmlTemplatable
|
7
|
+
extend Forwardable
|
8
|
+
|
9
|
+
attr_reader :assertion
|
10
|
+
def_delegators :@response_builder, :configuration, :encryption_certificate
|
11
|
+
|
12
|
+
def initialize(response_builder, assertion)
|
13
|
+
@response_builder = response_builder
|
14
|
+
@assertion = assertion
|
15
|
+
@encrypt = true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
module Saml
|
2
2
|
module Kit
|
3
3
|
module Builders
|
4
|
+
# {include:file:lib/saml/kit/builders/templates/identity_provider_metadata.builder}
|
4
5
|
# {include:file:spec/saml/builders/identity_provider_metadata_spec.rb}
|
5
6
|
class IdentityProviderMetadata
|
6
|
-
include
|
7
|
+
include XmlTemplatable
|
7
8
|
extend Forwardable
|
8
9
|
attr_accessor :attributes, :name_id_formats
|
9
10
|
attr_accessor :want_authn_requests_signed
|
@@ -16,7 +17,7 @@ module Saml
|
|
16
17
|
@attributes = []
|
17
18
|
@configuration = configuration
|
18
19
|
@entity_id = configuration.issuer
|
19
|
-
@id = Id.generate
|
20
|
+
@id = ::Xml::Kit::Id.generate
|
20
21
|
@logout_urls = []
|
21
22
|
@name_id_formats = [Namespaces::PERSISTENT]
|
22
23
|
@single_sign_on_urls = []
|
@@ -42,7 +43,7 @@ module Saml
|
|
42
43
|
def entity_descriptor_options
|
43
44
|
{
|
44
45
|
'xmlns': Namespaces::METADATA,
|
45
|
-
'xmlns:ds': Namespaces::XMLDSIG,
|
46
|
+
'xmlns:ds': ::Xml::Kit::Namespaces::XMLDSIG,
|
46
47
|
'xmlns:saml': Namespaces::ASSERTION,
|
47
48
|
ID: id,
|
48
49
|
entityID: entity_id,
|
@@ -1,9 +1,10 @@
|
|
1
1
|
module Saml
|
2
2
|
module Kit
|
3
3
|
module Builders
|
4
|
+
# {include:file:lib/saml/kit/builders/templates/logout_request.builder}
|
4
5
|
# {include:file:spec/saml/builders/logout_request_spec.rb}
|
5
6
|
class LogoutRequest
|
6
|
-
include
|
7
|
+
include XmlTemplatable
|
7
8
|
attr_accessor :id, :destination, :issuer, :name_id_format, :now
|
8
9
|
attr_accessor :version
|
9
10
|
attr_reader :user, :configuration
|
@@ -11,7 +12,7 @@ module Saml
|
|
11
12
|
def initialize(user, configuration: Saml::Kit.configuration)
|
12
13
|
@configuration = configuration
|
13
14
|
@user = user
|
14
|
-
@id =
|
15
|
+
@id = ::Xml::Kit::Id.generate
|
15
16
|
@issuer = configuration.issuer
|
16
17
|
@name_id_format = Saml::Kit::Namespaces::PERSISTENT
|
17
18
|
@now = Time.now.utc
|
@@ -1,16 +1,17 @@
|
|
1
1
|
module Saml
|
2
2
|
module Kit
|
3
3
|
module Builders
|
4
|
+
# {include:file:lib/saml/kit/builders/templates/logout_response.builder}
|
4
5
|
# {include:file:spec/saml/builders/logout_response_spec.rb}
|
5
6
|
class LogoutResponse
|
6
|
-
include
|
7
|
+
include XmlTemplatable
|
7
8
|
attr_accessor :id, :issuer, :version, :status_code, :now, :destination
|
8
9
|
attr_reader :request
|
9
10
|
attr_reader :configuration
|
10
11
|
|
11
12
|
def initialize(request, configuration: Saml::Kit.configuration)
|
12
13
|
@configuration = configuration
|
13
|
-
@id = Id.generate
|
14
|
+
@id = ::Xml::Kit::Id.generate
|
14
15
|
@issuer = configuration.issuer
|
15
16
|
@now = Time.now.utc
|
16
17
|
@request = request
|
@@ -1,9 +1,10 @@
|
|
1
1
|
module Saml
|
2
2
|
module Kit
|
3
3
|
module Builders
|
4
|
+
# {include:file:lib/saml/kit/builders/templates/metadata.builder}
|
4
5
|
# {include:file:spec/saml/builders/metadata_spec.rb}
|
5
6
|
class Metadata
|
6
|
-
include
|
7
|
+
include XmlTemplatable
|
7
8
|
|
8
9
|
attr_accessor :entity_id
|
9
10
|
attr_accessor :id
|
@@ -13,7 +14,7 @@ module Saml
|
|
13
14
|
attr_reader :configuration
|
14
15
|
|
15
16
|
def initialize(configuration: Saml::Kit.configuration)
|
16
|
-
@id = Id.generate
|
17
|
+
@id = ::Xml::Kit::Id.generate
|
17
18
|
@entity_id = configuration.issuer
|
18
19
|
@configuration = configuration
|
19
20
|
end
|
@@ -39,7 +40,7 @@ module Saml
|
|
39
40
|
def entity_descriptor_options
|
40
41
|
{
|
41
42
|
'xmlns': Namespaces::METADATA,
|
42
|
-
'xmlns:ds': Namespaces::XMLDSIG,
|
43
|
+
'xmlns:ds': ::Xml::Kit::Namespaces::XMLDSIG,
|
43
44
|
'xmlns:saml': Namespaces::ASSERTION,
|
44
45
|
ID: id,
|
45
46
|
entityID: entity_id,
|
@@ -1,20 +1,21 @@
|
|
1
1
|
module Saml
|
2
2
|
module Kit
|
3
3
|
module Builders
|
4
|
+
# {include:file:lib/saml/kit/builders/templates/response.builder}
|
4
5
|
# {include:file:spec/saml/builders/response_spec.rb}
|
5
6
|
class Response
|
6
|
-
include
|
7
|
+
include XmlTemplatable
|
7
8
|
attr_reader :user, :request
|
8
9
|
attr_accessor :id, :reference_id, :now
|
9
10
|
attr_accessor :version, :status_code
|
10
|
-
attr_accessor :issuer, :destination
|
11
|
+
attr_accessor :issuer, :destination
|
11
12
|
attr_reader :configuration
|
12
13
|
|
13
14
|
def initialize(user, request, configuration: Saml::Kit.configuration)
|
14
15
|
@user = user
|
15
16
|
@request = request
|
16
|
-
@id = Id.generate
|
17
|
-
@reference_id = Id.generate
|
17
|
+
@id = ::Xml::Kit::Id.generate
|
18
|
+
@reference_id = ::Xml::Kit::Id.generate
|
18
19
|
@now = Time.now.utc
|
19
20
|
@version = "2.0"
|
20
21
|
@status_code = Namespaces::SUCCESS
|
@@ -37,7 +38,15 @@ module Saml
|
|
37
38
|
private
|
38
39
|
|
39
40
|
def assertion
|
40
|
-
@assertion ||=
|
41
|
+
@assertion ||=
|
42
|
+
begin
|
43
|
+
assertion = Saml::Kit::Builders::Assertion.new(self)
|
44
|
+
if encrypt
|
45
|
+
Saml::Kit::Builders::EncryptedAssertion.new(self, assertion)
|
46
|
+
else
|
47
|
+
assertion
|
48
|
+
end
|
49
|
+
end
|
41
50
|
end
|
42
51
|
|
43
52
|
def response_options
|
@@ -1,9 +1,10 @@
|
|
1
1
|
module Saml
|
2
2
|
module Kit
|
3
3
|
module Builders
|
4
|
+
# {include:file:lib/saml/kit/builders/templates/service_provider_metadata.builder}
|
4
5
|
# {include:file:spec/saml/builders/service_provider_metadata_spec.rb}
|
5
6
|
class ServiceProviderMetadata
|
6
|
-
include
|
7
|
+
include XmlTemplatable
|
7
8
|
extend Forwardable
|
8
9
|
attr_accessor :acs_urls, :logout_urls, :name_id_formats
|
9
10
|
attr_accessor :want_assertions_signed
|
@@ -1,29 +1,27 @@
|
|
1
|
-
|
2
|
-
xml.
|
3
|
-
|
4
|
-
|
5
|
-
xml.
|
6
|
-
|
7
|
-
xml.
|
8
|
-
xml.SubjectConfirmationData "", subject_confirmation_data_options
|
9
|
-
end
|
1
|
+
xml.Assertion(assertion_options) do
|
2
|
+
xml.Issuer issuer
|
3
|
+
signature_for(reference_id: reference_id, xml: xml)
|
4
|
+
xml.Subject do
|
5
|
+
xml.NameID name_id, Format: name_id_format
|
6
|
+
xml.SubjectConfirmation Method: Saml::Kit::Namespaces::BEARER do
|
7
|
+
xml.SubjectConfirmationData "", subject_confirmation_data_options
|
10
8
|
end
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
end
|
10
|
+
xml.Conditions conditions_options do
|
11
|
+
xml.AudienceRestriction do
|
12
|
+
xml.Audience request.issuer
|
15
13
|
end
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
14
|
+
end
|
15
|
+
xml.AuthnStatement authn_statement_options do
|
16
|
+
xml.AuthnContext do
|
17
|
+
xml.AuthnContextClassRef Saml::Kit::Namespaces::PASSWORD
|
20
18
|
end
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
19
|
+
end
|
20
|
+
if assertion_attributes.any?
|
21
|
+
xml.AttributeStatement do
|
22
|
+
assertion_attributes.each do |key, value|
|
23
|
+
xml.Attribute Name: key, NameFormat: Saml::Kit::Namespaces::URI, FriendlyName: key do
|
24
|
+
xml.AttributeValue value.to_s
|
27
25
|
end
|
28
26
|
end
|
29
27
|
end
|
@@ -53,7 +53,7 @@ module Saml
|
|
53
53
|
# @param passphrase [String] the password to decrypt the private key.
|
54
54
|
# @param use [Symbol] the type of key pair, `:signing` or `:encryption`
|
55
55
|
def add_key_pair(certificate, private_key, passphrase: '', use: :signing)
|
56
|
-
@key_pairs.push(KeyPair.new(certificate, private_key, passphrase, use.to_sym))
|
56
|
+
@key_pairs.push(::Xml::Kit::KeyPair.new(certificate, private_key, passphrase, use.to_sym))
|
57
57
|
end
|
58
58
|
|
59
59
|
# Generates a unique key pair that can be used for signing or encryption.
|
@@ -61,7 +61,7 @@ module Saml
|
|
61
61
|
# @param use [Symbol] the type of key pair, `:signing` or `:encryption`
|
62
62
|
# @param passphrase [String] the private key passphrase to use.
|
63
63
|
def generate_key_pair_for(use:, passphrase: SecureRandom.uuid)
|
64
|
-
certificate, private_key = SelfSignedCertificate.new(passphrase).create
|
64
|
+
certificate, private_key = ::Xml::Kit::SelfSignedCertificate.new(passphrase).create
|
65
65
|
add_key_pair(certificate, private_key, passphrase: passphrase, use: use)
|
66
66
|
end
|
67
67
|
|
data/lib/saml/kit/document.rb
CHANGED
@@ -2,6 +2,13 @@ module Saml
|
|
2
2
|
module Kit
|
3
3
|
class Document
|
4
4
|
PROTOCOL_XSD = File.expand_path("./xsd/saml-schema-protocol-2.0.xsd", File.dirname(__FILE__)).freeze
|
5
|
+
NAMESPACES = {
|
6
|
+
"NameFormat": ::Saml::Kit::Namespaces::ATTR_SPLAT,
|
7
|
+
"ds": ::Xml::Kit::Namespaces::XMLDSIG,
|
8
|
+
"md": ::Saml::Kit::Namespaces::METADATA,
|
9
|
+
"saml": ::Saml::Kit::Namespaces::ASSERTION,
|
10
|
+
"samlp": ::Saml::Kit::Namespaces::PROTOCOL,
|
11
|
+
}.freeze
|
5
12
|
include ActiveModel::Validations
|
6
13
|
include XsdValidatable
|
7
14
|
include Translatable
|
@@ -79,12 +86,15 @@ module Saml
|
|
79
86
|
# @param xml [String] the raw xml string.
|
80
87
|
# @param configuration [Saml::Kit::Configuration] the configuration to use for unpacking the document.
|
81
88
|
def to_saml_document(xml, configuration: Saml::Kit.configuration)
|
89
|
+
xml_document = ::Xml::Kit::Document.new(xml, namespaces: {
|
90
|
+
"samlp": ::Saml::Kit::Namespaces::PROTOCOL
|
91
|
+
})
|
82
92
|
constructor = {
|
83
93
|
"AuthnRequest" => Saml::Kit::AuthenticationRequest,
|
84
94
|
"LogoutRequest" => Saml::Kit::LogoutRequest,
|
85
95
|
"LogoutResponse" => Saml::Kit::LogoutResponse,
|
86
96
|
"Response" => Saml::Kit::Response,
|
87
|
-
}[
|
97
|
+
}[xml_document.find_by(XPATH).name] || InvalidDocument
|
88
98
|
constructor.new(xml, configuration: configuration)
|
89
99
|
rescue => error
|
90
100
|
Saml::Kit.logger.error(error)
|