libsaml 2.12.1 → 2.13.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7e61d591af0a0359bfeebe1d244073d64882d50c
4
- data.tar.gz: a884a8d7a3f7fd48b28a7ed771ebb35344fd6c63
3
+ metadata.gz: 5359f70cb191c9ed46d66b875efca2c5a456eef1
4
+ data.tar.gz: 1c6d0fa41102a3c807c05fdf3d7d21f7b5e6a5ed
5
5
  SHA512:
6
- metadata.gz: ea787ba8b41825c9f43426e96c00ab01bc6b962ab3344c2885ba131dd5976169db473eff36c48d4fa8ffb610ecf9dc031611883ac3f598cd9a73e55813f9e494
7
- data.tar.gz: 437d89e72e92a29fb2f30174299ca7ded94c19654f8abfa96caf4f561f24099d34f3ba658ee37b3ce60a874aa5637e3a9261edc2356e090e479d6734a817d7ed
6
+ metadata.gz: 8379e0e7114a14b779325201a333226b803135d5ff417ad48e601e47d20f087bdce965a26cf29fab9adb48d81be00f6fe5d3bd86aac74e27c202a4c5306d9823
7
+ data.tar.gz: 6bce47311f98cdc0aba1ceaee744e76005c5465ef013a3e9410f72b170d21049ff52c898e5c32810f05d5de930b3258a366fe22a74d8fd7e9c7fedf73c739580
data/lib/saml/base.rb CHANGED
@@ -8,6 +8,9 @@ module Saml
8
8
  include ::HappyMapper
9
9
  include ::ActiveModel::Validations
10
10
 
11
+ attr_accessor :xml_value
12
+ has_xml_content
13
+
11
14
  extend HappyMapperClassMethods
12
15
  include HappyMapperInstanceMethods
13
16
  end
@@ -19,9 +22,7 @@ module Saml
19
22
  end
20
23
  end
21
24
 
22
- def from_xml=(bool)
23
- @from_xml = bool
24
- end
25
+ attr_writer :from_xml
25
26
 
26
27
  def from_xml?
27
28
  @from_xml
@@ -23,9 +23,8 @@ module Saml
23
23
 
24
24
  def initialize(*args)
25
25
  super(*args)
26
- options = args.extract_options!
27
- @signed_info ||= SignedInfo.new(:uri => options.delete(:uri), :digest_value => options.delete(:digest_value))
28
- @key_info ||= KeyInfo.new
26
+ options = args.extract_options!
27
+ @signed_info ||= SignedInfo.new(:uri => options.delete(:uri), :digest_value => options.delete(:digest_value))
29
28
  end
30
29
 
31
30
  def key_name
data/lib/saml/provider.rb CHANGED
@@ -3,24 +3,25 @@ module Saml
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  def assertion_consumer_service_url(index = nil)
6
- find_indexed_service_url(descriptor.assertion_consumer_services, index)
6
+ find_indexed_service_url(sp_descriptor.assertion_consumer_services, index)
7
7
  end
8
8
 
9
- def artifact_resolution_service_url(index = nil)
10
- find_indexed_service_url(descriptor.artifact_resolution_services, index)
9
+ # @param [Symbol] type (see #descriptor)
10
+ def artifact_resolution_service_url(index = nil, type = :descriptor)
11
+ find_indexed_service_url(descriptor(type).artifact_resolution_services, index)
11
12
  end
12
13
 
13
14
  def attribute_consuming_service(index = nil)
14
- find_indexed_service(descriptor.attribute_consuming_services, index)
15
+ find_indexed_service(sp_descriptor.attribute_consuming_services, index)
15
16
  end
16
17
 
17
18
  def assertion_consumer_service(index = nil)
18
- find_indexed_service(descriptor.assertion_consumer_services, index)
19
+ find_indexed_service(sp_descriptor.assertion_consumer_services, index)
19
20
  end
20
21
 
21
22
  def assertion_consumer_service_indices
22
- if descriptor.assertion_consumer_services.present?
23
- descriptor.assertion_consumer_services.map(&:index)
23
+ if sp_descriptor.assertion_consumer_services.present?
24
+ sp_descriptor.assertion_consumer_services.map(&:index)
24
25
  else
25
26
  []
26
27
  end
@@ -34,13 +35,15 @@ module Saml
34
35
  entity_descriptor.entity_id
35
36
  end
36
37
 
37
- def certificate(key_name = nil, use = "signing")
38
- key_descriptor = find_key_descriptor(key_name, use)
38
+ # @param [Symbol] type (see #descriptor)
39
+ def certificate(key_name = nil, use = "signing", type = :descriptor)
40
+ key_descriptor = find_key_descriptor(key_name, use, type)
39
41
  key_descriptor.certificate if key_descriptor
40
42
  end
41
43
 
42
- def find_key_descriptor(key_name = nil, use = "signing")
43
- descriptor.find_key_descriptor(key_name, use)
44
+ # @param [Symbol] type (see #descriptor)
45
+ def find_key_descriptor(key_name = nil, use = "signing", type = :descriptor)
46
+ descriptor(type).find_key_descriptor(key_name, use)
44
47
  end
45
48
 
46
49
  def private_key
@@ -52,19 +55,28 @@ module Saml
52
55
  end
53
56
 
54
57
  def single_sign_on_service_url(binding)
55
- find_binding_service(descriptor.single_sign_on_services, binding)
58
+ find_binding_service(idp_descriptor.single_sign_on_services, binding)
56
59
  end
57
60
 
58
- def single_logout_service_url(binding)
59
- find_binding_service(descriptor.single_logout_services, binding)
61
+ # @param [Symbol] type (see #descriptor)
62
+ def single_logout_service_url(binding, type = :descriptor)
63
+ find_binding_service(descriptor(type).single_logout_services, binding)
60
64
  end
61
65
 
62
66
  def attribute_service_url(binding)
63
- find_binding_service(entity_descriptor.attribute_authority_descriptor.attribute_service, binding)
67
+ find_binding_service(aa_descriptor.attribute_service, binding)
64
68
  end
65
69
 
66
70
  def type
67
- descriptor.is_a?(Saml::Elements::SPSSODescriptor) ? "service_provider" : "identity_provider"
71
+ if idp_descriptor(false)
72
+ if sp_descriptor(false)
73
+ "identity_and_service_provider"
74
+ else
75
+ "identity_provider"
76
+ end
77
+ else
78
+ "service_provider"
79
+ end
68
80
  end
69
81
 
70
82
  def verify(signature_algorithm, signature, data, key_name = nil)
@@ -72,7 +84,7 @@ module Saml
72
84
  end
73
85
 
74
86
  def authn_requests_signed?
75
- descriptor.authn_requests_signed
87
+ sp_descriptor.authn_requests_signed
76
88
  end
77
89
 
78
90
  private
@@ -87,11 +99,34 @@ module Saml
87
99
  end
88
100
  end
89
101
 
90
- # @return [Saml::ComplexTypes::RoleDescriptorType]
91
- def descriptor
102
+ # @param type [Symbol] Descriptor type, available types :sp_descriptor, :idp_descriptor, :aa_descriptor or :descriptor
103
+ # @return [Saml::ComplexTypes::SSODescriptorType]
104
+ def descriptor(type = :descriptor)
105
+ return sp_descriptor if :sp_descriptor == type
106
+ return idp_descriptor if :idp_descriptor == type
107
+ return aa_descriptor if :aa_descriptor == type
92
108
  entity_descriptor.sp_sso_descriptor || entity_descriptor.idp_sso_descriptor || entity_descriptor.attribute_authority_descriptor
93
109
  end
94
110
 
111
+ # @return [Saml::Elements::SPSSODescriptor]
112
+ def sp_descriptor(raise_error = true)
113
+ entity_descriptor.sp_sso_descriptor || raise_error &&
114
+ raise(Saml::Errors::InvalidProvider.new("Cannot find service provider with entity_id: #{entity_id}"))
115
+ end
116
+
117
+ # @return [Saml::Elements::IDPSSODescriptor]
118
+ def idp_descriptor(raise_error = true)
119
+ entity_descriptor.idp_sso_descriptor || raise_error &&
120
+ raise(Saml::Errors::InvalidProvider.new("Cannot find identity provider with entity_id: #{entity_id}"))
121
+ end
122
+
123
+ # Attribute authority descriptor
124
+ # @return [Saml::Elements::AttributeAuthorityDescriptor]
125
+ def aa_descriptor(raise_error = true)
126
+ entity_descriptor.attribute_authority_descriptor || raise_error &&
127
+ raise(Saml::Errors::InvalidProvider.new("Cannot find attribute authority provider with entity_id: #{entity_id}"))
128
+ end
129
+
95
130
  def find_indexed_service_url(service_list, index)
96
131
  service = find_indexed_service(service_list, index)
97
132
  service.location if service
data/lib/saml/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Saml
2
- VERSION = "2.12.1"
2
+ VERSION = "2.13.1"
3
3
  end
@@ -8,20 +8,24 @@ module Saml
8
8
  self.signature.key_info = Saml::Elements::KeyInfo.new(x509certificate.to_pem) if x509certificate
9
9
  end
10
10
 
11
- def to_xml(builder = nil, default_namespace = nil, instruct = true)
11
+ def to_xml(*args)
12
+ options = args.extract_options!
13
+ builder, default_namespace, instruct = args
14
+ instruct = true if instruct.nil?
15
+
12
16
  write_xml = builder.nil? ? true : false
13
17
  builder ||= Nokogiri::XML::Builder.new
14
18
  builder.doc.encoding = "UTF-8"
15
19
  result = super(builder, default_namespace)
20
+
16
21
  if write_xml
17
- instruct ? result.to_xml : result.doc.root
22
+ instruct ? result.to_xml(nokogiri_options(options)) : result.doc.root
18
23
  else
19
24
  result
20
25
  end
21
-
22
26
  end
23
27
 
24
- def to_soap
28
+ def to_soap(options = {})
25
29
  builder = Nokogiri::XML::Builder.new
26
30
  body = self.to_xml(builder)
27
31
 
@@ -32,7 +36,17 @@ module Saml
32
36
  builder.parent.add_child body.doc.root
33
37
  end
34
38
  end
35
- builder.to_xml
39
+ builder.to_xml(nokogiri_options(options))
40
+ end
41
+
42
+ private
43
+
44
+ def nokogiri_options(options)
45
+ nokogiri_options = {
46
+ save_with: Nokogiri::XML::Node::SaveOptions::AS_XML | Nokogiri::XML::Node::SaveOptions::FORMAT
47
+ }
48
+ nokogiri_options[:save_with] = Nokogiri::XML::Node::SaveOptions::AS_XML if options[:no_space]
49
+ nokogiri_options
36
50
  end
37
51
  end
38
52
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libsaml
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.12.1
4
+ version: 2.13.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benoist Claassen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-16 00:00:00.000000000 Z
11
+ date: 2015-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.3.0
61
+ version: 0.3.2
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.3.0
68
+ version: 0.3.2
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: xmlenc
71
71
  requirement: !ruby/object:Gem::Requirement