italia / spid-rails

SPID authentication for Ruby on Rails
MIT License
13 stars 9 forks source link

Errore nell'inserimento del middleware Spid::Rack #29

Closed Jeanluc74 closed 5 years ago

Jeanluc74 commented 5 years ago

Buongiorno,

l'inserimento del middleware, come indicato nel readme, nell'application.rb tra # start e # end

require_relative 'boot' require 'rails/all' Bundler.require(*Rails.groups) require 'spid-rails'

module TestSpid3 class Application < Rails::Application config.load_defaults 5.2

start

config.middleware.insert_after( ::ActionDispatch::Session::CookieStore, ::Spid::Rack )

end

end end

mi restituisce un errore

Traceback (most recent call last): ... /home/decidim/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/active_support.rb:60:in `block in load_missing_constant': uninitialized constant Spid::Rack (NameError)

Ho tentato più strade nel dubbio che la gem non fosse installata correttamente ma non ho riscontrato nessun problema apparente.

Sto usando:

lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.2 LTS Release: 18.04 Codename: bionic

ruby -v ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

rails -v Rails 5.2.3

Sarebbe molto utile vostro aiuto.

Grazie

Gian Luca

Jeanluc74 commented 5 years ago

Non ho risolto facendo rollback di rails alla 5.1.4.

Jeanluc74 commented 5 years ago

Noto anche che in Rubynetti-rails non è stato inserito il middleware

require_relative 'boot' require 'rails/all' Bundler.require(*Rails.groups)

module RubynettiRails class Application < Rails::Application

Initialize configuration defaults for originally generated Rails version.

config.load_defaults 5.1

# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.

end end

descovi commented 5 years ago

Noto anche che in Rubynetti-rails non è stato inserito il middleware

Buongiorno, rubynetti-rails era il primissimo e sperimentale progetto quindi meglio evitarne l'uso ;-)

descovi commented 5 years ago

Ho appena notato che nel readme di questo repository c'è ancora il riferimento alla precedente procedura e progetto. Probabilmente va aggiornato. @davidlibrera ci potresti dare una mano a riguardo?

Jeanluc74 commented 5 years ago

Buongiorno, scusate se risulto insistente, ci sono novità? l'errore sopra purtroppo è bloccante, mi aiuterebbe capire se é legato ad un problema mio o se è relativo alla gem, oramai ho provato in più ambienti e più configurazioni ma non riesco a venirne fuori.

davidlibrera commented 5 years ago

Salve @Jeanluc74, buonasera.

Scusi se leggo adesso ma ho avuto un bel po' di impegni e non avevo guardato le notifiche. Cerco di riprodurre in locale e guardo cosa sta succedento.

Jeanluc74 commented 5 years ago

OK, grazie mille!

davidlibrera commented 5 years ago

@Jeanluc74 riguardo a questo, ho fatto una prova e tramite rails console vedo correttamente Spid::Rack come modulo

[2] pry(main)> Spid::Rack
=> Spid::Rack

potrebbe indicarmi anche le versioni di spid-ruby e spid-rails che sta utilizzando?

Jeanluc74 commented 5 years ago

Grazie per la risposta, il vostro aiuto mi può essere davvero utile a risolvere.

pry [1] pry(main)> Spid::Rack NameError: uninitialized constant Spid from (pry):1:in `pry'

LOCAL GEMS

spid-rails (0.1.3) Author: Alessandro Descovi, Giacomo Bertoldi Homepage: https://github.com/italia/spid-rails License: MIT Installed at: /home/decidim/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0

SPID, il Sistema Pubblico di Identita' Digitale

LOCAL GEMS

spid (0.19.0) Author: David Librera Homepage: https://github.com/italia/spid-ruby License: BSD-3 Installed at: /home/decidim/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0

SPID (https://www.spid.gov.it) integration for ruby

Gemfile (come da readme NON include 'spid' ma solo 'spid-rails', come sotto include anche 'devise', per il resto tutto standard)

source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby RUBY_VERSION

gem 'rails', '5.1.4' gem 'pg', '~> 0.20'

gem 'puma', '~> 3.11'

gem 'sass-rails', '~> 5.0' gem 'uglifier', '>= 1.3.0'

gem 'coffee-rails', '~> 4.2' gem 'turbolinks', '~> 5' gem 'jbuilder', '~> 2.5'

gem 'bootsnap', '>= 1.1.0', require: false gem 'devise'

group :development, :test do gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end

group :development do gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end

group :test do gem 'capybara', '>= 2.15' gem 'selenium-webdriver' gem 'chromedriver-helper' end

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] gem 'spid-rails'

bundle install ... Using spid-rails 0.1.3 ... Using ruby-saml 1.8.0

la gem 'spid' non è referenziata dal progetto, come se 'spid-rails' non la stesse caricando. Ovviamente non ho fatto alcuna modifica in locale alla gem 'spid-rails'.

NB: ho provato anche ad includere nel mio progetto che usa 'spid-rails', quindi nel Gemfile sopra, anche la gem 'spid'.

Anche in quel caso:

pry [1] pry(main)> Spid::Rack NameError: uninitialized constant Spid from (pry):1:in `pry'

ma nessun errore sul middleware in avvio dell'applicazione, il che potrebbe essere corretto ma non so quanto le due gem siano referenziate tra loro correttamente.

Grazie mille per l'aiuto,

Gian Luca

davidlibrera commented 5 years ago

Ho capito il problema. Al momento non è stata rilasciata su rubygems l'ultima versione di "spid-rails". Per adesso può sostituire gem "spid-rails" con gem "spid-rails", github: "italia/spid-rails", ref: :master

Così facendo punterà al master che a sua volta si porterà con se spid 0.19.0.

@simonini andrebbe rilasciata una versione nuova su rubygems, direi la versione 0.2.0 dato che è cambiata abbastanza l'api. Io non posso farlo perché non sono mainteiner su rubygems. Potreste occuparvene tu o @Jecko-o ?

Credo che questa soluzione sia valida anche per #28

descovi commented 5 years ago

@davidlibrera abbiamo pubblicato la versione 0.2.0 ;) https://rubygems.org/gems/spid-rails/versions/0.2.0

Jeanluc74 commented 5 years ago

OK, grazie per la disponibilità e l'aiuto. Ho installato la nuova versione della gem e purtroppo sono arrivato ad un nuovo scoglio.

1) Vedo che il task rake spid:fetch_idp_metadata è basato sullo scaricamento da https://registry.spid.gov.it/api/identity-providers di un xml con l'elenco dei metadata per ogni idp suppongo. Il sito però restituisce 502 Bad Gateway. Spero di non approfittare della voltra disponibilità: non so chi lo gestisca, (o se sia dismesso o se l'URL sia stato modificato...): avete eventualmente un'idea di a chi/come inoltrare una segnalazione?

2) E' sempre possibile importare un idp di test tramite idp_import.yml? in questa fase sto facendo test in locale e mi è essenziale. Se non è più supportato, basta fare il download sulla cartella del metadata.xml dell'idp di test?

Grazie ancora,

Gian Luca

Jeanluc74 commented 5 years ago

...accodo al precedente commento: il sito https://registry.spid.gov.it/identity-providers è funzionante. Sembra manchi, probabilmente per scelta, o sia stata spostata la parte di api che include quella funzionalità.

Gian Luca

davidlibrera commented 5 years ago

@Jeanluc74 ho aperto una issue sulla gemma spid-ruby. L'ultima volta che affrontai questa problematica con i ragazzi del team digitale si parlava di un meccanismo certificato per affrontare questo problema. La soluzione del task rake era una cosa aggiuntiva che non era nelle specifiche del tempo, ma pensai fosse una cosa comoda da affiancare ai deploy heroku o tramite capistrano. Per il momento la soluzione è quella di scaricarli nella directory configurata dall'attributo Spid.metadata_dir_path tramite curl, facendo attenzione a chiamare i files nel formato arubaid-metadata.xml, intesaid-metadata.xml ecc. L'unica eccezione è SPIDItalia che deve chiamarsi spiditalia-metadata.xml e aggiungerli al codebase.

In sviluppo invece per utilizzarlo con testenv2 bisogna generarlo tramite il testenv2 stesso tramite questa funzionalità e chiamarlo, se non sbaglio, ipd-metadata.xml.

Jeanluc74 commented 5 years ago

OK, perfetto grazie.