saml_idp 0.9.0 → 1.0.0

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +54 -49
  3. data/lib/saml_idp/assertion_builder.rb +28 -3
  4. data/lib/saml_idp/configurator.rb +8 -3
  5. data/lib/saml_idp/controller.rb +27 -18
  6. data/lib/saml_idp/encryptor.rb +0 -1
  7. data/lib/saml_idp/fingerprint.rb +19 -0
  8. data/lib/saml_idp/incoming_metadata.rb +22 -0
  9. data/lib/saml_idp/metadata_builder.rb +25 -9
  10. data/lib/saml_idp/persisted_metadata.rb +4 -0
  11. data/lib/saml_idp/request.rb +90 -13
  12. data/lib/saml_idp/response_builder.rb +26 -6
  13. data/lib/saml_idp/saml_response.rb +62 -28
  14. data/lib/saml_idp/service_provider.rb +2 -6
  15. data/lib/saml_idp/signable.rb +1 -2
  16. data/lib/saml_idp/signature_builder.rb +2 -1
  17. data/lib/saml_idp/signed_info_builder.rb +2 -2
  18. data/lib/saml_idp/version.rb +1 -1
  19. data/lib/saml_idp/xml_security.rb +19 -14
  20. data/lib/saml_idp.rb +4 -3
  21. data/saml_idp.gemspec +32 -31
  22. data/spec/lib/saml_idp/assertion_builder_spec.rb +143 -0
  23. data/spec/lib/saml_idp/configurator_spec.rb +40 -2
  24. data/spec/lib/saml_idp/controller_spec.rb +66 -8
  25. data/spec/lib/saml_idp/fingerprint_spec.rb +14 -0
  26. data/spec/lib/saml_idp/incoming_metadata_spec.rb +89 -1
  27. data/spec/lib/saml_idp/metadata_builder_spec.rb +24 -1
  28. data/spec/lib/saml_idp/request_spec.rb +153 -64
  29. data/spec/lib/saml_idp/response_builder_spec.rb +3 -1
  30. data/spec/lib/saml_idp/saml_response_spec.rb +141 -7
  31. data/spec/rails_app/app/controllers/saml_controller.rb +1 -5
  32. data/spec/rails_app/app/controllers/saml_idp_controller.rb +55 -3
  33. data/{app → spec/rails_app/app}/views/saml_idp/idp/new.html.erb +3 -4
  34. data/{app → spec/rails_app/app}/views/saml_idp/idp/saml_post.html.erb +1 -1
  35. data/spec/rails_app/config/application.rb +1 -0
  36. data/spec/rails_app/config/boot.rb +1 -1
  37. data/spec/rails_app/config/environments/development.rb +2 -0
  38. data/spec/spec_helper.rb +20 -1
  39. data/spec/support/certificates/sp_cert_req.csr +12 -0
  40. data/spec/support/certificates/sp_private_key.pem +16 -0
  41. data/spec/support/certificates/sp_x509_cert.crt +18 -0
  42. data/spec/support/saml_request_macros.rb +105 -4
  43. data/spec/support/security_helpers.rb +12 -2
  44. data/spec/xml_security_spec.rb +11 -7
  45. metadata +96 -62
  46. data/app/controllers/saml_idp/idp_controller.rb +0 -59
@@ -0,0 +1,18 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIC2DCCAkGgAwIBAgIBADANBgkqhkiG9w0BAQ0FADCBiDELMAkGA1UEBhMCanAx
3
+ DjAMBgNVBAgMBVRva3lvMQswCQYDVQQKDAJHUzEgMB4GA1UEAwwXaHR0cHM6Ly9m
4
+ b28uZXhhbXBsZS5jb20xDDAKBgNVBAcMA0ZvbzEMMAoGA1UECwwDQm9vMR4wHAYJ
5
+ KoZIhvcNAQkBFg9mb29AZXhhbXBsZS5jb20wHhcNMjAwMTIzMDYyMzI5WhcNNDcw
6
+ NjA5MDYyMzI5WjCBiDELMAkGA1UEBhMCanAxDjAMBgNVBAgMBVRva3lvMQswCQYD
7
+ VQQKDAJHUzEgMB4GA1UEAwwXaHR0cHM6Ly9mb28uZXhhbXBsZS5jb20xDDAKBgNV
8
+ BAcMA0ZvbzEMMAoGA1UECwwDQm9vMR4wHAYJKoZIhvcNAQkBFg9mb29AZXhhbXBs
9
+ ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALwNWPaZUtBXsCNP5ycu
10
+ /eQOdAW8CjdF1R4YaGmWxgVpxgHLM1EP+N6C67VqGu/OcPJk3ynfIHs49ua3SvRo
11
+ av7JjM+HpuuCR/m7oUy1ZOP3i8tC5P+7JAa7N0GSItvmYBZEy2bjegdcMrS/bkm2
12
+ wbU8mee2Rd8EOkU/V5Ys76NnAgMBAAGjUDBOMB0GA1UdDgQWBBQMtOtrh2VS/mh4
13
+ awGbKA37vVnw+zAfBgNVHSMEGDAWgBQMtOtrh2VS/mh4awGbKA37vVnw+zAMBgNV
14
+ HRMEBTADAQH/MA0GCSqGSIb3DQEBDQUAA4GBAHjTTm4Hyx1rfzygknc6q1dYwpEv
15
+ /3AsPiTnF4AfH/5kGIIXNzwg0ADsziFMJYRRR9eMu97CHQbr8gHt99P8uaen6cmJ
16
+ 4VCwJLP2N8gZrycssimA3M83DWRRVZbxZhpuUWNajtYIxwyUbB7eRSJgz3Tc0opF
17
+ 933YwucWuFzKSqn3
18
+ -----END CERTIFICATE-----
@@ -1,10 +1,10 @@
1
1
  require 'saml_idp/logout_request_builder'
2
2
 
3
3
  module SamlRequestMacros
4
- def make_saml_request(requested_saml_acs_url = "https://foo.example.com/saml/consume")
4
+ def make_saml_request(requested_saml_acs_url = "https://foo.example.com/saml/consume", enable_secure_options = false)
5
5
  auth_request = OneLogin::RubySaml::Authrequest.new
6
- auth_url = auth_request.create(saml_settings(requested_saml_acs_url))
7
- CGI.unescape(auth_url.split("=").last)
6
+ auth_url = auth_request.create_params(saml_settings(requested_saml_acs_url, enable_secure_options))
7
+ auth_url['SAMLRequest']
8
8
  end
9
9
 
10
10
  def make_saml_logout_request(requested_saml_logout_url = 'https://foo.example.com/saml/logout')
@@ -18,21 +18,122 @@ module SamlRequestMacros
18
18
  Base64.strict_encode64(request_builder.signed)
19
19
  end
20
20
 
21
- def saml_settings(saml_acs_url = "https://foo.example.com/saml/consume")
21
+ def make_saml_sp_slo_request(param_type: true, security_options: {})
22
+ logout_request = OneLogin::RubySaml::Logoutrequest.new
23
+ saml_sp_setting = saml_settings("https://foo.example.com/saml/consume", true, security_options: security_options)
24
+ if param_type
25
+ logout_request.create_params(saml_sp_setting, 'RelayState' => 'https://foo.example.com/home')
26
+ else
27
+ logout_request.create(saml_sp_setting, 'RelayState' => 'https://foo.example.com/home')
28
+ end
29
+ end
30
+
31
+ def generate_sp_metadata(saml_acs_url = "https://foo.example.com/saml/consume", enable_secure_options = false)
32
+ sp_metadata = OneLogin::RubySaml::Metadata.new
33
+ sp_metadata.generate(saml_settings(saml_acs_url, enable_secure_options), true)
34
+ end
35
+
36
+ def saml_settings(saml_acs_url = "https://foo.example.com/saml/consume", enable_secure_options = false, security_options: {})
22
37
  settings = OneLogin::RubySaml::Settings.new
23
38
  settings.assertion_consumer_service_url = saml_acs_url
24
39
  settings.issuer = "http://example.com/issuer"
25
40
  settings.idp_sso_target_url = "http://idp.com/saml/idp"
41
+ settings.idp_slo_target_url = "http://idp.com/saml/slo"
26
42
  settings.assertion_consumer_logout_service_url = 'https://foo.example.com/saml/logout'
27
43
  settings.idp_cert_fingerprint = SamlIdp::Default::FINGERPRINT
28
44
  settings.name_identifier_format = SamlIdp::Default::NAME_ID_FORMAT
45
+ add_securty_options(settings, default_sp_security_options.merge!(security_options)) if enable_secure_options
29
46
  settings
30
47
  end
31
48
 
49
+ def add_securty_options(settings, options = default_sp_security_options)
50
+ # Security section
51
+ settings.idp_cert = SamlIdp::Default::X509_CERTIFICATE
52
+ # Signed embedded singature
53
+ settings.security[:authn_requests_signed] = options[:authn_requests_signed]
54
+ settings.security[:embed_sign] = options[:embed_sign]
55
+ settings.security[:logout_requests_signed] = options[:logout_requests_signed]
56
+ settings.security[:logout_responses_signed] = options[:logout_responses_signed]
57
+ settings.security[:metadata_signed] = options[:digest_method]
58
+ settings.security[:digest_method] = options[:digest_method]
59
+ settings.security[:signature_method] = options[:signature_method]
60
+ settings.security[:want_assertions_signed] = options[:assertions_signed]
61
+ settings.private_key = sp_pv_key
62
+ settings.certificate = sp_x509_cert
63
+ end
64
+
65
+ def idp_configure(saml_acs_url = "https://foo.example.com/saml/consume", enable_secure_options = false)
66
+ SamlIdp.configure do |config|
67
+ config.x509_certificate = SamlIdp::Default::X509_CERTIFICATE
68
+ config.secret_key = SamlIdp::Default::SECRET_KEY
69
+ config.password = nil
70
+ config.algorithm = :sha256
71
+ config.organization_name = 'idp.com'
72
+ config.organization_url = 'http://idp.com'
73
+ config.base_saml_location = 'http://idp.com/saml/idp'
74
+ config.single_logout_service_post_location = 'http://idp.com/saml/idp/logout'
75
+ config.single_logout_service_redirect_location = 'http://idp.com/saml/idp/logout'
76
+ config.attribute_service_location = 'http://idp.com/saml/idp/attribute'
77
+ config.single_service_post_location = 'http://idp.com/saml/idp/sso'
78
+ config.name_id.formats = SamlIdp::Default::NAME_ID_FORMAT
79
+ config.service_provider.metadata_persister = lambda { |_identifier, _service_provider|
80
+ raw_metadata = generate_sp_metadata(saml_acs_url, enable_secure_options)
81
+ SamlIdp::IncomingMetadata.new(raw_metadata).to_h
82
+ }
83
+ config.service_provider.persisted_metadata_getter = lambda { |_identifier, _settings|
84
+ raw_metadata = generate_sp_metadata(saml_acs_url, enable_secure_options)
85
+ SamlIdp::IncomingMetadata.new(raw_metadata).to_h
86
+ }
87
+ config.service_provider.finder = lambda { |_issuer_or_entity_id|
88
+ {
89
+ response_hosts: [URI(saml_acs_url).host],
90
+ acs_url: saml_acs_url,
91
+ cert: sp_x509_cert,
92
+ fingerprint: SamlIdp::Fingerprint.certificate_digest(sp_x509_cert),
93
+ assertion_consumer_logout_service_url: 'https://foo.example.com/saml/logout'
94
+ }
95
+ }
96
+ end
97
+ end
98
+
99
+ def decode_saml_request(saml_request)
100
+ decoded_request = Base64.decode64(saml_request)
101
+ begin
102
+ # Try to decompress, since SAMLRequest might be compressed
103
+ Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(decoded_request)
104
+ rescue Zlib::DataError
105
+ # If it's not compressed, just return the decoded request
106
+ decoded_request
107
+ end
108
+ end
109
+
32
110
  def print_pretty_xml(xml_string)
33
111
  doc = REXML::Document.new xml_string
34
112
  outbuf = ""
35
113
  doc.write(outbuf, 1)
36
114
  puts outbuf
37
115
  end
116
+
117
+ def decode_saml_request(saml_request)
118
+ decoded_request = Base64.decode64(saml_request)
119
+ begin
120
+ # Try to decompress, since SAMLRequest might be compressed
121
+ Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(decoded_request)
122
+ rescue Zlib::DataError
123
+ # If it's not compressed, just return the decoded request
124
+ decoded_request
125
+ end
126
+ end
127
+
128
+ def default_sp_security_options
129
+ {
130
+ authn_requests_signed: true,
131
+ embed_sign: true,
132
+ logout_requests_signed: true,
133
+ logout_responses_signed: true,
134
+ digest_method: XMLSecurity::Document::SHA256,
135
+ signature_method: XMLSecurity::Document::RSA_SHA256,
136
+ assertions_signed: true
137
+ }
138
+ end
38
139
  end
@@ -51,11 +51,21 @@ module SecurityHelpers
51
51
  @signature_fingerprint1 ||= "C5:19:85:D9:47:F1:BE:57:08:20:25:05:08:46:EB:27:F6:CA:B7:83"
52
52
  end
53
53
 
54
- def signature_1
55
- @signature1 ||= File.read(File.join(File.dirname(__FILE__), 'certificates', 'certificate1'))
54
+ def certificate_1
55
+ @certificate_1 ||= File.read(File.join(File.dirname(__FILE__), 'certificates', 'certificate1'))
56
56
  end
57
57
 
58
58
  def r1_signature_2
59
59
  @signature2 ||= File.read(File.join(File.dirname(__FILE__), 'certificates', 'r1_certificate2_base64'))
60
60
  end
61
+
62
+ # Generated by SAML tool https://www.samltool.com/self_signed_certs.php
63
+ def sp_pv_key
64
+ @sp_pv_key ||= File.read(File.join(File.dirname(__FILE__), 'certificates', 'sp_private_key.pem'))
65
+ end
66
+
67
+ # Generated by SAML tool https://www.samltool.com/self_signed_certs.php, expired date is 9999
68
+ def sp_x509_cert
69
+ @sp_x509_cert ||= File.read(File.join(File.dirname(__FILE__), 'certificates', 'sp_x509_cert.crt'))
70
+ end
61
71
  end
@@ -19,7 +19,7 @@ module SamlIdp
19
19
  end
20
20
 
21
21
  it "it raise Fingerprint mismatch" do
22
- expect { document.validate("no:fi:ng:er:pr:in:t", false) }.to(
22
+ expect { document.validate("", "no:fi:ng:er:pr:in:t", false) }.to(
23
23
  raise_error(SamlIdp::XMLSecurity::SignedDocument::ValidationError, "Fingerprint mismatch")
24
24
  )
25
25
  end
@@ -45,10 +45,10 @@ module SamlIdp
45
45
  response = Base64.decode64(response_document)
46
46
  response.sub!(/<ds:X509Certificate>.*<\/ds:X509Certificate>/, "")
47
47
  document = XMLSecurity::SignedDocument.new(response)
48
- expect { document.validate("a fingerprint", false) }.to(
48
+ expect { document.validate("", "a fingerprint", false) }.to(
49
49
  raise_error(
50
50
  SamlIdp::XMLSecurity::SignedDocument::ValidationError,
51
- "Certificate element missing in response (ds:X509Certificate)"
51
+ "Certificate validation is required, but it doesn't exist."
52
52
  )
53
53
  )
54
54
  end
@@ -57,22 +57,26 @@ module SamlIdp
57
57
  describe "Algorithms" do
58
58
  it "validate using SHA1" do
59
59
  document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha1, false))
60
- expect(document.validate("F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72")).to be_truthy
60
+ base64cert = document.elements["//ds:X509Certificate"].text
61
+ expect(document.validate(base64cert, "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72")).to be_truthy
61
62
  end
62
63
 
63
64
  it "validate using SHA256" do
64
65
  document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha256, false))
65
- expect(document.validate("28:74:9B:E8:1F:E8:10:9C:A8:7C:A9:C3:E3:C5:01:6C:92:1C:B4:BA")).to be_truthy
66
+ base64cert = document.elements["//ds:X509Certificate"].text
67
+ expect(document.validate(base64cert, "28:74:9B:E8:1F:E8:10:9C:A8:7C:A9:C3:E3:C5:01:6C:92:1C:B4:BA")).to be_truthy
66
68
  end
67
69
 
68
70
  it "validate using SHA384" do
69
71
  document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha384, false))
70
- expect(document.validate("F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72")).to be_truthy
72
+ base64cert = document.elements["//ds:X509Certificate"].text
73
+ expect(document.validate(base64cert, "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72")).to be_truthy
71
74
  end
72
75
 
73
76
  it "validate using SHA512" do
74
77
  document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha512, false))
75
- expect(document.validate("F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72")).to be_truthy
78
+ base64cert = document.elements["//ds:X509Certificate"].text
79
+ expect(document.validate(base64cert, "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72")).to be_truthy
76
80
  end
77
81
  end
78
82
 
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saml_idp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Phenow
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2020-01-21 00:00:00.000000000 Z
10
+ date: 2025-10-09 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activesupport
@@ -16,64 +15,64 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '3.2'
18
+ version: '5.2'
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
- version: '3.2'
25
+ version: '5.2'
27
26
  - !ruby/object:Gem::Dependency
28
- name: uuid
27
+ name: builder
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
30
  - - ">="
32
31
  - !ruby/object:Gem::Version
33
- version: '2.3'
32
+ version: '3.0'
34
33
  type: :runtime
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
37
  - - ">="
39
38
  - !ruby/object:Gem::Version
40
- version: '2.3'
39
+ version: '3.0'
41
40
  - !ruby/object:Gem::Dependency
42
- name: builder
41
+ name: nokogiri
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - ">="
46
45
  - !ruby/object:Gem::Version
47
- version: '3.0'
46
+ version: 1.6.2
48
47
  type: :runtime
49
48
  prerelease: false
50
49
  version_requirements: !ruby/object:Gem::Requirement
51
50
  requirements:
52
51
  - - ">="
53
52
  - !ruby/object:Gem::Version
54
- version: '3.0'
53
+ version: 1.6.2
55
54
  - !ruby/object:Gem::Dependency
56
- name: nokogiri
55
+ name: ostruct
57
56
  requirement: !ruby/object:Gem::Requirement
58
57
  requirements:
59
58
  - - ">="
60
59
  - !ruby/object:Gem::Version
61
- version: 1.6.2
60
+ version: '0'
62
61
  type: :runtime
63
62
  prerelease: false
64
63
  version_requirements: !ruby/object:Gem::Requirement
65
64
  requirements:
66
65
  - - ">="
67
66
  - !ruby/object:Gem::Version
68
- version: 1.6.2
67
+ version: '0'
69
68
  - !ruby/object:Gem::Dependency
70
- name: rake
69
+ name: rexml
71
70
  requirement: !ruby/object:Gem::Requirement
72
71
  requirements:
73
72
  - - ">="
74
73
  - !ruby/object:Gem::Version
75
74
  version: '0'
76
- type: :development
75
+ type: :runtime
77
76
  prerelease: false
78
77
  version_requirements: !ruby/object:Gem::Requirement
79
78
  requirements:
@@ -81,119 +80,133 @@ dependencies:
81
80
  - !ruby/object:Gem::Version
82
81
  version: '0'
83
82
  - !ruby/object:Gem::Dependency
84
- name: simplecov
83
+ name: xmlenc
85
84
  requirement: !ruby/object:Gem::Requirement
86
85
  requirements:
87
86
  - - ">="
88
87
  - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
88
+ version: 0.7.1
89
+ type: :runtime
91
90
  prerelease: false
92
91
  version_requirements: !ruby/object:Gem::Requirement
93
92
  requirements:
94
93
  - - ">="
95
94
  - !ruby/object:Gem::Version
96
- version: '0'
95
+ version: 0.7.1
97
96
  - !ruby/object:Gem::Dependency
98
- name: rspec
97
+ name: activeresource
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '6.1'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '6.1'
110
+ - !ruby/object:Gem::Dependency
111
+ name: appraisal
99
112
  requirement: !ruby/object:Gem::Requirement
100
113
  requirements:
101
114
  - - ">="
102
115
  - !ruby/object:Gem::Version
103
- version: 3.7.0
116
+ version: '0'
104
117
  type: :development
105
118
  prerelease: false
106
119
  version_requirements: !ruby/object:Gem::Requirement
107
120
  requirements:
108
121
  - - ">="
109
122
  - !ruby/object:Gem::Version
110
- version: 3.7.0
123
+ version: '0'
111
124
  - !ruby/object:Gem::Dependency
112
- name: ruby-saml
125
+ name: capybara
113
126
  requirement: !ruby/object:Gem::Requirement
114
127
  requirements:
115
128
  - - ">="
116
129
  - !ruby/object:Gem::Version
117
- version: 1.7.2
130
+ version: '2.16'
118
131
  type: :development
119
132
  prerelease: false
120
133
  version_requirements: !ruby/object:Gem::Requirement
121
134
  requirements:
122
135
  - - ">="
123
136
  - !ruby/object:Gem::Version
124
- version: 1.7.2
137
+ version: '2.16'
125
138
  - !ruby/object:Gem::Dependency
126
139
  name: rails
127
140
  requirement: !ruby/object:Gem::Requirement
128
141
  requirements:
129
142
  - - ">="
130
143
  - !ruby/object:Gem::Version
131
- version: '3.2'
144
+ version: '5.2'
132
145
  type: :development
133
146
  prerelease: false
134
147
  version_requirements: !ruby/object:Gem::Requirement
135
148
  requirements:
136
149
  - - ">="
137
150
  - !ruby/object:Gem::Version
138
- version: '3.2'
151
+ version: '5.2'
139
152
  - !ruby/object:Gem::Dependency
140
- name: activeresource
153
+ name: debug
141
154
  requirement: !ruby/object:Gem::Requirement
142
155
  requirements:
143
156
  - - ">="
144
157
  - !ruby/object:Gem::Version
145
- version: '3.2'
158
+ version: '0'
146
159
  type: :development
147
160
  prerelease: false
148
161
  version_requirements: !ruby/object:Gem::Requirement
149
162
  requirements:
150
163
  - - ">="
151
164
  - !ruby/object:Gem::Version
152
- version: '3.2'
165
+ version: '0'
153
166
  - !ruby/object:Gem::Dependency
154
- name: capybara
167
+ name: rake
155
168
  requirement: !ruby/object:Gem::Requirement
156
169
  requirements:
157
170
  - - ">="
158
171
  - !ruby/object:Gem::Version
159
- version: '2.16'
172
+ version: '0'
160
173
  type: :development
161
174
  prerelease: false
162
175
  version_requirements: !ruby/object:Gem::Requirement
163
176
  requirements:
164
177
  - - ">="
165
178
  - !ruby/object:Gem::Version
166
- version: '2.16'
179
+ version: '0'
167
180
  - !ruby/object:Gem::Dependency
168
- name: timecop
181
+ name: rspec
169
182
  requirement: !ruby/object:Gem::Requirement
170
183
  requirements:
171
184
  - - ">="
172
185
  - !ruby/object:Gem::Version
173
- version: '0.8'
186
+ version: 3.7.0
174
187
  type: :development
175
188
  prerelease: false
176
189
  version_requirements: !ruby/object:Gem::Requirement
177
190
  requirements:
178
191
  - - ">="
179
192
  - !ruby/object:Gem::Version
180
- version: '0.8'
193
+ version: 3.7.0
181
194
  - !ruby/object:Gem::Dependency
182
- name: xmlenc
195
+ name: ruby-saml
183
196
  requirement: !ruby/object:Gem::Requirement
184
197
  requirements:
185
198
  - - ">="
186
199
  - !ruby/object:Gem::Version
187
- version: 0.6.4
200
+ version: 1.7.2
188
201
  type: :development
189
202
  prerelease: false
190
203
  version_requirements: !ruby/object:Gem::Requirement
191
204
  requirements:
192
205
  - - ">="
193
206
  - !ruby/object:Gem::Version
194
- version: 0.6.4
207
+ version: 1.7.2
195
208
  - !ruby/object:Gem::Dependency
196
- name: appraisal
209
+ name: simplecov
197
210
  requirement: !ruby/object:Gem::Requirement
198
211
  requirements:
199
212
  - - ">="
@@ -206,6 +219,20 @@ dependencies:
206
219
  - - ">="
207
220
  - !ruby/object:Gem::Version
208
221
  version: '0'
222
+ - !ruby/object:Gem::Dependency
223
+ name: timecop
224
+ requirement: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ version: '0.8'
229
+ type: :development
230
+ prerelease: false
231
+ version_requirements: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: '0.8'
209
236
  description: SAML IdP (Identity Provider) Library for Ruby
210
237
  email: jon.phenow@sportngin.com
211
238
  executables: []
@@ -215,9 +242,6 @@ files:
215
242
  - Gemfile
216
243
  - LICENSE
217
244
  - README.md
218
- - app/controllers/saml_idp/idp_controller.rb
219
- - app/views/saml_idp/idp/new.html.erb
220
- - app/views/saml_idp/idp/saml_post.html.erb
221
245
  - lib/saml_idp.rb
222
246
  - lib/saml_idp/algorithmable.rb
223
247
  - lib/saml_idp/assertion_builder.rb
@@ -228,6 +252,7 @@ files:
228
252
  - lib/saml_idp/default.rb
229
253
  - lib/saml_idp/encryptor.rb
230
254
  - lib/saml_idp/engine.rb
255
+ - lib/saml_idp/fingerprint.rb
231
256
  - lib/saml_idp/hashable.rb
232
257
  - lib/saml_idp/incoming_metadata.rb
233
258
  - lib/saml_idp/logout_builder.rb
@@ -254,6 +279,7 @@ files:
254
279
  - spec/lib/saml_idp/configurator_spec.rb
255
280
  - spec/lib/saml_idp/controller_spec.rb
256
281
  - spec/lib/saml_idp/encryptor_spec.rb
282
+ - spec/lib/saml_idp/fingerprint_spec.rb
257
283
  - spec/lib/saml_idp/incoming_metadata_spec.rb
258
284
  - spec/lib/saml_idp/logout_request_builder_spec.rb
259
285
  - spec/lib/saml_idp/logout_response_builder_spec.rb
@@ -279,6 +305,8 @@ files:
279
305
  - spec/rails_app/app/mailers/.gitkeep
280
306
  - spec/rails_app/app/models/.gitkeep
281
307
  - spec/rails_app/app/views/layouts/application.html.erb
308
+ - spec/rails_app/app/views/saml_idp/idp/new.html.erb
309
+ - spec/rails_app/app/views/saml_idp/idp/saml_post.html.erb
282
310
  - spec/rails_app/config.ru
283
311
  - spec/rails_app/config/application.rb
284
312
  - spec/rails_app/config/boot.rb
@@ -319,6 +347,9 @@ files:
319
347
  - spec/spec_helper.rb
320
348
  - spec/support/certificates/certificate1
321
349
  - spec/support/certificates/r1_certificate2_base64
350
+ - spec/support/certificates/sp_cert_req.csr
351
+ - spec/support/certificates/sp_private_key.pem
352
+ - spec/support/certificates/sp_x509_cert.crt
322
353
  - spec/support/responses/adfs_response_sha1.xml
323
354
  - spec/support/responses/adfs_response_sha256.xml
324
355
  - spec/support/responses/adfs_response_sha384.xml
@@ -347,22 +378,21 @@ metadata:
347
378
  homepage_uri: https://github.com/saml-idp/saml_idp
348
379
  source_code_uri: https://github.com/saml-idp/saml_idp
349
380
  bug_tracker_uri: https://github.com/saml-idp/saml_idp/issues
350
- documentation_uri: http://rdoc.info/gems/saml_idp/0.9.0
351
- post_install_message: |
352
- If you're just recently updating saml_idp - please be aware we've changed the default
353
- certificate. See the PR and a description of why we've done this here:
354
- https://github.com/saml-idp/saml_idp/pull/29
355
-
356
- If you just need to see the certificate `bundle open saml_idp` and go to
357
- `lib/saml_idp/default.rb`
381
+ documentation_uri: http://rdoc.info/gems/saml_idp/1.0.0
382
+ post_install_message: |2
383
+ If you're just recently updating saml_idp - please be aware we've changed the default
384
+ certificate. See the PR and a description of why we've done this here:
385
+ https://github.com/saml-idp/saml_idp/pull/29
358
386
 
359
- Similarly, please see the README about certificates - you should avoid using the
360
- defaults in a Production environment. Post any issues you to github.
387
+ If you just need to see the certificate `bundle open saml_idp` and go to
388
+ `lib/saml_idp/default.rb`
361
389
 
362
- ** New in Version 0.3.0 **
390
+ Similarly, please see the README about certificates - you should avoid using the
391
+ defaults in a Production environment. Post any issues you to github.
363
392
 
364
- Encrypted Assertions require the xmlenc gem. See the example in the Controller
365
- section of the README.
393
+ ** New in Version 0.3.0 **
394
+ Encrypted Assertions require the xmlenc gem. See the example in the Controller
395
+ section of the README.
366
396
  rdoc_options:
367
397
  - "--charset=UTF-8"
368
398
  require_paths:
@@ -371,18 +401,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
371
401
  requirements:
372
402
  - - ">="
373
403
  - !ruby/object:Gem::Version
374
- version: '2.2'
404
+ version: '2.5'
375
405
  required_rubygems_version: !ruby/object:Gem::Requirement
376
406
  requirements:
377
407
  - - ">="
378
408
  - !ruby/object:Gem::Version
379
409
  version: '0'
380
410
  requirements: []
381
- rubyforge_project:
382
- rubygems_version: 2.7.6
383
- signing_key:
411
+ rubygems_version: 3.6.3
384
412
  specification_version: 4
385
- summary: SAML Indentity Provider for Ruby
413
+ summary: SAML Identity Provider for Ruby
386
414
  test_files:
387
415
  - spec/acceptance/acceptance_helper.rb
388
416
  - spec/acceptance/idp_controller_spec.rb
@@ -392,6 +420,7 @@ test_files:
392
420
  - spec/lib/saml_idp/configurator_spec.rb
393
421
  - spec/lib/saml_idp/controller_spec.rb
394
422
  - spec/lib/saml_idp/encryptor_spec.rb
423
+ - spec/lib/saml_idp/fingerprint_spec.rb
395
424
  - spec/lib/saml_idp/incoming_metadata_spec.rb
396
425
  - spec/lib/saml_idp/logout_request_builder_spec.rb
397
426
  - spec/lib/saml_idp/logout_response_builder_spec.rb
@@ -417,6 +446,8 @@ test_files:
417
446
  - spec/rails_app/app/mailers/.gitkeep
418
447
  - spec/rails_app/app/models/.gitkeep
419
448
  - spec/rails_app/app/views/layouts/application.html.erb
449
+ - spec/rails_app/app/views/saml_idp/idp/new.html.erb
450
+ - spec/rails_app/app/views/saml_idp/idp/saml_post.html.erb
420
451
  - spec/rails_app/config.ru
421
452
  - spec/rails_app/config/application.rb
422
453
  - spec/rails_app/config/boot.rb
@@ -457,6 +488,9 @@ test_files:
457
488
  - spec/spec_helper.rb
458
489
  - spec/support/certificates/certificate1
459
490
  - spec/support/certificates/r1_certificate2_base64
491
+ - spec/support/certificates/sp_cert_req.csr
492
+ - spec/support/certificates/sp_private_key.pem
493
+ - spec/support/certificates/sp_x509_cert.crt
460
494
  - spec/support/responses/adfs_response_sha1.xml
461
495
  - spec/support/responses/adfs_response_sha256.xml
462
496
  - spec/support/responses/adfs_response_sha384.xml