spid 0.2.2 → 0.3.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.
- 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 | [](http://badge.fury.io/rb/spid) |
|
|
10
11
|
| Continuous integration | [](https://travis-ci.org/italia/spid-ruby) |
|
|
11
|
-
| Test
|
|
12
|
+
| Test coverate | [](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
|