spid 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/CHANGELOG.md +8 -1
- data/Gemfile +4 -0
- data/README.md +15 -3
- data/lib/spid.rb +24 -0
- data/lib/spid/authn_request.rb +9 -55
- data/lib/spid/generate_authn_request.rb +64 -0
- data/lib/spid/identity_providers.rb +44 -0
- data/lib/spid/idp_metadata.rb +38 -0
- data/lib/spid/metadata.rb +73 -0
- data/lib/spid/version.rb +1 -1
- data/spid.gemspec +5 -0
- metadata +88 -3
- data/lib/spid/onelogin_extension.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 202babbba4b9dae4431cf63d52deea481da1399657cda044e5782893f098b832
|
4
|
+
data.tar.gz: e03e68a394474fb59b7c20a4c7e336a21eff7aab876508cab468dcabd8e24449
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e5c12ec6d34ea8722bed6101ef27a7a2e754f80f4cd3d932bc7739a6355858603382755765fb57795273107f21cd449edd076f326e7744c59c2c29aa8d9e6bc
|
7
|
+
data.tar.gz: f611115901ccdff48084602cdcba4654452544dc13899da3954906679593f88ef1dd740649c549a6046b64e734c8ff1aa558ee3713e834563302339bfb768827
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
## [Unreleased]
|
4
4
|
|
5
|
+
## [0.3.0] - 2018-07-06
|
6
|
+
|
7
|
+
### Added
|
8
|
+
- Fetch all identity provider from https://registry.spid.gov.it
|
9
|
+
- Parse and store metadata from single Identity Provider
|
10
|
+
|
5
11
|
## [0.2.2] - 2018-07-02
|
6
12
|
### Fixed
|
7
13
|
- Spid::L1 constant duplicated
|
@@ -26,7 +32,8 @@
|
|
26
32
|
- Coveralls Integration
|
27
33
|
- Rubygems version badge in README
|
28
34
|
|
29
|
-
[Unreleased]: https://github.com/italia/spid-ruby/compare/v0.
|
35
|
+
[Unreleased]: https://github.com/italia/spid-ruby/compare/v0.3.0...HEAD
|
36
|
+
[0.3.0]: https://github.com/italia/spid-ruby/compare/v0.2.2...v0.3.0
|
30
37
|
[0.2.2]: https://github.com/italia/spid-ruby/compare/v0.2.1...v0.2.2
|
31
38
|
[0.2.1]: https://github.com/italia/spid-ruby/compare/v0.2.0...v0.2.1
|
32
39
|
[0.2.0]: https://github.com/italia/spid-ruby/compare/v0.1.1...v0.2.0
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -2,15 +2,27 @@
|
|
2
2
|
|
3
3
|
Ruby library for SPID authentication
|
4
4
|
|
5
|
+
|
5
6
|
| Project | Spid Ruby |
|
6
7
|
| ---------------------- | ------------ |
|
7
8
|
| Gem name | spid |
|
8
9
|
| License | [MIT](https://github.com/italia/spid-ruby/blob/master/LICENSE) |
|
9
10
|
| Version | [![Gem Version](https://badge.fury.io/rb/spid.svg)](http://badge.fury.io/rb/spid) |
|
10
11
|
| Continuous integration | [![Build Status](https://secure.travis-ci.org/italia/spid-ruby.svg?branch=master)](https://travis-ci.org/italia/spid-ruby) |
|
11
|
-
| Test
|
12
|
+
| Test coverate | [![Coverage Status](https://coveralls.io/repos/github/italia/spid-ruby/badge.svg?branch=master)](https://coveralls.io/github/italia/spid-ruby?branch=master) |
|
12
13
|
| Credits | [Contributors](https://github.com/italia/spid-ruby/graphs/contributors) |
|
13
14
|
|
15
|
+
## Installation
|
16
|
+
|
17
|
+
Add into your Gemfile
|
18
|
+
|
19
|
+
```
|
20
|
+
gem "ruby-saml",
|
21
|
+
github: "onelogin/ruby-saml",
|
22
|
+
ref: "b0301c9da6c5c1674c29a8544c9e32d153bdbcca"
|
23
|
+
gem "spid"
|
24
|
+
```
|
25
|
+
|
14
26
|
## Features
|
15
27
|
|
16
28
|
|<img src="https://github.com/italia/spid-graphics/blob/master/spid-logos/spid-logo-c-lb.png?raw=true" width="100" /><br />_Compliance with [SPID regulations](http://www.agid.gov.it/sites/default/files/circolari/spid-regole_tecniche_v1.pdf) (for Service Providers)_||
|
@@ -26,8 +38,8 @@ Ruby library for SPID authentication
|
|
26
38
|
|`AssertionConsumerServiceURL` customization||
|
27
39
|
|`AssertionConsumerServiceIndex` customization||
|
28
40
|
|`AttributeConsumingServiceIndex` customization||
|
29
|
-
|`AuthnContextClassRef` (SPID level) customization
|
30
|
-
|`RequestedAuthnContext/@Comparison` customization
|
41
|
+
|`AuthnContextClassRef` (SPID level) customization|✓|
|
42
|
+
|`RequestedAuthnContext/@Comparison` customization|✓|
|
31
43
|
|`RelayState` customization (1.2.2)||
|
32
44
|
|**Response/Assertion parsing**||
|
33
45
|
|verification of `Response/Signature` value (if any)||
|
data/lib/spid.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "spid/authn_request"
|
4
|
+
require "spid/generate_authn_request"
|
5
|
+
require "spid/identity_providers"
|
6
|
+
require "spid/metadata"
|
7
|
+
require "spid/idp_metadata"
|
4
8
|
require "spid/version"
|
5
9
|
|
6
10
|
module Spid # :nodoc:
|
@@ -19,6 +23,26 @@ module Spid # :nodoc:
|
|
19
23
|
MAXIMUM_COMPARISON
|
20
24
|
].freeze
|
21
25
|
|
26
|
+
SHA256 = XMLSecurity::Document::SHA256
|
27
|
+
SHA384 = XMLSecurity::Document::SHA384
|
28
|
+
SHA512 = XMLSecurity::Document::SHA512
|
29
|
+
|
30
|
+
DIGEST_METHODS = [
|
31
|
+
SHA256,
|
32
|
+
SHA384,
|
33
|
+
SHA512
|
34
|
+
].freeze
|
35
|
+
|
36
|
+
RSA_SHA256 = XMLSecurity::Document::RSA_SHA256
|
37
|
+
RSA_SHA384 = XMLSecurity::Document::RSA_SHA384
|
38
|
+
RSA_SHA512 = XMLSecurity::Document::RSA_SHA512
|
39
|
+
|
40
|
+
SIGNATURE_METHODS = [
|
41
|
+
RSA_SHA256,
|
42
|
+
RSA_SHA384,
|
43
|
+
RSA_SHA512
|
44
|
+
].freeze
|
45
|
+
|
22
46
|
L1 = "https://www.spid.gov.it/SpidL1"
|
23
47
|
L2 = "https://www.spid.gov.it/SpidL2"
|
24
48
|
L3 = "https://www.spid.gov.it/SpidL3"
|
data/lib/spid/authn_request.rb
CHANGED
@@ -1,67 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "onelogin/ruby-saml/authrequest"
|
4
|
-
require "spid/onelogin_extension"
|
5
|
-
require "onelogin/ruby-saml/settings"
|
6
4
|
|
7
5
|
module Spid
|
8
|
-
class AuthnRequest # :nodoc:
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
idp_sso_target_url:,
|
16
|
-
assertion_consumer_service_url:,
|
17
|
-
issuer:,
|
18
|
-
authn_context: Spid::L1,
|
19
|
-
authn_context_comparison: Spid::EXACT_COMPARISON
|
20
|
-
)
|
21
|
-
|
22
|
-
unless AUTHN_CONTEXTS.include?(authn_context)
|
23
|
-
raise Spid::UnknownAuthnContextError,
|
24
|
-
"Provided authn_context is not valid:" \
|
25
|
-
" use one of #{AUTHN_CONTEXTS.join(', ')}"
|
26
|
-
end
|
27
|
-
|
28
|
-
unless COMPARISON_METHODS.include?(authn_context_comparison)
|
29
|
-
raise Spid::UnknownAuthnComparisonMethodError,
|
30
|
-
"Provided authn_context_comparison_method is not valid:" \
|
31
|
-
" use one of #{COMPARISON_METHODS.join(', ')}"
|
32
|
-
end
|
33
|
-
|
34
|
-
@authn_request_attributes = {
|
35
|
-
idp_sso_target_url: idp_sso_target_url,
|
36
|
-
assertion_consumer_service_url: assertion_consumer_service_url,
|
37
|
-
protocol_binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST",
|
38
|
-
issuer: issuer,
|
39
|
-
name_identifier_format: name_identifier_format,
|
40
|
-
authn_context: authn_context,
|
41
|
-
authn_context_comparison: authn_context_comparison
|
42
|
-
}
|
43
|
-
|
44
|
-
return if authn_context <= Spid::L1
|
45
|
-
@authn_request_attributes[:force_authn] = true
|
46
|
-
end
|
47
|
-
# rubocop:enable Metrics/MethodLength
|
48
|
-
|
49
|
-
def to_xml
|
50
|
-
authn_request.create_xml_document(saml_settings)
|
6
|
+
class AuthnRequest < ::OneLogin::RubySaml::Authrequest # :nodoc:
|
7
|
+
def create_xml_document(settings)
|
8
|
+
original_document = super(settings)
|
9
|
+
issuer_element = original_document.elements["//saml:Issuer"]
|
10
|
+
issuer_element.attributes["Format"] = format_entity
|
11
|
+
issuer_element.attributes["NameQualifier"] = settings.issuer
|
12
|
+
original_document
|
51
13
|
end
|
52
14
|
|
53
15
|
private
|
54
16
|
|
55
|
-
def
|
56
|
-
"urn:oasis:names:tc:SAML:2.0:nameid-format:
|
57
|
-
end
|
58
|
-
|
59
|
-
def authn_request
|
60
|
-
::OneLogin::RubySaml::Authrequest.new
|
61
|
-
end
|
62
|
-
|
63
|
-
def saml_settings
|
64
|
-
::OneLogin::RubySaml::Settings.new authn_request_attributes
|
17
|
+
def format_entity
|
18
|
+
"urn:oasis:names:tc:SAML:2.0:nameid-format:entity"
|
65
19
|
end
|
66
20
|
end
|
67
21
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spid/authn_request"
|
4
|
+
require "onelogin/ruby-saml/settings"
|
5
|
+
|
6
|
+
module Spid
|
7
|
+
class GenerateAuthnRequest # :nodoc:
|
8
|
+
attr_reader :authn_request_attributes
|
9
|
+
|
10
|
+
# rubocop:disable Metrics/MethodLength
|
11
|
+
def initialize(
|
12
|
+
idp_sso_target_url:,
|
13
|
+
assertion_consumer_service_url:,
|
14
|
+
issuer:,
|
15
|
+
authn_context: Spid::L1,
|
16
|
+
authn_context_comparison: Spid::EXACT_COMPARISON
|
17
|
+
)
|
18
|
+
|
19
|
+
unless AUTHN_CONTEXTS.include?(authn_context)
|
20
|
+
raise Spid::UnknownAuthnContextError,
|
21
|
+
"Provided authn_context is not valid:" \
|
22
|
+
" use one of #{AUTHN_CONTEXTS.join(', ')}"
|
23
|
+
end
|
24
|
+
|
25
|
+
unless COMPARISON_METHODS.include?(authn_context_comparison)
|
26
|
+
raise Spid::UnknownAuthnComparisonMethodError,
|
27
|
+
"Provided authn_context_comparison_method is not valid:" \
|
28
|
+
" use one of #{COMPARISON_METHODS.join(', ')}"
|
29
|
+
end
|
30
|
+
|
31
|
+
@authn_request_attributes = {
|
32
|
+
idp_sso_target_url: idp_sso_target_url,
|
33
|
+
assertion_consumer_service_url: assertion_consumer_service_url,
|
34
|
+
protocol_binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST",
|
35
|
+
issuer: issuer,
|
36
|
+
name_identifier_format: name_identifier_format,
|
37
|
+
authn_context: authn_context,
|
38
|
+
authn_context_comparison: authn_context_comparison
|
39
|
+
}
|
40
|
+
|
41
|
+
return if authn_context <= Spid::L1
|
42
|
+
@authn_request_attributes[:force_authn] = true
|
43
|
+
end
|
44
|
+
# rubocop:enable Metrics/MethodLength
|
45
|
+
|
46
|
+
def to_saml
|
47
|
+
authn_request.create(saml_settings)
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def name_identifier_format
|
53
|
+
"urn:oasis:names:tc:SAML:2.0:nameid-format:transient"
|
54
|
+
end
|
55
|
+
|
56
|
+
def authn_request
|
57
|
+
AuthnRequest.new
|
58
|
+
end
|
59
|
+
|
60
|
+
def saml_settings
|
61
|
+
::OneLogin::RubySaml::Settings.new authn_request_attributes
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "faraday"
|
4
|
+
require "faraday_middleware"
|
5
|
+
|
6
|
+
module Spid
|
7
|
+
class IdentityProviders # :nodoc:
|
8
|
+
def self.fetch_all
|
9
|
+
new.fetch_all
|
10
|
+
end
|
11
|
+
|
12
|
+
def fetch_all
|
13
|
+
spid_idp_entities.map do |idp|
|
14
|
+
{
|
15
|
+
name: idp["entity_name"].gsub(/ ID$/, "").downcase,
|
16
|
+
metadata_url: idp["metadata_url"],
|
17
|
+
entity_id: idp["entity_id"]
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def spid_idp_entities
|
25
|
+
return [] if response.body["spidFederationRegistry"].blank?
|
26
|
+
response.body["spidFederationRegistry"]["entities"]
|
27
|
+
end
|
28
|
+
|
29
|
+
def response
|
30
|
+
connection.get do |req|
|
31
|
+
req.url "/api/identity-providers"
|
32
|
+
req.headers["Accept"] = "application/json"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def connection
|
37
|
+
Faraday.new("https://registry.spid.gov.it") do |conn|
|
38
|
+
conn.response :json, content_type: /\bjson$/
|
39
|
+
|
40
|
+
conn.adapter Faraday.default_adapter
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "singleton"
|
4
|
+
require "onelogin/ruby-saml/idp_metadata_parser"
|
5
|
+
|
6
|
+
module Spid
|
7
|
+
class IdpMetadata # :nodoc:
|
8
|
+
include Singleton
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@identity_providers = Spid::IdentityProviders.fetch_all
|
12
|
+
@metadata = {}
|
13
|
+
end
|
14
|
+
|
15
|
+
def [](idp_name)
|
16
|
+
return @metadata[idp_name] if @metadata[idp_name].present?
|
17
|
+
idp_hash = identity_provider_hash(idp_name)
|
18
|
+
|
19
|
+
@metadata[idp_name] = parser.parse_remote_to_hash(
|
20
|
+
idp_hash[:metadata_url],
|
21
|
+
idp_hash[:metadata_url].start_with?("https://")
|
22
|
+
)
|
23
|
+
@metadata[idp_name]
|
24
|
+
end
|
25
|
+
|
26
|
+
def identity_provider_hash(idp_name)
|
27
|
+
@identity_providers.find do |idp|
|
28
|
+
idp[:name] == idp_name.to_s
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def parser
|
35
|
+
@parser ||= ::OneLogin::RubySaml::IdpMetadataParser.new
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "onelogin/ruby-saml/metadata"
|
4
|
+
require "onelogin/ruby-saml/settings"
|
5
|
+
|
6
|
+
module Spid
|
7
|
+
class Metadata # :nodoc:
|
8
|
+
attr_reader :metadata_attributes,
|
9
|
+
:attribute_service_name
|
10
|
+
|
11
|
+
# rubocop:disable Metrics/MethodLength
|
12
|
+
# rubocop:disable Metrics/ParameterLists
|
13
|
+
def initialize(
|
14
|
+
issuer:,
|
15
|
+
private_key_filepath:,
|
16
|
+
certificate_filepath:,
|
17
|
+
assertion_consumer_service_url:,
|
18
|
+
single_logout_service_url:,
|
19
|
+
attribute_service_name:,
|
20
|
+
digest_method: Spid::SHA256,
|
21
|
+
signature_method: Spid::RSA_SHA256
|
22
|
+
)
|
23
|
+
@attribute_service_name = attribute_service_name
|
24
|
+
@metadata_attributes = {
|
25
|
+
issuer: issuer,
|
26
|
+
private_key: File.read(private_key_filepath),
|
27
|
+
certificate: File.read(certificate_filepath),
|
28
|
+
assertion_consumer_service_url: assertion_consumer_service_url,
|
29
|
+
single_logout_service_url: single_logout_service_url,
|
30
|
+
security: {
|
31
|
+
authn_requests_signed: true,
|
32
|
+
logout_requests_signed: false,
|
33
|
+
logout_responses_signed: false,
|
34
|
+
want_assertions_signed: false,
|
35
|
+
want_assertions_encrypted: false,
|
36
|
+
want_name_id: false,
|
37
|
+
metadata_signed: true,
|
38
|
+
embed_sign: false,
|
39
|
+
digest_method: digest_method,
|
40
|
+
signature_method: signature_method
|
41
|
+
}
|
42
|
+
}
|
43
|
+
end
|
44
|
+
# rubocop:enable Metrics/ParameterLists
|
45
|
+
# rubocop:enable Metrics/MethodLength
|
46
|
+
|
47
|
+
def to_xml
|
48
|
+
metadata.generate(saml_settings)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def metadata
|
54
|
+
::OneLogin::RubySaml::Metadata.new
|
55
|
+
end
|
56
|
+
|
57
|
+
def saml_settings
|
58
|
+
@saml_settings = ::OneLogin::RubySaml::Settings.new metadata_attributes
|
59
|
+
|
60
|
+
outer_self = self
|
61
|
+
|
62
|
+
@saml_settings.attribute_consuming_service.configure do
|
63
|
+
service_index 0
|
64
|
+
service_name outer_self.attribute_service_name
|
65
|
+
add_attribute name: "Name",
|
66
|
+
name_format: "Name Format",
|
67
|
+
friendly_name: "Friendly Name"
|
68
|
+
end
|
69
|
+
|
70
|
+
@saml_settings
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
data/lib/spid/version.rb
CHANGED
data/spid.gemspec
CHANGED
@@ -26,13 +26,18 @@ Gem::Specification.new do |spec|
|
|
26
26
|
|
27
27
|
spec.add_runtime_dependency "ruby-saml", "~> 1.8", ">= 1.8.0"
|
28
28
|
|
29
|
+
spec.add_development_dependency "activesupport", ">= 3.0.0"
|
29
30
|
spec.add_development_dependency "bundler", "~> 1.16"
|
30
31
|
spec.add_development_dependency "bundler-audit", "~> 0"
|
31
32
|
spec.add_development_dependency "coveralls", "~> 0"
|
33
|
+
spec.add_development_dependency "faraday", "~> 0"
|
34
|
+
spec.add_development_dependency "faraday_middleware", "~> 0"
|
32
35
|
spec.add_development_dependency "nokogiri", "~> 1.8", ">= 1.8.3"
|
33
36
|
spec.add_development_dependency "pry", "~> 0"
|
34
37
|
spec.add_development_dependency "rake", "~> 10.0"
|
35
38
|
spec.add_development_dependency "rspec", "~> 3.0"
|
36
39
|
spec.add_development_dependency "rubocop", "0.57.2"
|
37
40
|
spec.add_development_dependency "rubocop-rspec", "1.27.0"
|
41
|
+
spec.add_development_dependency "vcr", "~> 4.0", ">= 4.0.0"
|
42
|
+
spec.add_development_dependency "webmock", "~> 3.4", ">= 3.4.2"
|
38
43
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Librera
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-07-
|
11
|
+
date: 2018-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-saml
|
@@ -30,6 +30,20 @@ dependencies:
|
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 1.8.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: activesupport
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 3.0.0
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 3.0.0
|
33
47
|
- !ruby/object:Gem::Dependency
|
34
48
|
name: bundler
|
35
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,6 +86,34 @@ dependencies:
|
|
72
86
|
- - "~>"
|
73
87
|
- !ruby/object:Gem::Version
|
74
88
|
version: '0'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: faraday
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: faraday_middleware
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
75
117
|
- !ruby/object:Gem::Dependency
|
76
118
|
name: nokogiri
|
77
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -162,6 +204,46 @@ dependencies:
|
|
162
204
|
- - '='
|
163
205
|
- !ruby/object:Gem::Version
|
164
206
|
version: 1.27.0
|
207
|
+
- !ruby/object:Gem::Dependency
|
208
|
+
name: vcr
|
209
|
+
requirement: !ruby/object:Gem::Requirement
|
210
|
+
requirements:
|
211
|
+
- - "~>"
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: '4.0'
|
214
|
+
- - ">="
|
215
|
+
- !ruby/object:Gem::Version
|
216
|
+
version: 4.0.0
|
217
|
+
type: :development
|
218
|
+
prerelease: false
|
219
|
+
version_requirements: !ruby/object:Gem::Requirement
|
220
|
+
requirements:
|
221
|
+
- - "~>"
|
222
|
+
- !ruby/object:Gem::Version
|
223
|
+
version: '4.0'
|
224
|
+
- - ">="
|
225
|
+
- !ruby/object:Gem::Version
|
226
|
+
version: 4.0.0
|
227
|
+
- !ruby/object:Gem::Dependency
|
228
|
+
name: webmock
|
229
|
+
requirement: !ruby/object:Gem::Requirement
|
230
|
+
requirements:
|
231
|
+
- - "~>"
|
232
|
+
- !ruby/object:Gem::Version
|
233
|
+
version: '3.4'
|
234
|
+
- - ">="
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: 3.4.2
|
237
|
+
type: :development
|
238
|
+
prerelease: false
|
239
|
+
version_requirements: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - "~>"
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '3.4'
|
244
|
+
- - ">="
|
245
|
+
- !ruby/object:Gem::Version
|
246
|
+
version: 3.4.2
|
165
247
|
description:
|
166
248
|
email:
|
167
249
|
- davidlibrera@gmail.com
|
@@ -181,7 +263,10 @@ files:
|
|
181
263
|
- Rakefile
|
182
264
|
- lib/spid.rb
|
183
265
|
- lib/spid/authn_request.rb
|
184
|
-
- lib/spid/
|
266
|
+
- lib/spid/generate_authn_request.rb
|
267
|
+
- lib/spid/identity_providers.rb
|
268
|
+
- lib/spid/idp_metadata.rb
|
269
|
+
- lib/spid/metadata.rb
|
185
270
|
- lib/spid/version.rb
|
186
271
|
- spid.gemspec
|
187
272
|
homepage: https://github.com/italia/spid-ruby
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "onelogin/ruby-saml/authrequest"
|
4
|
-
|
5
|
-
module Spid
|
6
|
-
module OneLoginExtension # :nodoc:
|
7
|
-
refine ::OneLogin::RubySaml::Authrequest do
|
8
|
-
def create_xml_document(settings)
|
9
|
-
original_document = super(settings)
|
10
|
-
issuer_element = original_document.elements["//saml:Issuer"]
|
11
|
-
issuer_element.attributes["Format"] = format_entity
|
12
|
-
issuer_element.attributes["NameQualifier"] = settings.issuer
|
13
|
-
original_document
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
def format_entity
|
19
|
-
"urn:oasis:names:tc:SAML:2.0:nameid-format:entity"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|