saml-kit 1.0.10 → 1.0.11

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
  SHA256:
3
- metadata.gz: 48040329dac3aa9d3171bf1098ec49937b7667067dbd7c8f8a0fa7adc0837edb
4
- data.tar.gz: fc968fad4d56cb939ce34cd7da486e19844f55e11f976cd8454228571cfbc2a7
3
+ metadata.gz: 7cdef4d4affc0a46b4d12269cea2293339145ce6e4207b1bb61cefed17a7cace
4
+ data.tar.gz: e6ed597e3e98e725b30d9904c50b1a91999ff948e5dec320b1585f731554e9d9
5
5
  SHA512:
6
- metadata.gz: 93afbfeeabbfc19f6f8d772adc63b96206ce27ad6cc3b1620d4cd934e14230123400d1b94e03f2c8b10b5a52ca341d116106dd7f3d82b272ffda1f8bc510d746
7
- data.tar.gz: 7148ddf6fb5511bfe17f4659c1b79b2122bf7646e9b06a4f7445335fd7925b1e9117bb9c43a0efb1aca80e3f310b492e81c39522d0a3e66afed3ceb4538ba280
6
+ metadata.gz: ff1620e3d48598653095303f3f33f5234192eea6fcbc7ffc7662a701799ae26c3e01050b741c71be2a824f005e9e3019175b1347ff2e9863ca02cf9184145457
7
+ data.tar.gz: 34665a677b65c2e205e9c57a8a86ab67e5b8156dfe798bb0bdbce3f7a1eab4912b08038984d81c1c1885d1c22a0a3528bfb8cf87d173c2ae4c15c86550e8a484
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Saml
4
4
  module Kit
5
- VERSION = '1.0.10'.freeze
5
+ VERSION = '1.0.11'.freeze
6
6
  end
7
7
  end
@@ -3,12 +3,15 @@
3
3
  module Saml
4
4
  module Kit
5
5
  module XmlTemplatable
6
+ TEMPLATES_DIR = Pathname.new(File.join(__dir__, 'builders/templates/'))
6
7
  include ::Xml::Kit::Templatable
7
8
 
8
9
  def template_path
9
- root_path = __dir__
10
- template_name = "#{self.class.name.split('::').last.underscore}.builder"
11
- File.join(root_path, 'builders/templates/', template_name)
10
+ @template_path ||= TEMPLATES_DIR.join(template_name)
11
+ end
12
+
13
+ def template_name
14
+ "#{self.class.name.split('::').last.underscore}.builder"
12
15
  end
13
16
 
14
17
  # Returns true if an embedded signature is requested and at least one signing certificate is available via the configuration.
@@ -18,7 +18,11 @@ Gem::Specification.new do |spec|
18
18
  spec.required_ruby_version = '>= 2.2.0'
19
19
 
20
20
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
21
- f.match(%r{^(test|spec|features)/})
21
+ (
22
+ f.match(%r{^(test|spec|features)/}) ||
23
+ f.match(/^\..*/) ||
24
+ f.match(%r{^bin/.*})
25
+ ) && !f.match(%r{^spec/examples.*/})
22
26
  end
23
27
  spec.metadata['yard.run'] = 'yri'
24
28
  spec.bindir = 'exe'
@@ -34,6 +38,7 @@ Gem::Specification.new do |spec|
34
38
  spec.add_development_dependency 'rspec-benchmark', '~> 0.3'
35
39
  spec.add_development_dependency 'rubocop', '~> 0.52'
36
40
  spec.add_development_dependency 'rubocop-rspec', '~> 1.22'
41
+ spec.add_development_dependency 'ruby-prof'
37
42
  spec.add_development_dependency 'simplecov', '~> 0.15'
38
43
  spec.add_development_dependency 'webmock', '~> 3.1'
39
44
  end
@@ -0,0 +1,27 @@
1
+ RSpec.describe "Authentication Request" do
2
+ it 'produces an authentication request' do
3
+ xml = Saml::Kit::Metadata.build_xml do |builder|
4
+ builder.contact_email = 'hi@example.com'
5
+ builder.organization_name = "Acme, Inc"
6
+ builder.organization_url = 'https://www.example.com'
7
+ builder.build_identity_provider do |x|
8
+ x.add_single_sign_on_service('https://www.example.com/login', binding: :http_post)
9
+ x.add_single_sign_on_service('https://www.example.com/login', binding: :http_redirect)
10
+ x.add_single_logout_service('https://www.example.com/logout', binding: :http_post)
11
+ x.name_id_formats = [ Saml::Kit::Namespaces::EMAIL_ADDRESS ]
12
+ x.attributes << :id
13
+ x.attributes << :email
14
+ end
15
+ builder.build_service_provider do |x|
16
+ x.add_assertion_consumer_service('https://www.example.com/consume', binding: :http_post)
17
+ x.add_single_logout_service('https://www.example.com/logout', binding: :http_post)
18
+ end
19
+ end
20
+
21
+ idp = Saml::Kit::IdentityProviderMetadata.new(xml)
22
+ url, saml_params = idp.login_request_for(binding: :http_post)
23
+
24
+ expect(url).to eql("https://www.example.com/login")
25
+ expect(saml_params['SAMLRequest']).to be_present
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ RSpec.describe "Identity Provider Metadata" do
2
+ it 'produces identity provider metadata' do
3
+ xml = Saml::Kit::Metadata.build_xml do |builder|
4
+ builder.contact_email = 'hi@example.com'
5
+ builder.organization_name = "Acme, Inc"
6
+ builder.organization_url = 'https://www.example.com'
7
+ builder.build_identity_provider do |x|
8
+ x.add_single_sign_on_service('https://www.example.com/login', binding: :http_post)
9
+ x.add_single_sign_on_service('https://www.example.com/login', binding: :http_redirect)
10
+ x.add_single_logout_service('https://www.example.com/logout', binding: :http_post)
11
+ x.name_id_formats = [ Saml::Kit::Namespaces::EMAIL_ADDRESS ]
12
+ x.attributes << :id
13
+ x.attributes << :email
14
+ end
15
+ end
16
+ expect(xml).to be_present
17
+ expect(xml).to have_xpath("//md:EntityDescriptor//md:IDPSSODescriptor")
18
+ expect(xml).to_not have_xpath("//md:EntityDescriptor//md:SPSSODescriptor")
19
+ end
20
+ end
@@ -0,0 +1,30 @@
1
+ require_relative './principal'
2
+
3
+ RSpec.describe "Logout Request" do
4
+ let(:user) { Principal.new(id: SecureRandom.uuid, email: "hello@example.com") }
5
+
6
+ it 'produces a SAMLRequest' do
7
+ xml = Saml::Kit::Metadata.build_xml do |builder|
8
+ builder.contact_email = 'hi@example.com'
9
+ builder.organization_name = "Acme, Inc"
10
+ builder.organization_url = 'https://www.example.com'
11
+ builder.build_identity_provider do |x|
12
+ x.add_single_sign_on_service('https://www.example.com/login', binding: :http_post)
13
+ x.add_single_sign_on_service('https://www.example.com/login', binding: :http_redirect)
14
+ x.add_single_logout_service('https://www.example.com/logout', binding: :http_post)
15
+ x.name_id_formats = [ Saml::Kit::Namespaces::EMAIL_ADDRESS ]
16
+ x.attributes << :id
17
+ x.attributes << :email
18
+ end
19
+ builder.build_service_provider do |x|
20
+ x.add_assertion_consumer_service('https://www.example.com/consume', binding: :http_post)
21
+ x.add_single_logout_service('https://www.example.com/logout', binding: :http_post)
22
+ end
23
+ end
24
+
25
+ sp = Saml::Kit::IdentityProviderMetadata.new(xml)
26
+ url, saml_params = sp.logout_request_for(user, binding: :http_post)
27
+ expect(url).to eql("https://www.example.com/logout")
28
+ expect(saml_params['SAMLRequest']).to be_present
29
+ end
30
+ end
@@ -0,0 +1,39 @@
1
+ require_relative './principal'
2
+
3
+ RSpec.describe "Logout Response" do
4
+ let(:user) { Principal.new(id: SecureRandom.uuid, email: "hello@example.com") }
5
+
6
+ it 'generates a logout response' do
7
+ xml = Saml::Kit::Metadata.build_xml do |builder|
8
+ builder.contact_email = 'hi@example.com'
9
+ builder.organization_name = "Acme, Inc"
10
+ builder.organization_url = 'https://www.example.com'
11
+ builder.build_identity_provider do |x|
12
+ x.add_single_sign_on_service('https://www.example.com/login', binding: :http_post)
13
+ x.add_single_sign_on_service('https://www.example.com/login', binding: :http_redirect)
14
+ x.add_single_logout_service('https://www.example.com/logout', binding: :http_post)
15
+ x.name_id_formats = [ Saml::Kit::Namespaces::EMAIL_ADDRESS ]
16
+ x.attributes << :id
17
+ x.attributes << :email
18
+ end
19
+ builder.build_service_provider do |x|
20
+ x.add_assertion_consumer_service('https://www.example.com/consume', binding: :http_post)
21
+ x.add_single_logout_service('https://www.example.com/logout', binding: :http_post)
22
+ end
23
+ end
24
+
25
+ idp = Saml::Kit::IdentityProviderMetadata.new(xml)
26
+ url, saml_params = idp.logout_request_for(user, binding: :http_post)
27
+ uri = URI.parse("#{url}?#{saml_params.map { |(x, y)| "#{x}=#{y}" }.join('&')}")
28
+
29
+ raw_params = Hash[uri.query.split("&amp;").map { |x| x.split("=", 2) }].symbolize_keys
30
+
31
+ binding = idp.single_logout_service_for(binding: :http_post)
32
+ saml_request = binding.deserialize(raw_params)
33
+ sp = Saml::Kit::ServiceProviderMetadata.new(xml)
34
+ allow(saml_request).to receive(:provider).and_return(sp)
35
+ url, saml_params = saml_request.response_for(binding: :http_post)
36
+ expect(url).to eql("https://www.example.com/logout")
37
+ expect(saml_params['SAMLResponse']).to be_present
38
+ end
39
+ end
@@ -0,0 +1,44 @@
1
+ RSpec.describe "Metadata" do
2
+ it 'consumes metadata' do
3
+ raw_xml = <<-XML
4
+ <?xml version="1.0" encoding="UTF-8"?>
5
+ <EntityDescriptor entityID="https://www.example.com/metadata" xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="_50643868-c737-40c8-a30d-b5dc7f3c69d9">
6
+ <IDPSSODescriptor WantAuthnRequestsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
7
+ <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:persistent</NameIDFormat>
8
+ <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://www.example.com/login"/>
9
+ </IDPSSODescriptor>
10
+ <SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
11
+ <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</NameIDFormat>
12
+ <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://www.example.com/consume" index="0" isDefault="true"/>
13
+ </SPSSODescriptor>
14
+ </EntityDescriptor>
15
+ XML
16
+
17
+ metadata = Saml::Kit::Metadata.from(raw_xml)
18
+ expect(metadata.entity_id).to eql('https://www.example.com/metadata')
19
+ end
20
+
21
+ it 'produces metadata for a service provider and identity provider' do
22
+ metadata = Saml::Kit::Metadata.build do |builder|
23
+ builder.contact_email = 'hi@example.com'
24
+ builder.organization_name = "Acme, Inc"
25
+ builder.organization_url = 'https://www.example.com'
26
+ builder.build_identity_provider do |x|
27
+ x.add_single_sign_on_service('https://www.example.com/login', binding: :http_post)
28
+ x.add_single_sign_on_service('https://www.example.com/login', binding: :http_redirect)
29
+ x.add_single_logout_service('https://www.example.com/logout', binding: :http_post)
30
+ x.name_id_formats = [ Saml::Kit::Namespaces::EMAIL_ADDRESS ]
31
+ x.attributes << :id
32
+ x.attributes << :email
33
+ end
34
+ builder.build_service_provider do |x|
35
+ x.add_assertion_consumer_service('https://www.example.com/consume', binding: :http_post)
36
+ x.add_single_logout_service('https://www.example.com/logout', binding: :http_post)
37
+ end
38
+ end
39
+ xml = metadata.to_xml(pretty: true)
40
+ expect(xml).to be_present
41
+ expect(xml).to have_xpath("//md:EntityDescriptor//md:IDPSSODescriptor")
42
+ expect(xml).to have_xpath("//md:EntityDescriptor//md:SPSSODescriptor")
43
+ end
44
+ end
@@ -0,0 +1,16 @@
1
+ class Principal
2
+ attr_reader :id, :email
3
+
4
+ def initialize(id:, email:)
5
+ @id = id
6
+ @email = email
7
+ end
8
+
9
+ def name_id_for(name_id_format)
10
+ Saml::Kit::Namespaces::PERSISTENT == name_id_format ? id : email
11
+ end
12
+
13
+ def assertion_attributes_for(request)
14
+ request.trusted? ? { access_token: SecureRandom.uuid } : {}
15
+ end
16
+ end
@@ -0,0 +1,86 @@
1
+ require_relative './principal'
2
+
3
+ RSpec.describe "Response" do
4
+ let(:user) { Principal.new(id: SecureRandom.uuid, email: "hello@example.com") }
5
+ let(:request) { Saml::Kit::AuthenticationRequest.build }
6
+
7
+ it 'consumes a Response' do
8
+ raw_xml = <<-XML
9
+ <?xml version="1.0" encoding="UTF-8"?>
10
+ <Response xmlns="urn:oasis:names:tc:SAML:2.0:protocol" ID="_32594448-5d41-4e5b-87c5-ee32ef1f14f7" Version="2.0" IssueInstant="2017-12-23T18:13:58Z" Destination="" Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" InResponseTo="_55236abc-636f-41d1-8c0d-81c5384786dd">
11
+ <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.example.com/metadata</Issuer>
12
+ <Status>
13
+ <StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
14
+ </Status>
15
+ <Assertion xmlns="urn:oasis:names:tc:SAML:2.0:assertion" ID="_843f14bc-51e9-40d3-9861-23e59ccc8427" IssueInstant="2017-12-23T18:13:58Z" Version="2.0">
16
+ <Issuer>https://www.example.com/metadata</Issuer>
17
+ <Subject>
18
+ <NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">ed215a85-597f-4e74-a892-ac83c386190b</NameID>
19
+ <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
20
+ <SubjectConfirmationData InResponseTo="_55236abc-636f-41d1-8c0d-81c5384786dd" NotOnOrAfter="2017-12-23T21:13:58Z" Recipient=""/>
21
+ </SubjectConfirmation>
22
+ </Subject>
23
+ <Conditions NotBefore="2017-12-23T18:13:58Z" NotOnOrAfter="2017-12-23T21:13:58Z">
24
+ <AudienceRestriction>
25
+ <Audience/>
26
+ </AudienceRestriction>
27
+ </Conditions>
28
+ <AuthnStatement AuthnInstant="2017-12-23T18:13:58Z" SessionIndex="_843f14bc-51e9-40d3-9861-23e59ccc8427" SessionNotOnOrAfter="2017-12-23T21:13:58Z">
29
+ <AuthnContext>
30
+ <AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
31
+ </AuthnContext>
32
+ </AuthnStatement>
33
+ </Assertion>
34
+ </Response>
35
+ XML
36
+ response = Saml::Kit::Response.new(raw_xml)
37
+ expect(response.assertion.name_id).to eql('ed215a85-597f-4e74-a892-ac83c386190b')
38
+ expect(response.issuer).to eql("https://www.example.com/metadata")
39
+ end
40
+
41
+ it 'builds a Response document' do
42
+ response = Saml::Kit::Response.build(user, request) do |builder|
43
+ builder.issuer = "blah"
44
+ end
45
+
46
+ expect(response.issuer).to eql("blah")
47
+ expect(response.to_xml).to have_xpath("/samlp:Response/saml:Assertion/saml:Issuer[text()=\"blah\"]")
48
+ end
49
+
50
+ it 'generates a SAMLResponse' do
51
+ xml = Saml::Kit::Metadata.build_xml do |builder|
52
+ builder.contact_email = 'hi@example.com'
53
+ builder.organization_name = "Acme, Inc"
54
+ builder.organization_url = 'https://www.example.com'
55
+ builder.build_identity_provider do |x|
56
+ x.add_single_sign_on_service('https://www.example.com/login', binding: :http_post)
57
+ x.add_single_sign_on_service('https://www.example.com/login', binding: :http_redirect)
58
+ x.add_single_logout_service('https://www.example.com/logout', binding: :http_post)
59
+ x.name_id_formats = [ Saml::Kit::Namespaces::EMAIL_ADDRESS ]
60
+ x.attributes << :id
61
+ x.attributes << :email
62
+ end
63
+ builder.build_service_provider do |x|
64
+ x.add_assertion_consumer_service('https://www.example.com/consume', binding: :http_post)
65
+ x.add_single_logout_service('https://www.example.com/logout', binding: :http_post)
66
+ end
67
+ end
68
+
69
+ idp = Saml::Kit::IdentityProviderMetadata.new(xml)
70
+ url, saml_params = idp.login_request_for(binding: :http_post)
71
+ uri = URI.parse("#{url}?#{saml_params.map { |(x, y)| "#{x}=#{y}" }.join('&')}")
72
+
73
+ sp = Saml::Kit::ServiceProviderMetadata.new(xml)
74
+
75
+ binding = idp.single_sign_on_service_for(binding: :http_post)
76
+ raw_params = Hash[uri.query.split("&amp;").map { |x| x.split("=", 2) }].symbolize_keys
77
+ saml_request = binding.deserialize(raw_params)
78
+ allow(saml_request).to receive(:provider).and_return(sp)
79
+
80
+ url, saml_params = saml_request.response_for(user, binding: :http_post)
81
+
82
+ expect(url).to eql("https://www.example.com/consume")
83
+ expect(saml_params['SAMLResponse']).to be_present
84
+ end
85
+ end
86
+
@@ -0,0 +1,32 @@
1
+ RSpec.describe "Service Provider Metadata" do
2
+ it 'consumes service provider_metadata' do
3
+ raw_xml = <<-XML
4
+ <?xml version="1.0" encoding="UTF-8"?>
5
+ <EntityDescriptor entityID="myEntityId" xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
6
+ <SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
7
+ <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</NameIDFormat>
8
+ </SPSSODescriptor>
9
+ </EntityDescriptor>
10
+ XML
11
+
12
+ metadata = Saml::Kit::ServiceProviderMetadata.new(raw_xml)
13
+ expect(metadata.entity_id).to eql('myEntityId')
14
+ expect(metadata.name_id_formats).to match_array([Saml::Kit::Namespaces::PERSISTENT])
15
+ end
16
+
17
+ it 'produces service provider metadata' do
18
+ metadata = Saml::Kit::Metadata.build do |builder|
19
+ builder.contact_email = 'hi@example.com'
20
+ builder.organization_name = "Acme, Inc"
21
+ builder.organization_url = 'https://www.example.com'
22
+ builder.build_service_provider do |x|
23
+ x.add_assertion_consumer_service('https://www.example.com/consume', binding: :http_post)
24
+ x.add_single_logout_service('https://www.example.com/logout', binding: :http_post)
25
+ end
26
+ end
27
+ xml = metadata.to_xml(pretty: true)
28
+ expect(xml).to be_present
29
+ expect(xml).to_not have_xpath("//md:EntityDescriptor//md:IDPSSODescriptor")
30
+ expect(xml).to have_xpath("//md:EntityDescriptor//md:SPSSODescriptor")
31
+ end
32
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saml-kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.10
4
+ version: 1.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - mo khan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-26 00:00:00.000000000 Z
11
+ date: 2018-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -142,6 +142,20 @@ dependencies:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
144
  version: '1.22'
145
+ - !ruby/object:Gem::Dependency
146
+ name: ruby-prof
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
145
159
  - !ruby/object:Gem::Dependency
146
160
  name: simplecov
147
161
  requirement: !ruby/object:Gem::Requirement
@@ -180,21 +194,10 @@ executables:
180
194
  extensions: []
181
195
  extra_rdoc_files: []
182
196
  files:
183
- - ".gitignore"
184
- - ".gitlab-ci.yml"
185
- - ".rspec"
186
- - ".rubocop.yml"
187
- - ".rubocop_todo.yml"
188
- - ".travis.yml"
189
197
  - Gemfile
190
198
  - LICENSE.txt
191
199
  - README.md
192
200
  - Rakefile
193
- - bin/cibuild
194
- - bin/console
195
- - bin/lint
196
- - bin/setup
197
- - bin/test
198
201
  - exe/saml-kit-create-self-signed-certificate
199
202
  - exe/saml-kit-decode-http-post
200
203
  - exe/saml-kit-decode-http-redirect
@@ -273,6 +276,15 @@ files:
273
276
  - lib/saml/kit/xsd/xmldsig-core-schema.xsd
274
277
  - lib/saml/kit/xsd_validatable.rb
275
278
  - saml-kit.gemspec
279
+ - spec/examples/authentication_request_spec.rb
280
+ - spec/examples/identity_provider_metadata_spec.rb
281
+ - spec/examples/logout_request_spec.rb
282
+ - spec/examples/logout_response_spec.rb
283
+ - spec/examples/metadata_spec.rb
284
+ - spec/examples/principal.rb
285
+ - spec/examples/response_spec.rb
286
+ - spec/examples/saml-kit.gif
287
+ - spec/examples/service_provider_metadata_spec.rb
276
288
  homepage: https://github.com/saml-kit/saml-kit
277
289
  licenses:
278
290
  - MIT
data/.gitignore DELETED
@@ -1,12 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
-
11
- # rspec failure tracking
12
- .rspec_status
@@ -1,15 +0,0 @@
1
- image: ruby:2.2
2
-
3
- before_script:
4
- - apt-get update && apt-get install -y locales
5
- - echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
6
- - locale-gen
7
- - export LC_ALL=en_US.UTF-8
8
-
9
- rspec:
10
- script:
11
- - bin/cibuild
12
-
13
- lint:
14
- script:
15
- - bin/lint
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --color
2
- --require spec_helper
@@ -1,95 +0,0 @@
1
- inherit_from: .rubocop_todo.yml
2
-
3
- require:
4
- - rubocop/cop/internal_affairs
5
- - rubocop-rspec
6
-
7
- AllCops:
8
- Exclude:
9
- - 'coverage/**/*'
10
- - 'pkg/**/*'
11
- - 'spec/fixtures/**/*'
12
- - 'spec/examples/**/*'
13
- - 'tmp/**/*'
14
- - 'vendor/**/*'
15
- TargetRubyVersion: 2.2
16
-
17
- Layout/ClassStructure:
18
- Enabled: true
19
- Categories:
20
- module_inclusion:
21
- - include
22
- - prepend
23
- - extend
24
- ExpectedOrder:
25
- - module_inclusion
26
- - constants
27
- - public_class_methods
28
- - initializer
29
- - instance_methods
30
- - protected_methods
31
- - private_methods
32
-
33
- Layout/EndOfLine:
34
- EnforcedStyle: lf
35
-
36
- Layout/IndentArray:
37
- EnforcedStyle: consistent
38
-
39
- Layout/IndentHeredoc:
40
- EnforcedStyle: active_support
41
-
42
- Lint/AmbiguousBlockAssociation:
43
- Exclude:
44
- - 'spec/**/*.rb'
45
-
46
- Lint/InterpolationCheck:
47
- Exclude:
48
- - 'spec/**/*.rb'
49
-
50
- Metrics/BlockLength:
51
- Exclude:
52
- - '**/**/*.builder'
53
- - '**/*.rake'
54
- - '*.gemspec'
55
- - 'Rakefile'
56
- - 'spec/**/*.rb'
57
-
58
- Metrics/ModuleLength:
59
- Exclude:
60
- - 'spec/**/*.rb'
61
-
62
- Metrics/LineLength:
63
- Exclude:
64
- - 'spec/**/*.rb'
65
-
66
- Naming/FileName:
67
- Exclude:
68
- - 'lib/saml-kit.rb'
69
-
70
- Style/Documentation:
71
- Enabled: false
72
-
73
- Style/EachWithObject:
74
- Enabled: false
75
-
76
- Style/StringLiterals:
77
- EnforcedStyle: 'single_quotes'
78
-
79
- Style/TrailingCommaInLiteral:
80
- Enabled: false
81
-
82
- RSpec/ExampleLength:
83
- Max: 80
84
-
85
- RSpec/MultipleExpectations:
86
- Enabled: false
87
-
88
- RSpec/NamedSubject:
89
- Enabled: false
90
-
91
- RSpec/NestedGroups:
92
- Max: 7
93
-
94
- RSpec/SubjectStub:
95
- Enabled: false
@@ -1,45 +0,0 @@
1
- # This configuration was generated by
2
- # `rubocop --auto-gen-config`
3
- # on 2018-02-16 22:08:54 -0700 using RuboCop version 0.52.1.
4
- # The point is for the user to remove these configuration records
5
- # one by one as the offenses are removed from the code base.
6
- # Note that changes in the inspected code, or installation of new
7
- # versions of RuboCop, may require this file to be generated again.
8
-
9
- # Offense count: 1
10
- # Cop supports --auto-correct.
11
- # Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods.
12
- Lint/UnusedMethodArgument:
13
- Exclude:
14
- - 'lib/saml/kit/invalid_document.rb'
15
-
16
- # Offense count: 2
17
- Metrics/AbcSize:
18
- Max: 16
19
-
20
- # Offense count: 3
21
- # Configuration parameters: CountComments.
22
- Metrics/ClassLength:
23
- Max: 136
24
-
25
- # Offense count: 6
26
- # Configuration parameters: CountComments.
27
- Metrics/MethodLength:
28
- Max: 13
29
-
30
- # Offense count: 1
31
- Style/DateTime:
32
- Exclude:
33
- - 'lib/saml/kit/assertion.rb'
34
-
35
- # Offense count: 1
36
- # Cop supports --auto-correct.
37
- Style/IfUnlessModifier:
38
- Exclude:
39
- - 'lib/saml/kit/builders/authentication_request.rb'
40
-
41
- # Offense count: 128
42
- # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
43
- # URISchemes: http, https
44
- Metrics/LineLength:
45
- Max: 313
@@ -1,10 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.2.9
5
- - 2.3.6
6
- - 2.4.3
7
- - 2.5.0
8
- script:
9
- - bin/cibuild
10
- - bin/lint
@@ -1,21 +0,0 @@
1
- #!/bin/sh
2
-
3
- # script/cibuild: Setup environment for CI to run tests. This is primarily
4
- # designed to run on the continuous integration server.
5
-
6
- set -e
7
-
8
- cd "$(dirname "$0")/.."
9
-
10
- echo [$(date "+%H:%M:%S")] "==> Started at…"
11
-
12
- # GC customizations
13
- export RUBY_GC_MALLOC_LIMIT=79000000
14
- export RUBY_GC_HEAP_INIT_SLOTS=800000
15
- export RUBY_HEAP_FREE_MIN=100000
16
- export RUBY_HEAP_SLOTS_INCREMENT=400000
17
- export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1
18
-
19
- ruby -v
20
- gem install bundler --no-ri --no-rdoc --conservative
21
- bin/test
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'bundler/setup'
5
- require 'saml/kit'
6
-
7
- # You can add fixtures and/or initialization code here to make experimenting
8
- # with your gem easier. You can also use a different console, if you like.
9
-
10
- # (If you use this, don't forget to add pry to your Gemfile!)
11
- # require "pry"
12
- # Pry.start
13
-
14
- require 'irb'
15
- IRB.start(__FILE__)
data/bin/lint DELETED
@@ -1,11 +0,0 @@
1
- #!/bin/sh
2
-
3
- set -e
4
-
5
- [ -z "$DEBUG" ] || set -x
6
-
7
- echo [$(date "+%H:%M:%S")] "==> Running setup…"
8
- bin/setup
9
-
10
- echo [$(date "+%H:%M:%S")] "==> Running linters…"
11
- bundle exec rake rubocop
data/bin/setup DELETED
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle check || bundle install --jobs $(nproc)
data/bin/test DELETED
@@ -1,17 +0,0 @@
1
- #!/bin/sh
2
-
3
- # script/test: Run test suite for application. Optionally pass in a path to an
4
- # individual test file to run a single test.
5
-
6
-
7
- set -e
8
-
9
- cd "$(dirname "$0")/.."
10
-
11
- [ -z "$DEBUG" ] || set -x
12
-
13
- echo [$(date "+%H:%M:%S")] "==> Running setup…"
14
- bin/setup
15
-
16
- echo [$(date "+%H:%M:%S")] "==> Running tests…"
17
- bundle exec rake spec