spid-rails 0.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -5
  3. data/Rakefile +1 -1
  4. data/app/assets/config/spid-rails_manifest.js +2 -0
  5. data/app/assets/javascripts/{spid_rails → spid-rails}/application.js +0 -0
  6. data/app/assets/javascripts/{spid_rails → spid-rails}/metadata.js +0 -0
  7. data/app/assets/stylesheets/{spid_rails → spid-rails}/application.css +0 -0
  8. data/app/assets/stylesheets/{spid_rails → spid-rails}/metadata.css +0 -0
  9. data/app/controllers/spid/rails/application_controller.rb +9 -0
  10. data/app/controllers/spid/rails/metadata_controller.rb +17 -0
  11. data/app/controllers/spid/rails/single_logout_operations_controller.rb +45 -0
  12. data/app/controllers/spid/rails/single_sign_ons_controller.rb +38 -0
  13. data/app/helpers/spid/rails/application_helper.rb +8 -0
  14. data/app/jobs/spid/rails/application_job.rb +8 -0
  15. data/app/mailers/spid/rails/application_mailer.rb +10 -0
  16. data/app/models/{spid_rails → spid}/certificate.rb +1 -1
  17. data/app/models/{spid_rails → spid}/idp.rb +2 -2
  18. data/app/models/{spid_rails → spid}/metadata.rb +4 -4
  19. data/app/models/spid/rails/application_record.rb +9 -0
  20. data/app/models/{spid_rails → spid}/settings/metadata.rb +2 -2
  21. data/app/models/{spid_rails → spid}/settings/slo.rb +1 -1
  22. data/app/models/{spid_rails → spid}/settings/sso.rb +1 -1
  23. data/app/models/{spid_rails → spid}/settings.rb +11 -10
  24. data/app/models/{spid_rails → spid}/slo_request.rb +2 -2
  25. data/app/models/{spid_rails → spid}/slo_response.rb +2 -2
  26. data/app/models/{spid_rails → spid}/sso_request.rb +3 -3
  27. data/app/models/{spid_rails → spid}/sso_response.rb +2 -2
  28. data/app/views/layouts/{spid_rails → spid-rails}/application.html.erb +2 -2
  29. data/config/routes.rb +5 -5
  30. data/lib/generators/spid/rails/config_generator.rb +21 -0
  31. data/lib/generators/spid/rails/keys_generator.rb +45 -0
  32. data/lib/generators/{spid_rails/templates/spid_rails.rb → spid/rails/templates/spid-rails.rb} +1 -1
  33. data/lib/spid-rails/engine.rb +12 -0
  34. data/lib/{spid_rails → spid-rails}/onelogin/rubysaml/authrequest.rb +0 -0
  35. data/lib/spid-rails/version.rb +7 -0
  36. data/lib/spid-rails.rb +44 -0
  37. data/lib/tasks/{spid_rails_tasks.rake → spid-rails_tasks.rake} +1 -1
  38. metadata +59 -38
  39. data/app/assets/config/spid_rails_manifest.js +0 -2
  40. data/app/controllers/spid_rails/application_controller.rb +0 -5
  41. data/app/controllers/spid_rails/metadata_controller.rb +0 -15
  42. data/app/controllers/spid_rails/single_logout_operations_controller.rb +0 -43
  43. data/app/controllers/spid_rails/single_sign_ons_controller.rb +0 -36
  44. data/app/helpers/spid_rails/application_helper.rb +0 -4
  45. data/app/jobs/spid_rails/application_job.rb +0 -4
  46. data/app/mailers/spid_rails/application_mailer.rb +0 -6
  47. data/app/models/spid_rails/application_record.rb +0 -5
  48. data/lib/generators/spid_rails/config_generator.rb +0 -18
  49. data/lib/spid_rails/engine.rb +0 -8
  50. data/lib/spid_rails/version.rb +0 -3
  51. data/lib/spid_rails.rb +0 -42
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8aecb3b0eb7abdba6750c9bb4df29868dfa5f64b
4
- data.tar.gz: 2ac156310a32d15632dffcfb48e8c88519357515
3
+ metadata.gz: f108d0b31001c264c51796b9df4aa5454700f688
4
+ data.tar.gz: a019ec7b7ca6e8b987130833b9e3d523675efe02
5
5
  SHA512:
6
- metadata.gz: 9a57490aa21db27b99b68ed58f4fc6985fca5d25ff7326ce532334eb10be361d82ebf876f0f2bf4204f56b1287fecbe47b41078c6744aba91f91c09db2a7125b
7
- data.tar.gz: 672ffaccb4f92ebfab71a8fd1c04de0f526a54365935b860096d3b1e88ffa6f6097e983035b0c03afaa3ce3d3f6f867b56f99bc2445b1235a7ea40ce05535b03
6
+ metadata.gz: bfc44ee3993d4b12ba11f05963c249a44a0b63d0ddaf4fcfe7aacc78cb366d35c488f4554c38352cb023ccacbb788a93399dcf4b9722e99bab53df1a0098f76c
7
+ data.tar.gz: 9d40620088768d93ffba95d18d501a54f9dc70622cbadf88525805c23342476d41e6127c552459b3ae1aa1bb18b7c845a4f55274c7089cd363ffed1d6af5643d
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # spid-rails 0.1.1
1
+ # spid-rails 0.1.2
2
2
  Autenticazione SPID per Ruby on Rails.
3
3
  Questa gemma si appoggia alla gemma [ruby-saml](https://github.com/onelogin/ruby-saml).
4
4
 
@@ -18,7 +18,7 @@ repository: https://github.com/rubynetti/rubynetti-rails
18
18
  All'interno del Gemfile indicare questa gemma:
19
19
 
20
20
  ```ruby
21
- gem 'spid-rails', require: 'spid_rails'
21
+ gem 'spid-rails'
22
22
  ```
23
23
 
24
24
  Eseguire
@@ -38,7 +38,7 @@ Il metadata generato può essere utilizzato per farsi accreditare e in seguito d
38
38
  Per creare il file di configurazione:
39
39
 
40
40
  ```bash
41
- $ rails g spid_rails:config
41
+ $ rails g spid:rails:config
42
42
  ```
43
43
 
44
44
  Il file viene aggiunto agli initializer dell'applicazione e permette il settaggio personalizzato del mount-point dell'engine e i relativi end-point per le procedure Spid di login, logout e visualizzazione del metadata del Service Provider.
@@ -46,11 +46,11 @@ Il file viene aggiunto agli initializer dell'applicazione e permette il settaggi
46
46
  Le restanti impostazioni permettono di configurare il percorso di sistema dove reperire la coppia chiave privata/certificato e il livello di crittografia per l'eventuale signature.
47
47
 
48
48
  ```ruby
49
- # config/initializers/spid_rails.rb
49
+ # config/initializers/spid-rails.rb
50
50
 
51
51
  # Impostazioni di default dello Spid Engine
52
52
 
53
- SpidRails.tap do |config|
53
+ Spid::Rails.tap do |config|
54
54
 
55
55
  # Mount point di Spid sull'applicazione
56
56
  # default: 'spid'
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ require 'rdoc/task'
8
8
 
9
9
  RDoc::Task.new(:rdoc) do |rdoc|
10
10
  rdoc.rdoc_dir = 'rdoc'
11
- rdoc.title = 'SpidRails'
11
+ rdoc.title = 'Spid::Rails'
12
12
  rdoc.options << '--line-numbers'
13
13
  rdoc.rdoc_files.include('README.md')
14
14
  rdoc.rdoc_files.include('lib/**/*.rb')
@@ -0,0 +1,2 @@
1
+ //= link_directory ../javascripts/spid-rails .js
2
+ //= link_directory ../stylesheets/spid-rails .css
@@ -0,0 +1,9 @@
1
+ module Spid
2
+ module Rails
3
+
4
+ class ApplicationController < ActionController::Base
5
+ protect_from_forgery with: :exception
6
+ end
7
+
8
+ end
9
+ end
@@ -0,0 +1,17 @@
1
+ require_dependency "spid/rails/application_controller"
2
+
3
+ # Metadata del Service Provider
4
+ module Spid
5
+ module Rails
6
+
7
+ class MetadataController < ApplicationController
8
+
9
+ def show
10
+ metadata = Metadata.create(host: main_app.root_url)
11
+ render xml: metadata.to_xml
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,45 @@
1
+ require_dependency "spid/rails/application_controller"
2
+
3
+ module Spid
4
+ module Rails
5
+
6
+ class SingleLogoutOperationsController < ApplicationController
7
+ skip_before_action :verify_authenticity_token, only: :create
8
+
9
+ def new
10
+ logout_request = SloRequest.new(slo_params)
11
+ redirect_to logout_request.to_saml
12
+ session[:spid_slo_id] = logout_request.uuid
13
+ end
14
+
15
+ def create
16
+ logout_response = SloResponse.new(params[:SAMLResponse],
17
+ session[:spid_slo_id],
18
+ slo_params)
19
+ # TODO: approfondire validazione logout
20
+ destroy_spid_session
21
+ redirect_to main_app.root_path, notice: 'Logout utente eseguito con successo'
22
+ end
23
+
24
+ private
25
+
26
+ def slo_params
27
+ {
28
+ host: main_app.root_url,
29
+ idp: session[:sso_params]['idp'],
30
+ session_index: session[:spid_index]
31
+ }
32
+ end
33
+
34
+ def destroy_spid_session
35
+ session[:sso_params] = nil
36
+ session[:spid_index] = nil
37
+ session[:spid_slo_id] = nil
38
+ session[:spid_relay_state] = nil
39
+ session[:spid_login_time] = nil
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,38 @@
1
+ require_dependency "spid/rails/application_controller"
2
+
3
+ module Spid
4
+ module Rails
5
+
6
+ class SingleSignOnsController < ApplicationController
7
+ skip_before_action :verify_authenticity_token, only: :create
8
+
9
+ def new
10
+ request = SsoRequest.new(sso_params)
11
+ redirect_to request.to_saml
12
+ session[:sso_params] = sso_params
13
+ end
14
+
15
+ def create
16
+ response = SsoResponse.new(params[:SAMLResponse], session[:sso_params])
17
+ if response.valid?
18
+ session[:spid_index] = response.session_index
19
+ session[:spid_login_time] = Time.now
20
+ redirect_to session[:relay_state] || main_app.root_path, notice: 'Utente autenticato con successo'
21
+ else
22
+ redirect_to main_app.root_path, notice: 'Autenticazione fallita'
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def sso_params
29
+ sso_params = params.require(:sso).permit(:idp, :spid_level, bindings: [])
30
+ sso_params[:host] = main_app.root_url
31
+ sso_params[:relay_state] = session[:spid_relay_state] || main_app.root_url
32
+ sso_params
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,8 @@
1
+ module Spid
2
+ module Rails
3
+
4
+ module ApplicationHelper
5
+ end
6
+
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Spid
2
+ module Rails
3
+
4
+ class ApplicationJob < ActiveJob::Base
5
+ end
6
+
7
+ end
8
+ end
@@ -0,0 +1,10 @@
1
+ module Spid
2
+ module Rails
3
+
4
+ class ApplicationMailer < ActionMailer::Base
5
+ default from: 'from@example.com'
6
+ layout 'mailer'
7
+ end
8
+
9
+ end
10
+ end
@@ -1,4 +1,4 @@
1
- module SpidRails
1
+ module Spid
2
2
 
3
3
  class Certificate
4
4
 
@@ -1,4 +1,4 @@
1
- module SpidRails
1
+ module Spid
2
2
 
3
3
  class Idp
4
4
 
@@ -8,7 +8,7 @@ module SpidRails
8
8
  'aruba' => 'https://loginspid.aruba.it/metadata',
9
9
  'infocert' => 'https://identity.infocert.it/metadata/metadata.xml',
10
10
  'namirial' => 'https://idp.namirialtsp.com/idp/metadata',
11
- 'poste' => 'http://posteid.poste.it/jod-fs/metadata/metadata.xml',
11
+ 'poste' => 'https://posteid.poste.it/jod-fs/metadata/metadata.xml',
12
12
  'poste_test' => 'http://spidposte.test.poste.it/jod-fs/metadata/idp.xml',
13
13
  'spiditalia' => 'https://spid.register.it/login/metadata',
14
14
  'sielte' => 'https://identity.sieltecloud.it/simplesaml/metadata.xml',
@@ -1,4 +1,4 @@
1
- module SpidRails
1
+ module Spid
2
2
 
3
3
  class Metadata
4
4
  attr_accessor :settings
@@ -9,7 +9,7 @@ module SpidRails
9
9
  end
10
10
 
11
11
  def initialize spid_params
12
- spid_settings = SpidRails::Settings::Metadata.new(spid_params)
12
+ spid_settings = Settings::Metadata.new(spid_params)
13
13
  @settings = spid_settings.to_hash
14
14
  end
15
15
 
@@ -25,14 +25,14 @@ module SpidRails
25
25
  end
26
26
 
27
27
  def validate_signature_encryption
28
- signature_algorithms = SpidRails::Certificate.signature_algorithms
28
+ signature_algorithms = Certificate.signature_algorithms
29
29
  if signature_algorithms.exclude?(settings[:security][:signature_method])
30
30
  raise 'Signature deve essere presente (impostare encryption sha a 256, 384, 512)'
31
31
  end
32
32
  end
33
33
 
34
34
  def validate_digest_encryption
35
- digest_algorithms = SpidRails::Certificate.digest_algorithms
35
+ digest_algorithms = Certificate.digest_algorithms
36
36
  if digest_algorithms.exclude?(settings[:security][:digest_method])
37
37
  raise 'Signature deve essere presente (impostare encryption sha a 256, 384, 512)'
38
38
  end
@@ -0,0 +1,9 @@
1
+ module Spid
2
+ module Rails
3
+
4
+ class ApplicationRecord < ActiveRecord::Base
5
+ self.abstract_class = true
6
+ end
7
+
8
+ end
9
+ end
@@ -1,4 +1,4 @@
1
- module SpidRails
1
+ module Spid
2
2
 
3
3
  class Settings::Metadata < Settings
4
4
 
@@ -7,5 +7,5 @@ module SpidRails
7
7
  end
8
8
 
9
9
  end
10
-
10
+
11
11
  end
@@ -1,4 +1,4 @@
1
- module SpidRails
1
+ module Spid
2
2
 
3
3
  class Settings::Slo < Settings
4
4
 
@@ -1,4 +1,4 @@
1
- module SpidRails
1
+ module Spid
2
2
 
3
3
  class Settings::Sso < Settings
4
4
 
@@ -1,4 +1,4 @@
1
- module SpidRails
1
+ module Spid
2
2
 
3
3
  class Settings
4
4
 
@@ -27,11 +27,11 @@ module SpidRails
27
27
 
28
28
 
29
29
  def initialize spid_params
30
- @metadata_path = SpidRails.app_metadata_path
31
- @sso_path = SpidRails.app_sso_path
32
- @slo_path = SpidRails.app_slo_path
33
- @keys_path = SpidRails.keys_path
34
- @sha = SpidRails.sha
30
+ @metadata_path = Spid::Rails.app_metadata_path
31
+ @sso_path = Spid::Rails.app_sso_path
32
+ @slo_path = Spid::Rails.app_slo_path
33
+ @keys_path = Spid::Rails.keys_path
34
+ @sha = Spid::Rails.sha
35
35
  @bindings = [:redirect]
36
36
  @spid_level = 1
37
37
  spid_params.each do |k, v|
@@ -40,12 +40,13 @@ module SpidRails
40
40
  end
41
41
 
42
42
  def security_attributes
43
- dig_alg = SpidRails::Certificate.digest_algorithm(@sha)
44
- sig_alg = SpidRails::Certificate.signature_algorithm(@sha)
43
+ dig_alg = Certificate.digest_algorithm(@sha)
44
+ sig_alg = Certificate.signature_algorithm(@sha)
45
45
  {
46
46
  metadata_signed: true,
47
47
  digest_method: dig_alg,
48
48
  signature_method: sig_alg,
49
+ authn_requests_signed: true,
49
50
  want_assertions_signed: true
50
51
  }
51
52
  end
@@ -56,8 +57,8 @@ module SpidRails
56
57
  issuer: host + metadata_path,
57
58
  assertion_consumer_service_url: host + sso_path,
58
59
  single_logout_service_url: host + slo_path,
59
- private_key: File.read("#{Rails.root}/#{keys_path}/private_key.pem"),
60
- certificate: File.read("#{Rails.root}/#{keys_path}/certificate.pem"),
60
+ private_key: File.read("#{::Rails.root}/#{keys_path}/private_key.pem"),
61
+ certificate: File.read("#{::Rails.root}/#{keys_path}/certificate.pem"),
61
62
  security: security_attributes
62
63
  }
63
64
  end
@@ -1,9 +1,9 @@
1
- module SpidRails
1
+ module Spid
2
2
 
3
3
  class SloRequest
4
4
 
5
5
  def initialize slo_params
6
- spid_settings = SpidRails::Settings::Slo.new(slo_params)
6
+ spid_settings = Settings::Slo.new(slo_params)
7
7
  @settings = spid_settings.to_hash
8
8
  @request = OneLogin::RubySaml::Logoutrequest.new
9
9
  end
@@ -1,9 +1,9 @@
1
- module SpidRails
1
+ module Spid
2
2
 
3
3
  class SloResponse
4
4
 
5
5
  def initialize saml_response, slo_id, slo_params
6
- spid_settings = SpidRails::Settings::Slo.new(slo_params)
6
+ spid_settings = Settings::Slo.new(slo_params)
7
7
  settings = OneLogin::RubySaml::Settings.new(spid_settings.to_hash)
8
8
  @response = OneLogin::RubySaml::Logoutresponse.new(saml_response,
9
9
  settings,
@@ -1,11 +1,11 @@
1
- module SpidRails
1
+ module Spid
2
2
 
3
3
  class SsoRequest
4
4
 
5
5
  attr_accessor :settings
6
6
 
7
7
  def initialize spid_params
8
- spid_settings = SpidRails::Settings::Sso.new(spid_params)
8
+ spid_settings = Settings::Sso.new(spid_params)
9
9
  @settings = spid_settings.to_hash
10
10
  end
11
11
 
@@ -19,7 +19,7 @@ module SpidRails
19
19
  if settings[:authn_context_comparison] != 'minimum'
20
20
  raise "AuthnContextComparison deve essere settato a 'minimum' (impostare authn_context_comparison a 'minimum')"
21
21
  end
22
- if settings[:protocol_binding] != SpidRails::Settings.saml_bindings[:post]
22
+ if settings[:protocol_binding] != Settings.saml_bindings[:post]
23
23
  raise "Issuer deve contenere l'attributo ProtocolBinding con binding POST (impostare protocl_binding a ':post')"
24
24
  end
25
25
  end
@@ -1,10 +1,10 @@
1
- module SpidRails
1
+ module Spid
2
2
 
3
3
  class SsoResponse
4
4
 
5
5
  def initialize saml_response, sso_params
6
6
  response = OneLogin::RubySaml::Response.new(saml_response)
7
- settings = SpidRails::Settings::Sso.new(sso_params)
7
+ settings = Settings::Sso.new(sso_params)
8
8
  saml_settings = OneLogin::RubySaml::Settings.new(settings.to_hash)
9
9
  response.settings = saml_settings
10
10
  @response = response
@@ -2,8 +2,8 @@
2
2
  <html>
3
3
  <head>
4
4
  <title>Spid rails</title>
5
- <%= stylesheet_link_tag "spid_rails/application", media: "all" %>
6
- <%= javascript_include_tag "spid_rails/application" %>
5
+ <%= stylesheet_link_tag "spid-rails/application", media: "all" %>
6
+ <%= javascript_include_tag "spid-rails/application" %>
7
7
  <%= csrf_meta_tags %>
8
8
  </head>
9
9
  <body>
data/config/routes.rb CHANGED
@@ -1,12 +1,12 @@
1
1
  Rails.application.routes.draw do
2
- mount SpidRails::Engine, at: SpidRails.mount_point
2
+ mount Spid::Rails::Engine, at: Spid::Rails.mount_point
3
3
  end
4
4
 
5
- SpidRails::Engine.routes.draw do
5
+ Spid::Rails::Engine.routes.draw do
6
6
  resource :metadata, only: :show,
7
- path: SpidRails.metadata_path
7
+ path: Spid::Rails.metadata_path
8
8
  resource :sso, only: [:new, :create], controller: :single_sign_ons,
9
- path: SpidRails.sso_path
9
+ path: Spid::Rails.sso_path
10
10
  resource :slo, only: [:new, :create], controller: :single_logout_operations,
11
- path: SpidRails.slo_path
11
+ path: Spid::Rails.slo_path
12
12
  end
@@ -0,0 +1,21 @@
1
+ module Spid
2
+ module Rails
3
+
4
+ module Generators
5
+
6
+ class ConfigGenerator < ::Rails::Generators::Base
7
+
8
+ source_root File.expand_path("../templates", __FILE__)
9
+
10
+ desc "Crea il file di configurazione di spid (config/initializers/spid-rails.rb)."
11
+
12
+ def create_initializer_file
13
+ template "spid-rails.rb", "./config/initializers/spid-rails.rb"
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,45 @@
1
+ module Spid
2
+ module Rails
3
+
4
+ module Generators
5
+
6
+ class KeysGenerator < ::Rails::Generators::Base
7
+ class_option :cn, type: :string, default: 'spid-rails-test', desc: 'Common name for the X509 certificate'
8
+ class_option :size, type: :numeric, default: 1024, desc: 'RSA key bit size'
9
+ class_option :digest, type: :string, default: 'SHA256', desc: 'Digest algorithm for signing the certificate'
10
+ class_option :validity, type: :numeric, default: 1, desc: "Certificate validity expressed in months"
11
+
12
+ desc "Description:\n" +
13
+ " Generate a RSA key and use it to generate a self-signed certificate in the keys path\n" +
14
+ " WARNING: this generator is ment to be used only for testing purpose."
15
+
16
+ def create_key
17
+ @key = OpenSSL::PKey::RSA.new options[:size]
18
+ end
19
+
20
+ def create_certificate
21
+ name = OpenSSL::X509::Name.parse "CN=#{options[:cn]}"
22
+ sha_alg = OpenSSL::Digest.const_get(options[:digest]).new
23
+ @cert = OpenSSL::X509::Certificate.new
24
+ @cert.version = 2
25
+ @cert.serial = 0
26
+ @cert.not_before = Time.now
27
+ @cert.not_after = @cert.not_before + options[:validity].months
28
+ @cert.public_key = @key.public_key
29
+ @cert.subject = name
30
+ @cert.issuer = name
31
+ @cert.sign @key, sha_alg
32
+ end
33
+
34
+ def write_keys
35
+ path = './' + Spid::Rails.keys_path
36
+ create_file path + 'private_key.pem', @key.to_pem
37
+ create_file path + 'certificate.pem', @cert.to_pem
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+ end
@@ -1,6 +1,6 @@
1
1
  # Impostazioni di default dello Spid Engine
2
2
 
3
- SpidRails.tap do |config|
3
+ Spid::Rails.tap do |config|
4
4
 
5
5
  # Mount point di Spid sull'applicazione
6
6
  # default: 'spid'
@@ -0,0 +1,12 @@
1
+ require 'onelogin/ruby-saml'
2
+ require 'spid-rails/onelogin/rubysaml/authrequest'
3
+
4
+ module Spid
5
+ module Rails
6
+
7
+ class Engine < ::Rails::Engine
8
+ isolate_namespace Spid::Rails
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,7 @@
1
+ module Spid
2
+ module Rails
3
+
4
+ VERSION = '0.1.2'
5
+
6
+ end
7
+ end
data/lib/spid-rails.rb ADDED
@@ -0,0 +1,44 @@
1
+ require "spid-rails/engine"
2
+
3
+ module Spid
4
+ module Rails
5
+
6
+ # Mount point di Spid sull'applicazione
7
+ mattr_accessor :mount_point
8
+ @@mount_point = 'spid'
9
+
10
+ # Url alla quale è disponibile il metadata del provider
11
+ mattr_accessor :metadata_path
12
+ @@metadata_path = 'metadata'
13
+
14
+ # Url alla quale ricevere le risposte di autenticazione Saml
15
+ mattr_accessor :sso_path
16
+ @@sso_path = 'sso'
17
+
18
+ # Url alla quale ricevere le risposte di logout Saml
19
+ mattr_accessor :slo_path
20
+ @@slo_path = 'slo'
21
+
22
+ # Percorso relativo alla root dell'app
23
+ # al quale reperire la coppia chiave privata - certificato
24
+ mattr_accessor :keys_path
25
+ @@keys_path = 'lib/.keys/'
26
+
27
+ # Livello di crittografia SHA per la generazione delle signature
28
+ mattr_accessor :sha
29
+ @@sha = 256
30
+
31
+ def self.app_metadata_path
32
+ "#{mount_point}/#{@@metadata_path}"
33
+ end
34
+
35
+ def self.app_sso_path
36
+ "#{mount_point}/#{@@sso_path}"
37
+ end
38
+
39
+ def self.app_slo_path
40
+ "#{mount_point}/#{@@slo_path}"
41
+ end
42
+
43
+ end
44
+ end
@@ -1,4 +1,4 @@
1
1
  # desc "Explaining what the task does"
2
- # task :spid_rails do
2
+ # task :spid-rails do
3
3
  # # Task goes here
4
4
  # end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spid-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alessandro Descovi, Giacomo Bertoldi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-13 00:00:00.000000000 Z
11
+ date: 2018-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -44,20 +44,40 @@ dependencies:
44
44
  - - '='
45
45
  - !ruby/object:Gem::Version
46
46
  version: 1.5.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: rails-html-sanitizer
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.0'
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 1.0.4
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '1.0'
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 1.0.4
47
67
  - !ruby/object:Gem::Dependency
48
68
  name: sqlite3
49
69
  requirement: !ruby/object:Gem::Requirement
50
70
  requirements:
51
71
  - - "~>"
52
72
  - !ruby/object:Gem::Version
53
- version: '0'
73
+ version: '1.3'
54
74
  type: :development
55
75
  prerelease: false
56
76
  version_requirements: !ruby/object:Gem::Requirement
57
77
  requirements:
58
78
  - - "~>"
59
79
  - !ruby/object:Gem::Version
60
- version: '0'
80
+ version: '1.3'
61
81
  description: Soluzione per poter effettuare il login tramite SPID
62
82
  email:
63
83
  - descovi@gmail.com, bertoldi.giacomo@gmail.com
@@ -68,39 +88,40 @@ files:
68
88
  - MIT-LICENSE
69
89
  - README.md
70
90
  - Rakefile
71
- - app/assets/config/spid_rails_manifest.js
72
- - app/assets/javascripts/spid_rails/application.js
73
- - app/assets/javascripts/spid_rails/metadata.js
74
- - app/assets/stylesheets/spid_rails/application.css
75
- - app/assets/stylesheets/spid_rails/metadata.css
76
- - app/controllers/spid_rails/application_controller.rb
77
- - app/controllers/spid_rails/metadata_controller.rb
78
- - app/controllers/spid_rails/single_logout_operations_controller.rb
79
- - app/controllers/spid_rails/single_sign_ons_controller.rb
80
- - app/helpers/spid_rails/application_helper.rb
81
- - app/jobs/spid_rails/application_job.rb
82
- - app/mailers/spid_rails/application_mailer.rb
83
- - app/models/spid_rails/application_record.rb
84
- - app/models/spid_rails/certificate.rb
85
- - app/models/spid_rails/idp.rb
86
- - app/models/spid_rails/metadata.rb
87
- - app/models/spid_rails/settings.rb
88
- - app/models/spid_rails/settings/metadata.rb
89
- - app/models/spid_rails/settings/slo.rb
90
- - app/models/spid_rails/settings/sso.rb
91
- - app/models/spid_rails/slo_request.rb
92
- - app/models/spid_rails/slo_response.rb
93
- - app/models/spid_rails/sso_request.rb
94
- - app/models/spid_rails/sso_response.rb
95
- - app/views/layouts/spid_rails/application.html.erb
91
+ - app/assets/config/spid-rails_manifest.js
92
+ - app/assets/javascripts/spid-rails/application.js
93
+ - app/assets/javascripts/spid-rails/metadata.js
94
+ - app/assets/stylesheets/spid-rails/application.css
95
+ - app/assets/stylesheets/spid-rails/metadata.css
96
+ - app/controllers/spid/rails/application_controller.rb
97
+ - app/controllers/spid/rails/metadata_controller.rb
98
+ - app/controllers/spid/rails/single_logout_operations_controller.rb
99
+ - app/controllers/spid/rails/single_sign_ons_controller.rb
100
+ - app/helpers/spid/rails/application_helper.rb
101
+ - app/jobs/spid/rails/application_job.rb
102
+ - app/mailers/spid/rails/application_mailer.rb
103
+ - app/models/spid/certificate.rb
104
+ - app/models/spid/idp.rb
105
+ - app/models/spid/metadata.rb
106
+ - app/models/spid/rails/application_record.rb
107
+ - app/models/spid/settings.rb
108
+ - app/models/spid/settings/metadata.rb
109
+ - app/models/spid/settings/slo.rb
110
+ - app/models/spid/settings/sso.rb
111
+ - app/models/spid/slo_request.rb
112
+ - app/models/spid/slo_response.rb
113
+ - app/models/spid/sso_request.rb
114
+ - app/models/spid/sso_response.rb
115
+ - app/views/layouts/spid-rails/application.html.erb
96
116
  - config/routes.rb
97
- - lib/generators/spid_rails/config_generator.rb
98
- - lib/generators/spid_rails/templates/spid_rails.rb
99
- - lib/spid_rails.rb
100
- - lib/spid_rails/engine.rb
101
- - lib/spid_rails/onelogin/rubysaml/authrequest.rb
102
- - lib/spid_rails/version.rb
103
- - lib/tasks/spid_rails_tasks.rake
117
+ - lib/generators/spid/rails/config_generator.rb
118
+ - lib/generators/spid/rails/keys_generator.rb
119
+ - lib/generators/spid/rails/templates/spid-rails.rb
120
+ - lib/spid-rails.rb
121
+ - lib/spid-rails/engine.rb
122
+ - lib/spid-rails/onelogin/rubysaml/authrequest.rb
123
+ - lib/spid-rails/version.rb
124
+ - lib/tasks/spid-rails_tasks.rake
104
125
  homepage: https://github.com/italia/spid-rails
105
126
  licenses:
106
127
  - MIT
@@ -121,8 +142,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
142
  version: '0'
122
143
  requirements: []
123
144
  rubyforge_project:
124
- rubygems_version: 2.6.8
145
+ rubygems_version: 2.5.2.1
125
146
  signing_key:
126
147
  specification_version: 4
127
- summary: SPID, il Sistema Pubblico di Identità Digitale
148
+ summary: SPID, il Sistema Pubblico di Identita' Digitale
128
149
  test_files: []
@@ -1,2 +0,0 @@
1
- //= link_directory ../javascripts/spid_rails .js
2
- //= link_directory ../stylesheets/spid_rails .css
@@ -1,5 +0,0 @@
1
- module SpidRails
2
- class ApplicationController < ActionController::Base
3
- protect_from_forgery with: :exception
4
- end
5
- end
@@ -1,15 +0,0 @@
1
- require_dependency "spid_rails/application_controller"
2
-
3
- # Metadata del Service Provider
4
- module SpidRails
5
-
6
- class MetadataController < ApplicationController
7
-
8
- def show
9
- metadata = SpidRails::Metadata.create(host: main_app.root_url)
10
- render xml: metadata.to_xml
11
- end
12
-
13
- end
14
-
15
- end
@@ -1,43 +0,0 @@
1
- require_dependency "spid_rails/application_controller"
2
-
3
- module SpidRails
4
-
5
- class SingleLogoutOperationsController < ApplicationController
6
- skip_before_action :verify_authenticity_token, only: :create
7
-
8
- def new
9
- logout_request = SpidRails::SloRequest.new(slo_params)
10
- redirect_to logout_request.to_saml
11
- session[:spid_slo_id] = logout_request.uuid
12
- end
13
-
14
- def create
15
- logout_response = SpidRails::SloResponse.new(params[:SAMLResponse],
16
- session[:spid_slo_id],
17
- slo_params)
18
- # TODO: approfondire validazione logout
19
- destroy_spid_session
20
- redirect_to main_app.root_path, notice: 'Logout utente eseguito con successo'
21
- end
22
-
23
- private
24
-
25
- def slo_params
26
- {
27
- host: main_app.root_url,
28
- idp: session[:sso_params]['idp'],
29
- session_index: session[:spid_index]
30
- }
31
- end
32
-
33
- def destroy_spid_session
34
- session[:sso_params] = nil
35
- session[:spid_index] = nil
36
- session[:spid_slo_id] = nil
37
- session[:spid_relay_state] = nil
38
- session[:spid_login_time] = nil
39
- end
40
-
41
- end
42
-
43
- end
@@ -1,36 +0,0 @@
1
- require_dependency "spid_rails/application_controller"
2
-
3
- module SpidRails
4
-
5
- class SingleSignOnsController < ApplicationController
6
- skip_before_action :verify_authenticity_token, only: :create
7
-
8
- def new
9
- request = SpidRails::SsoRequest.new(sso_params)
10
- redirect_to request.to_saml
11
- session[:sso_params] = sso_params
12
- end
13
-
14
- def create
15
- response = SpidRails::SsoResponse.new(params[:SAMLResponse], session[:sso_params])
16
- if response.valid?
17
- session[:spid_index] = response.session_index
18
- session[:spid_login_time] = Time.now
19
- redirect_to session[:relay_state] || main_app.root_path, notice: 'Utente autenticato con successo'
20
- else
21
- redirect_to main_app.root_path, notice: 'Autenticazione fallita'
22
- end
23
- end
24
-
25
- private
26
-
27
- def sso_params
28
- sso_params = params.require(:sso).permit(:idp, :spid_level, bindings: [])
29
- sso_params[:host] = main_app.root_url
30
- sso_params[:relay_state] = session[:spid_relay_state] || main_app.root_url
31
- sso_params
32
- end
33
-
34
- end
35
-
36
- end
@@ -1,4 +0,0 @@
1
- module SpidRails
2
- module ApplicationHelper
3
- end
4
- end
@@ -1,4 +0,0 @@
1
- module SpidRails
2
- class ApplicationJob < ActiveJob::Base
3
- end
4
- end
@@ -1,6 +0,0 @@
1
- module SpidRails
2
- class ApplicationMailer < ActionMailer::Base
3
- default from: 'from@example.com'
4
- layout 'mailer'
5
- end
6
- end
@@ -1,5 +0,0 @@
1
- module SpidRails
2
- class ApplicationRecord < ActiveRecord::Base
3
- self.abstract_class = true
4
- end
5
- end
@@ -1,18 +0,0 @@
1
- module SpidRails
2
- module Generators
3
-
4
- # Chiamato tramite rails g spid_rails:config
5
- class ConfigGenerator < Rails::Generators::Base
6
-
7
- source_root File.expand_path("../templates", __FILE__)
8
-
9
- desc "Crea il file di configurazione di spid (config/initializers/rumby_saml.rb)."
10
-
11
- def create_initializer_file
12
- template "spid_rails.rb", "./config/initializers/spid_rails.rb"
13
- end
14
-
15
- end
16
-
17
- end
18
- end
@@ -1,8 +0,0 @@
1
- require 'onelogin/ruby-saml'
2
- require 'spid_rails/onelogin/rubysaml/authrequest'
3
-
4
- module SpidRails
5
- class Engine < ::Rails::Engine
6
- isolate_namespace SpidRails
7
- end
8
- end
@@ -1,3 +0,0 @@
1
- module SpidRails
2
- VERSION = '0.1'
3
- end
data/lib/spid_rails.rb DELETED
@@ -1,42 +0,0 @@
1
- require "spid_rails/engine"
2
-
3
- module SpidRails
4
-
5
- # Mount point di Spid sull'applicazione
6
- mattr_accessor :mount_point
7
- @@mount_point = 'spid'
8
-
9
- # Url alla quale è disponibile il metadata del provider
10
- mattr_accessor :metadata_path
11
- @@metadata_path = 'metadata'
12
-
13
- # Url alla quale ricevere le risposte di autenticazione Saml
14
- mattr_accessor :sso_path
15
- @@sso_path = 'sso'
16
-
17
- # Url alla quale ricevere le risposte di logout Saml
18
- mattr_accessor :slo_path
19
- @@slo_path = 'slo'
20
-
21
- # Percorso relativo alla root dell'app
22
- # al quale reperire la coppia chiave privata - certificato
23
- mattr_accessor :keys_path
24
- @@keys_path = 'lib/.keys/'
25
-
26
- # Livello di crittografia SHA per la generazione delle signature
27
- mattr_accessor :sha
28
- @@sha = 256
29
-
30
- def self.app_metadata_path
31
- "#{mount_point}/#{@@metadata_path}"
32
- end
33
-
34
- def self.app_sso_path
35
- "#{mount_point}/#{@@sso_path}"
36
- end
37
-
38
- def self.app_slo_path
39
- "#{mount_point}/#{@@slo_path}"
40
- end
41
-
42
- end