decidim-suomifi 0.18.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 +7 -0
- data/LICENSE-AGPLv3.txt +661 -0
- data/README.md +236 -0
- data/Rakefile +17 -0
- data/app/controllers/decidim/suomifi/omniauth_callbacks_controller.rb +267 -0
- data/app/controllers/decidim/suomifi/verification/authorizations_controller.rb +19 -0
- data/config/locales/en.yml +21 -0
- data/config/locales/fi.yml +20 -0
- data/config/locales/sv.yml +20 -0
- data/lib/decidim/suomifi.rb +141 -0
- data/lib/decidim/suomifi/engine.rb +101 -0
- data/lib/decidim/suomifi/mail_interceptors.rb +9 -0
- data/lib/decidim/suomifi/mail_interceptors/generated_recipients_interceptor.rb +25 -0
- data/lib/decidim/suomifi/test/cert_store.rb +26 -0
- data/lib/decidim/suomifi/test/runtime.rb +48 -0
- data/lib/decidim/suomifi/verification.rb +5 -0
- data/lib/decidim/suomifi/verification/engine.rb +43 -0
- data/lib/decidim/suomifi/verification/manager.rb +17 -0
- data/lib/decidim/suomifi/verification/metadata_collector.rb +110 -0
- data/lib/decidim/suomifi/version.rb +8 -0
- data/lib/generators/decidim/suomifi/install_generator.rb +135 -0
- data/lib/generators/templates/suomifi_initializer.rb +15 -0
- data/lib/generators/templates/suomifi_initializer_test.rb +3 -0
- data/lib/generators/templates/suomifi_localhost.crt +21 -0
- data/lib/generators/templates/suomifi_localhost.key +28 -0
- metadata +137 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Suomifi
|
5
|
+
module Verification
|
6
|
+
# This is an engine that performs user authorization.
|
7
|
+
class Engine < ::Rails::Engine
|
8
|
+
isolate_namespace Decidim::Suomifi::Verification
|
9
|
+
|
10
|
+
paths["db/migrate"] = nil
|
11
|
+
paths["lib/tasks"] = nil
|
12
|
+
|
13
|
+
routes do
|
14
|
+
resource :authorizations, only: [:new], as: :authorization
|
15
|
+
|
16
|
+
root to: "authorizations#new"
|
17
|
+
end
|
18
|
+
|
19
|
+
initializer "decidim_suomifi.verification_workflow", after: :load_config_initializers do
|
20
|
+
next unless Decidim::Suomifi.configured?
|
21
|
+
|
22
|
+
# We cannot use the name `:suomifi` for the verification workflow
|
23
|
+
# because otherwise the route namespace (decidim_suomifi) would
|
24
|
+
# conflict with the main engine controlling the authentication flows.
|
25
|
+
# The main problem that this would bring is that the root path for
|
26
|
+
# this engine would not be found.
|
27
|
+
Decidim::Verifications.register_workflow(:suomifi_eid) do |workflow|
|
28
|
+
workflow.engine = Decidim::Suomifi::Verification::Engine
|
29
|
+
|
30
|
+
Decidim::Suomifi::Verification::Manager.configure_workflow(workflow)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def load_seed
|
35
|
+
# Enable the `:suomifi_eid` authorization
|
36
|
+
org = Decidim::Organization.first
|
37
|
+
org.available_authorizations << :suomifi_eid
|
38
|
+
org.save!
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Suomifi
|
5
|
+
module Verification
|
6
|
+
class Manager
|
7
|
+
def self.configure_workflow(workflow)
|
8
|
+
Decidim::Suomifi.workflow_configurator.call(workflow)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.metadata_collector_for(saml_attributes)
|
12
|
+
Decidim::Suomifi.metadata_collector_class.new(saml_attributes)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Suomifi
|
5
|
+
module Verification
|
6
|
+
class MetadataCollector
|
7
|
+
def initialize(saml_attributes)
|
8
|
+
@saml_attributes = saml_attributes
|
9
|
+
end
|
10
|
+
|
11
|
+
def metadata
|
12
|
+
hetu = Henkilotunnus::Hetu.new(
|
13
|
+
saml_attributes[:national_identification_number]
|
14
|
+
)
|
15
|
+
# In case the HETU was not sent by Suomi.fi, it will be empty and
|
16
|
+
# therefore invalid and will not have the gender information. With
|
17
|
+
# empty HETU, `Henkilotunnus::Hetu` would otherwise report "female" as
|
18
|
+
# the gender which would not be correct.
|
19
|
+
gender = nil
|
20
|
+
date_of_birth = nil
|
21
|
+
|
22
|
+
# Note that we cannot call hetu.valid? because it will also call
|
23
|
+
# `:valid_person_number?`. This checks that the HETU is in range
|
24
|
+
# 002-899 which are the actual HETU codes stored in the population
|
25
|
+
# register system. The numbers above 899 are temporary codes, e.g. in
|
26
|
+
# situations when a person does not yet have a HETU. Temporary codes
|
27
|
+
# may be returned by the Suomi.fi endpoint e.g. in the testing mode.
|
28
|
+
# Regarding the information needs here, it does not matter whether the
|
29
|
+
# HETU is temporary or permanent.
|
30
|
+
valid_hetu = hetu.send(:valid_format?) && hetu.send(:valid_checksum?)
|
31
|
+
if valid_hetu
|
32
|
+
gender = hetu.male? ? "m" : "f"
|
33
|
+
# `.to_s` returns an ISO 8601 formatted string (YYYY-MM-DD for dates)
|
34
|
+
date_of_birth = hetu.date_of_birth.to_s
|
35
|
+
elsif saml_attributes[:eidas_date_of_birth]
|
36
|
+
# xsd:date (YYYY-MM_DD)
|
37
|
+
date_of_birth = saml_attributes[:eidas_date_of_birth]
|
38
|
+
end
|
39
|
+
|
40
|
+
postal_code_permanent = true
|
41
|
+
postal_code = saml_attributes[:permanent_domestic_address_postal_code]
|
42
|
+
unless postal_code
|
43
|
+
postal_code_permanent = false
|
44
|
+
postal_code = saml_attributes[:temporary_domestic_address_postal_code]
|
45
|
+
end
|
46
|
+
|
47
|
+
first_name = saml_attributes[:first_names]
|
48
|
+
last_name = saml_attributes[:last_name]
|
49
|
+
given_name = saml_attributes[:given_name]
|
50
|
+
|
51
|
+
eidas = false
|
52
|
+
if saml_attributes[:eidas_person_identifier]
|
53
|
+
eidas = true
|
54
|
+
first_name = saml_attributes[:eidas_first_names]
|
55
|
+
last_name = saml_attributes[:eidas_family_name]
|
56
|
+
end
|
57
|
+
|
58
|
+
{
|
59
|
+
eidas: eidas,
|
60
|
+
gender: gender,
|
61
|
+
date_of_birth: date_of_birth,
|
62
|
+
pin_digest: person_identifier_digest,
|
63
|
+
# The first name will contain all first names of the person
|
64
|
+
first_name: first_name,
|
65
|
+
# The given name is the primary first name of the person, also known
|
66
|
+
# as "calling name" (kutsumanimi).
|
67
|
+
given_name: given_name,
|
68
|
+
last_name: last_name,
|
69
|
+
# The municipality number, see:
|
70
|
+
# http://tilastokeskus.fi/meta/luokitukset/kunta/001-2017/index.html
|
71
|
+
municipality: saml_attributes[:home_municipality_number],
|
72
|
+
municipality_name: saml_attributes[:home_municipality_name_fi],
|
73
|
+
postal_code: postal_code,
|
74
|
+
permanent_address: postal_code_permanent
|
75
|
+
}
|
76
|
+
end
|
77
|
+
|
78
|
+
# Digested format of the person's identifier unique to the person. The
|
79
|
+
# digested format is used because the undigested format may hold
|
80
|
+
# personal sensitive information about the user and may require special
|
81
|
+
# care regarding the privacy policy. These will still be unique hashes
|
82
|
+
# bound to the person's identification number.
|
83
|
+
def person_identifier_digest
|
84
|
+
@person_identifier_digest ||= begin
|
85
|
+
prefix = nil
|
86
|
+
pin = nil
|
87
|
+
|
88
|
+
if saml_attributes[:national_identification_number]
|
89
|
+
prefix = "FI"
|
90
|
+
pin = saml_attributes[:national_identification_number]
|
91
|
+
elsif saml_attributes[:eidas_person_identifier]
|
92
|
+
prefix = "EIDAS"
|
93
|
+
pin = saml_attributes[:eidas_person_identifier]
|
94
|
+
end
|
95
|
+
|
96
|
+
if prefix && pin
|
97
|
+
Digest::MD5.hexdigest(
|
98
|
+
"#{prefix}:#{pin}:#{Rails.application.secrets.secret_key_base}"
|
99
|
+
)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
protected
|
105
|
+
|
106
|
+
attr_reader :saml_attributes
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators/base"
|
4
|
+
|
5
|
+
module Decidim
|
6
|
+
module Suomifi
|
7
|
+
module Generators
|
8
|
+
class InstallGenerator < Rails::Generators::Base
|
9
|
+
source_root File.expand_path("../../templates", __dir__)
|
10
|
+
|
11
|
+
desc "Creates a Devise initializer and copy locale files to your application."
|
12
|
+
|
13
|
+
class_option(
|
14
|
+
:dummy_cert,
|
15
|
+
desc: "Defines whether to create a dummy certificate for localhost.",
|
16
|
+
type: :boolean,
|
17
|
+
default: false
|
18
|
+
)
|
19
|
+
|
20
|
+
class_option(
|
21
|
+
:test_initializer,
|
22
|
+
desc: "Copies the test initializer instead of the actual one (for test dummy app).",
|
23
|
+
type: :boolean,
|
24
|
+
default: false,
|
25
|
+
hide: true
|
26
|
+
)
|
27
|
+
|
28
|
+
def copy_initializer
|
29
|
+
if options[:test_initializer]
|
30
|
+
copy_file "suomifi_initializer_test.rb", "config/initializers/suomifi.rb"
|
31
|
+
else
|
32
|
+
copy_file "suomifi_initializer.rb", "config/initializers/suomifi.rb"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def copy_dummy_certificate
|
37
|
+
if options[:dummy_cert]
|
38
|
+
empty_directory "config/cert"
|
39
|
+
copy_file "suomifi_localhost.crt", "config/cert/suomifi.crt"
|
40
|
+
copy_file "suomifi_localhost.key", "config/cert/suomifi.key"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def enable_authentication
|
45
|
+
secrets_path = Rails.application.root.join("config", "secrets.yml")
|
46
|
+
secrets = YAML.safe_load(File.read(secrets_path), [], [], true)
|
47
|
+
|
48
|
+
if secrets["default"]["omniauth"]["suomifi"]
|
49
|
+
say_status :identical, "config/secrets.yml", :blue
|
50
|
+
else
|
51
|
+
mod = SecretsModifier.new(secrets_path)
|
52
|
+
final = mod.modify
|
53
|
+
|
54
|
+
target_path = Rails.application.root.join("config", "secrets.yml")
|
55
|
+
File.open(target_path, "w") { |f| f.puts final }
|
56
|
+
|
57
|
+
say_status :insert, "config/secrets.yml", :green
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class SecretsModifier
|
62
|
+
def initialize(filepath)
|
63
|
+
@filepath = filepath
|
64
|
+
end
|
65
|
+
|
66
|
+
def modify
|
67
|
+
self.inside_config = false
|
68
|
+
self.inside_omniauth = false
|
69
|
+
self.config_branch = nil
|
70
|
+
@final = ""
|
71
|
+
|
72
|
+
@empty_line_count = 0
|
73
|
+
File.readlines(filepath).each do |line|
|
74
|
+
if line =~ /^$/
|
75
|
+
@empty_line_count += 1
|
76
|
+
next
|
77
|
+
else
|
78
|
+
handle_line line
|
79
|
+
insert_empty_lines
|
80
|
+
end
|
81
|
+
|
82
|
+
@final += line
|
83
|
+
end
|
84
|
+
insert_empty_lines
|
85
|
+
|
86
|
+
@final
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
attr_accessor :filepath, :empty_line_count, :inside_config, :inside_omniauth, :config_branch
|
92
|
+
|
93
|
+
def handle_line(line)
|
94
|
+
if inside_config && line =~ /^ omniauth:/
|
95
|
+
self.inside_omniauth = true
|
96
|
+
elsif inside_omniauth && line =~ /^( )?[a-z]+/
|
97
|
+
inject_suomifi_config
|
98
|
+
self.inside_omniauth = false
|
99
|
+
end
|
100
|
+
|
101
|
+
return unless line =~ /^[a-z]+/
|
102
|
+
|
103
|
+
# A new root configuration block starts
|
104
|
+
self.inside_config = false
|
105
|
+
self.inside_omniauth = false
|
106
|
+
|
107
|
+
if line =~ /^default:/
|
108
|
+
self.inside_config = true
|
109
|
+
self.config_branch = :default
|
110
|
+
elsif line =~ /^development:/
|
111
|
+
self.inside_config = true
|
112
|
+
self.config_branch = :development
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def insert_empty_lines
|
117
|
+
@final += "\n" * empty_line_count
|
118
|
+
@empty_line_count = 0
|
119
|
+
end
|
120
|
+
|
121
|
+
def inject_suomifi_config
|
122
|
+
@final += " suomifi:\n"
|
123
|
+
if config_branch == :development
|
124
|
+
@final += " enabled: true\n"
|
125
|
+
@final += " mode: test\n"
|
126
|
+
else
|
127
|
+
@final += " enabled: false\n"
|
128
|
+
end
|
129
|
+
@final += " icon: globe\n"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
cert_path = Rails.application.root.join("config", "cert")
|
4
|
+
|
5
|
+
Decidim::Suomifi.configure do |config|
|
6
|
+
config.scope_of_data = :medium_extensive
|
7
|
+
# Define the service provider entity ID included in the Suomi.fi metadata:
|
8
|
+
# config.sp_entity_id = "https://www.example.org/users/auth/suomifi/metadata"
|
9
|
+
# Or define it in your application configuration and apply it here:
|
10
|
+
# config.sp_entity_id = Rails.application.config.suomifi_entity_id
|
11
|
+
config.certificate_file = "#{cert_path}/suomifi.crt"
|
12
|
+
config.private_key_file = "#{cert_path}/suomifi.key"
|
13
|
+
# Enable automatically assigned emails
|
14
|
+
config.auto_email_domain = "example.org"
|
15
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDeTCCAmGgAwIBAgIUP/YcljlSpKAPYLzhUXy7HpqBvvkwDQYJKoZIhvcNAQEL
|
3
|
+
BQAwTDELMAkGA1UEBhMCRkkxEDAOBgNVBAgMB1V1c2ltYWExFzAVBgNVBAoMDk1h
|
4
|
+
aW5pbyBUZWNoIE95MRIwEAYDVQQDDAlsb2NhbGhvc3QwHhcNMTkwNzI0MTQ1MTUw
|
5
|
+
WhcNMjkwNzIxMTQ1MTUwWjBMMQswCQYDVQQGEwJGSTEQMA4GA1UECAwHVXVzaW1h
|
6
|
+
YTEXMBUGA1UECgwOTWFpbmlvIFRlY2ggT3kxEjAQBgNVBAMMCWxvY2FsaG9zdDCC
|
7
|
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMNWfaZe5zwFCEqDBD2AEdFA
|
8
|
+
wdg0FV4N3OxtQrk9hgqbDpNSvWI6wIq4lIDIrlI4hM2VQzWtJRy4UcfecLnz5q1J
|
9
|
+
7SZ/uzTKkcqbSvCVfMeh5Yr9kjT9FYA9m7lxuiA1/AnX6Ho+8Hm8k/ggpOPCvDs/
|
10
|
+
uO6e0SROqc0+eiy6It9YfZrrdU1YpOVkO0DNz6ndXMlFW1HZWaU/uSb0qKQoNlvD
|
11
|
+
OZgXX0zwHgGn++Q6cGilIHUm+4OG6miItyoR7jxwupwbklAyq3QD1vgViERdVz/L
|
12
|
+
qZyUK4+3QjJSY8iPvW87nram+Tn97qD9Tg4xrU9xclo1CsZAYrR1RYNurV0MN2UC
|
13
|
+
AwEAAaNTMFEwHQYDVR0OBBYEFMAzak2Fbdc2zH/c8bQTi8OarjqtMB8GA1UdIwQY
|
14
|
+
MBaAFMAzak2Fbdc2zH/c8bQTi8OarjqtMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
|
15
|
+
hvcNAQELBQADggEBALh7yn9oklviyBomSJJU8voS7wSeuVVNbCKkX7SeJvPpjcZA
|
16
|
+
S2B9QjRYYY1l7Cknwop6790fmHgDTpi4Wr+kirMv1wS+X8v5CQtVJ3uj1ZVfGrop
|
17
|
+
pjzJNmYkkrTKr9n8JP+qYJO1PGXLjlIMqQCcujdNXvMGqHpzZiLf4jn3vLEGlkN7
|
18
|
+
8N96dlRYrWd7CVnEB+VuZFlDuXXcVjVvhNBy2+YJxOy2ketpiz2WM6afz0q5jiV8
|
19
|
+
EYgoBLpreJGtVGyIRNmMm41weandbReztyCIMzVZL/5GsgXHvsk1Z0JSQQMVgSl5
|
20
|
+
GDV2YgWcKHPCqLAfiRiNxMEijiNrM1dfzTzZzBQ=
|
21
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,28 @@
|
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
2
|
+
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDDVn2mXuc8BQhK
|
3
|
+
gwQ9gBHRQMHYNBVeDdzsbUK5PYYKmw6TUr1iOsCKuJSAyK5SOITNlUM1rSUcuFHH
|
4
|
+
3nC58+atSe0mf7s0ypHKm0rwlXzHoeWK/ZI0/RWAPZu5cbogNfwJ1+h6PvB5vJP4
|
5
|
+
IKTjwrw7P7juntEkTqnNPnosuiLfWH2a63VNWKTlZDtAzc+p3VzJRVtR2VmlP7km
|
6
|
+
9KikKDZbwzmYF19M8B4Bp/vkOnBopSB1JvuDhupoiLcqEe48cLqcG5JQMqt0A9b4
|
7
|
+
FYhEXVc/y6mclCuPt0IyUmPIj71vO562pvk5/e6g/U4OMa1PcXJaNQrGQGK0dUWD
|
8
|
+
bq1dDDdlAgMBAAECggEBAKCKJv5jJRw47pV+lC+PYBVgaXAtbho8voM5UQs5Oz7g
|
9
|
+
LNx7tdZTfwcDqFknlc1RUiQ8Nl6ZDNVLzzq64F6Ty9RD27o2ZD+A9M1VUAPmeAUC
|
10
|
+
U8sll9Ig5ljdSWzhwRzUAW59mj1OGQmUKPBWs+3UkCsJtg23TR/P3tImNPcpi5uO
|
11
|
+
hhuRvMVK+6NjRsU/sCoYOMdBxWLhoAALmoQx1PwETS4KSDH78eFMdhoozgWHprDv
|
12
|
+
9NrmoNRCz+YkAID5lW8u2PzM1kUTF54hP3qn5cBD/1OkOqTFy0c7ZznAX0eL2lea
|
13
|
+
Ayl7RjKittIjtePzxO5Qlq8CZbtVb8hrv9J5bOUBlUECgYEA/l3jfSz1TxJ/vYzz
|
14
|
+
ycjGWZOF6+B9dFmDfn1RWFfpmauA68Og38tc/IrfS/8X6qtG1Nt2rDKuH6fho2RA
|
15
|
+
ft6PQyFqxF/bd/N0WY9FI8wmrY6BwNSEYoXhw1ib8FjFPmZxFi9AYC0dU+fL9hUw
|
16
|
+
QReYpIwUYh69fDBEKoTHS5Pu470CgYEAxJeTCX+IUVq06fOpZ1o9OLrdMeFcVpjD
|
17
|
+
L0kClZ1Z6p1/Rd9RXBJ9FvUJClJnwH37EzVAzvITc40yx9EjmdqYW2Qw+agDpGMP
|
18
|
+
WpmIufuVoxGYBFMQAPJNztOXx8gkTDzymLXL37d2sZI8TbyPWWfkL+WtgJkpXDog
|
19
|
+
A04neavriMkCgYEAoD35f/QAnc2jl3/iXK4U9n1PEqeboN57TgYYZrULPnmif+P/
|
20
|
+
xrxQWfAKd8+9+2Hm/1U6T4Sl2N9j8BDJ6KLAUaQNpKRWmBxQodL11XVYsGFkMFwx
|
21
|
+
Afghn3SE2Ea0C3lxqG4f+fax0Rfnj6ENgxQgXxi4BpAjAsdNShPXkS8igWkCgYEA
|
22
|
+
gzgpDM3zT1ocJ4xcJoA1HQidXA3wdFzC62zwLK06tz8pFJpa0/oDRK+JuToHxpRQ
|
23
|
+
YiHJgFhUY2x72KPf/3HJADd/+SQMSk1UkkSo3nrvBklYDoriw7738HWLee49TCXi
|
24
|
+
R8wQqOLsdtoFJl4V0LdnuBC2HoAc+1JQy+P+tVfrfwECgYA4fBLCEA8I7A26NA03
|
25
|
+
K11RoLiwG+lH02kpFEXTka7x7yA24sivdZN0lJ2AI6iSWNygAFRmIgTiXJj628aS
|
26
|
+
oETUX+hlMJTirgpDSeWpMGaaexKoXrBQsp2JKmnNy6uRF0lTyZLphloPqFoCVdyp
|
27
|
+
Hy3GU3LWvG/TkY+yh3Uqn3OvVQ==
|
28
|
+
-----END PRIVATE KEY-----
|
metadata
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: decidim-suomifi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.18.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Antti Hukkanen
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-10-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: decidim-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.18.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.18.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: henkilotunnus
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.1.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.1.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: omniauth-suomifi
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.2.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.2.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: decidim-dev
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.18.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.18.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: xmlenc
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.7.1
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.7.1
|
83
|
+
description: Adds Suomi.fi authentication provider to Decidim.
|
84
|
+
email:
|
85
|
+
- antti.hukkanen@mainiotech.fi
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- LICENSE-AGPLv3.txt
|
91
|
+
- README.md
|
92
|
+
- Rakefile
|
93
|
+
- app/controllers/decidim/suomifi/omniauth_callbacks_controller.rb
|
94
|
+
- app/controllers/decidim/suomifi/verification/authorizations_controller.rb
|
95
|
+
- config/locales/en.yml
|
96
|
+
- config/locales/fi.yml
|
97
|
+
- config/locales/sv.yml
|
98
|
+
- lib/decidim/suomifi.rb
|
99
|
+
- lib/decidim/suomifi/engine.rb
|
100
|
+
- lib/decidim/suomifi/mail_interceptors.rb
|
101
|
+
- lib/decidim/suomifi/mail_interceptors/generated_recipients_interceptor.rb
|
102
|
+
- lib/decidim/suomifi/test/cert_store.rb
|
103
|
+
- lib/decidim/suomifi/test/runtime.rb
|
104
|
+
- lib/decidim/suomifi/verification.rb
|
105
|
+
- lib/decidim/suomifi/verification/engine.rb
|
106
|
+
- lib/decidim/suomifi/verification/manager.rb
|
107
|
+
- lib/decidim/suomifi/verification/metadata_collector.rb
|
108
|
+
- lib/decidim/suomifi/version.rb
|
109
|
+
- lib/generators/decidim/suomifi/install_generator.rb
|
110
|
+
- lib/generators/templates/suomifi_initializer.rb
|
111
|
+
- lib/generators/templates/suomifi_initializer_test.rb
|
112
|
+
- lib/generators/templates/suomifi_localhost.crt
|
113
|
+
- lib/generators/templates/suomifi_localhost.key
|
114
|
+
homepage: https://github.com/mainio/decidim-module-suomifi
|
115
|
+
licenses:
|
116
|
+
- AGPL-3.0
|
117
|
+
metadata: {}
|
118
|
+
post_install_message:
|
119
|
+
rdoc_options: []
|
120
|
+
require_paths:
|
121
|
+
- lib
|
122
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
requirements: []
|
133
|
+
rubygems_version: 3.0.3
|
134
|
+
signing_key:
|
135
|
+
specification_version: 4
|
136
|
+
summary: Provides possibility to bind Suomi.fi authentication provider to Decidim.
|
137
|
+
test_files: []
|