spid-es 0.0.40 → 0.0.45
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/spid/ruby-saml/authrequest.rb +1 -1
- data/lib/spid/ruby-saml/metadata.rb +16 -9
- data/lib/spid/ruby-saml/response.rb +17 -1
- data/spid-es.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f385156ce2d9aec7b466ce0a726ad7cacf04d2cf57a5cb9701388e592a6590b
|
4
|
+
data.tar.gz: de3b335a2b11095447a997409a04f1514e95355e98ea7605ff5a5c9218982e36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 60ed056da9f0df5176ab0ed91f58f6a7471f92b991f5b85068228b03020dfbda3ae88409936f47d66f5dc8b096d8bc77a499d485e46d09692f159d14b4585a03
|
7
|
+
data.tar.gz: 68713da76beff56ad90f0f6cb94f1ad79c29769918a873d027bc3a63c6fdc30356753c0f6bee0163cc56690775067c8eaa4ca0c0f949260ce9e0fba748ef7aa2
|
@@ -84,7 +84,7 @@ module Spid::Saml
|
|
84
84
|
# the IdP will choose default rules for authentication. (Shibboleth IdP)
|
85
85
|
if @settings.authn_context != nil
|
86
86
|
requested_context = root.add_element "saml2p:RequestedAuthnContext", {
|
87
|
-
"Comparison" => "
|
87
|
+
"Comparison" => "minimum"
|
88
88
|
}
|
89
89
|
context_class = []
|
90
90
|
@settings.authn_context.each_with_index{ |context, index|
|
@@ -21,6 +21,8 @@ module Spid
|
|
21
21
|
|
22
22
|
attr_accessor :uuid
|
23
23
|
|
24
|
+
@@cache = {}
|
25
|
+
|
24
26
|
def initialize(settings=nil)
|
25
27
|
if settings
|
26
28
|
@settings = settings
|
@@ -392,7 +394,6 @@ module Spid
|
|
392
394
|
end
|
393
395
|
|
394
396
|
meta_doc = get_idp_metadata
|
395
|
-
|
396
397
|
return nil unless meta_doc
|
397
398
|
# first try GET (REDIRECT)
|
398
399
|
sso_element = REXML::XPath.first(meta_doc, "/EntityDescriptor/IDPSSODescriptor/#{service}[@Binding='#{HTTP_GET}']")
|
@@ -449,20 +450,26 @@ module Spid
|
|
449
450
|
# returns a REXML document of the metadata
|
450
451
|
def get_idp_metadata
|
451
452
|
return false if @settings.idp_metadata.nil?
|
452
|
-
|
453
453
|
# Look up the metdata in cache first
|
454
454
|
id = Digest::MD5.hexdigest(@settings.idp_metadata)
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
#
|
459
|
-
|
460
|
-
|
455
|
+
unless @@cache[id].blank?
|
456
|
+
Logging.debug "IdP metadata cache used for #{@settings.idp_metadata}"
|
457
|
+
doc_noko = @@cache[id]
|
458
|
+
else #save in cache
|
459
|
+
response = fetch(@settings.idp_metadata)
|
460
|
+
#meta_text = response.body
|
461
|
+
#testo_response = meta_text.sub!(' xmlns:xml="http://www.w3.org/XML/1998/namespace"', '') da errori
|
462
|
+
#uso nokogiri per cercare il certificato, uso la funzione che rimuove tutti i namespace
|
463
|
+
doc_noko = Nokogiri::XML(response.body.gsub(/\n/, "").gsub(/\t/, "")) #modifica per poste
|
464
|
+
doc_noko.remove_namespaces!
|
465
|
+
#save
|
466
|
+
@@cache[id] = doc_noko
|
467
|
+
end
|
461
468
|
extract_certificate(doc_noko)
|
462
469
|
doc_rexml = REXML::Document.new(doc_noko.to_xml)
|
463
|
-
|
464
470
|
return doc_rexml
|
465
471
|
|
472
|
+
|
466
473
|
# USE OF CACHE WITH CERTIFICATE
|
467
474
|
# lookup = @cache.read(id)
|
468
475
|
# if lookup != nil
|
@@ -235,6 +235,12 @@ module Spid
|
|
235
235
|
return node_cond_not_on_or_after.attributes["NotOnOrAfter"] unless node_cond_not_on_or_after.blank?
|
236
236
|
end
|
237
237
|
|
238
|
+
#ricavo l'issue instant della request
|
239
|
+
def assertion_authninstant
|
240
|
+
node_authn_statement = xpath_first_from_signed_assertion('/a:AuthnStatement')
|
241
|
+
return node_authn_statement.attributes["AuthnInstant"] unless node_authn_statement.blank?
|
242
|
+
end
|
243
|
+
|
238
244
|
private
|
239
245
|
|
240
246
|
def validation_error(message)
|
@@ -248,7 +254,9 @@ module Spid
|
|
248
254
|
if settings
|
249
255
|
idp_metadata = Spid::Saml::Metadata.new(settings).get_idp_metadata
|
250
256
|
end
|
251
|
-
|
257
|
+
#verifico se sono stati scaricati i metadati dell'idp
|
258
|
+
return false if validate_metadata_idp(idp_metadata) == false
|
259
|
+
|
252
260
|
#carico nei setting l'idp_entity_id
|
253
261
|
entity_descriptor_element = REXML::XPath.first(idp_metadata,"/EntityDescriptor")
|
254
262
|
if !entity_descriptor_element.nil?
|
@@ -334,6 +342,14 @@ module Spid
|
|
334
342
|
end
|
335
343
|
|
336
344
|
|
345
|
+
#validate presenza dei metadata per idp
|
346
|
+
def validate_metadata_idp(metadata_idp)
|
347
|
+
if metadata_idp.blank?
|
348
|
+
validation_error("Metadata idp non raggiungibile per #{settings.idp_entity_id}")
|
349
|
+
else
|
350
|
+
return true
|
351
|
+
end
|
352
|
+
end
|
337
353
|
|
338
354
|
# Validates the SAML version (2.0)
|
339
355
|
# If fails, the error is added to the errors array.
|
data/spid-es.gemspec
CHANGED
@@ -2,7 +2,7 @@ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'spid-es'
|
5
|
-
s.version = '0.0.
|
5
|
+
s.version = '0.0.45'
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Fabiano Pavan"]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spid-es
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.45
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fabiano Pavan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: canonix
|