decidim-verifications 0.8.4 → 0.9.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 +5 -5
- data/README.md +52 -1
- data/app/controllers/decidim/verifications/authorizations_controller.rb +6 -0
- data/app/controllers/decidim/verifications/id_documents/authorizations_controller.rb +1 -1
- data/app/services/decidim/dummy_authorization_handler.rb +36 -1
- data/app/views/decidim/verifications/authorizations/_granted_authorization.html.erb +27 -0
- data/app/views/decidim/verifications/authorizations/index.html.erb +8 -13
- data/app/views/decidim/verifications/authorizations/new.html.erb +1 -1
- data/app/views/dummy_authorization/_form.html.erb +8 -0
- data/config/locales/ca.yml +12 -9
- data/config/locales/en.yml +4 -0
- data/config/locales/es.yml +13 -10
- data/config/locales/eu.yml +4 -0
- data/config/locales/fi.yml +58 -54
- data/config/locales/fr.yml +12 -8
- data/config/locales/gl.yml +129 -0
- data/config/locales/it.yml +9 -5
- data/config/locales/nl.yml +16 -12
- data/config/locales/pl.yml +5 -0
- data/config/locales/pt-BR.yml +129 -0
- data/config/locales/pt.yml +4 -0
- data/config/locales/ru.yml +120 -0
- data/config/locales/sv.yml +129 -0
- data/config/locales/uk.yml +88 -4
- data/lib/decidim/verifications.rb +1 -0
- data/lib/decidim/verifications/adapter.rb +25 -10
- data/lib/decidim/verifications/default_action_authorizer.rb +87 -0
- data/lib/decidim/verifications/dummy.rb +2 -0
- data/lib/decidim/verifications/registry.rb +4 -0
- data/lib/decidim/verifications/version.rb +1 -1
- data/lib/decidim/verifications/workflow_manifest.rb +13 -1
- data/lib/decidim/verifications/workflows.rb +9 -0
- metadata +16 -10
@@ -0,0 +1,87 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Verifications
|
5
|
+
class DefaultActionAuthorizer
|
6
|
+
#
|
7
|
+
# Initializes the DefaultActionAuthorizer class.
|
8
|
+
#
|
9
|
+
# authorization - The existing authorization record to be evaluated. Can be nil.
|
10
|
+
# options - A hash with options related only to the current authorization process.
|
11
|
+
#
|
12
|
+
def initialize(authorization, options)
|
13
|
+
@authorization = authorization
|
14
|
+
@options = options.deep_dup # options hash is cloned to allow changes applied to it without risks
|
15
|
+
end
|
16
|
+
|
17
|
+
#
|
18
|
+
# Checks the status of the given authorization.
|
19
|
+
#
|
20
|
+
# Returns:
|
21
|
+
# first value - A symbol describing the authorization status.
|
22
|
+
# ok - When everything is OK and the user is correctly authorized.
|
23
|
+
# missing - When no authorization can be found.
|
24
|
+
# expired - The validity time for the given authorization has run out, and
|
25
|
+
# needs to be re-validated.
|
26
|
+
# pending - When an authorization was found, but is not complete (eg. is
|
27
|
+
# waiting for admin manual confirmation).
|
28
|
+
# unauthorized - When an authorization was found, but the value of some of its fields
|
29
|
+
# is not the expected one (eg. the user is authorized for scope A,
|
30
|
+
# but this action is only for users in scope B).
|
31
|
+
# incomplete - An authorization was found, but lacks some required fields. User
|
32
|
+
# should re-authenticate.
|
33
|
+
# last value - A hash with information to be shown to the users.
|
34
|
+
# action - Translation key to be used in the "authorize" button. A close button will be shown is missing.
|
35
|
+
# cancel - If present and true a cancel button will be shown.
|
36
|
+
# fields - Wrong fields to be shown. It could be a list of names or a hash with names a current values.
|
37
|
+
# extra_explanation - Hash with an additional key and params to be translated and shown to the user.
|
38
|
+
#
|
39
|
+
def authorize
|
40
|
+
if !authorization
|
41
|
+
[:missing, action: :authorize]
|
42
|
+
elsif authorization_expired?
|
43
|
+
[:expired, action: :authorize]
|
44
|
+
elsif !authorization.granted?
|
45
|
+
[:pending, action: :resume]
|
46
|
+
elsif unmatched_fields.any?
|
47
|
+
[:unauthorized, fields: unmatched_fields]
|
48
|
+
elsif missing_fields.any?
|
49
|
+
[:incomplete, fields: missing_fields, action: :reauthorize, cancel: true]
|
50
|
+
else
|
51
|
+
[:ok, {}]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
#
|
56
|
+
# Allow to add params to redirect URLs, to modify forms behaviour based on the authorization process options.
|
57
|
+
#
|
58
|
+
# Returns a hash with keys added to redirect URLs.
|
59
|
+
#
|
60
|
+
def redirect_params
|
61
|
+
{}
|
62
|
+
end
|
63
|
+
|
64
|
+
protected
|
65
|
+
|
66
|
+
attr_reader :authorization, :options
|
67
|
+
|
68
|
+
def unmatched_fields
|
69
|
+
@unmatched_fields ||= (options.keys & authorization.metadata.to_h.keys).each_with_object({}) do |field, unmatched|
|
70
|
+
unmatched[field] = options[field] if authorization.metadata[field] != options[field]
|
71
|
+
unmatched
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def missing_fields
|
76
|
+
@missing_fields ||= options.keys.each_with_object([]) do |field, missing|
|
77
|
+
missing << field if authorization.metadata[field].blank?
|
78
|
+
missing
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def authorization_expired?
|
83
|
+
authorization.expires_at.present? && authorization.expired?
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
module Decidim
|
4
4
|
module Verifications
|
5
|
+
autoload :DefaultActionAuthorizer, "decidim/verifications/default_action_authorizer"
|
6
|
+
|
5
7
|
#
|
6
8
|
# This class serves as a DSL to declaratively specify a verification method.
|
7
9
|
#
|
@@ -28,6 +30,8 @@ module Decidim
|
|
28
30
|
attribute :engine, Rails::Engine
|
29
31
|
attribute :admin_engine, Rails::Engine
|
30
32
|
attribute :form, String
|
33
|
+
attribute :expires_in, ActiveSupport::Duration, default: 0.minutes
|
34
|
+
attribute :action_authorizer, String
|
31
35
|
|
32
36
|
validate :engine_or_form
|
33
37
|
|
@@ -45,12 +49,20 @@ module Decidim
|
|
45
49
|
alias key name
|
46
50
|
|
47
51
|
def fullname
|
48
|
-
I18n.t("#{key}.name", scope: "decidim.authorization_handlers")
|
52
|
+
I18n.t("#{key}.name", scope: "decidim.authorization_handlers", default: name.humanize)
|
49
53
|
end
|
50
54
|
|
51
55
|
def description
|
52
56
|
"#{fullname} (#{I18n.t(type, scope: "decidim.authorization_handlers")})"
|
53
57
|
end
|
58
|
+
|
59
|
+
def action_authorizer_class
|
60
|
+
if @action_authorizer.present?
|
61
|
+
@action_authorizer.constantize
|
62
|
+
else
|
63
|
+
DefaultActionAuthorizer
|
64
|
+
end
|
65
|
+
end
|
54
66
|
end
|
55
67
|
end
|
56
68
|
end
|
@@ -27,6 +27,15 @@ module Decidim
|
|
27
27
|
registry.register_workflow(name, &block)
|
28
28
|
end
|
29
29
|
|
30
|
+
#
|
31
|
+
# Registers a verification workflow using the workflow manifest API
|
32
|
+
#
|
33
|
+
def unregister_workflow(name)
|
34
|
+
manifest = find_workflow_manifest(name)
|
35
|
+
|
36
|
+
registry.unregister_workflow(manifest)
|
37
|
+
end
|
38
|
+
|
30
39
|
#
|
31
40
|
# Finds a verification workflow by name
|
32
41
|
#
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: decidim-verifications
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Rodriguez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: decidim-core
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.9.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.9.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: decidim-admin
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.9.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.9.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: decidim-dev
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.9.0
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.9.0
|
55
55
|
description: Several verification methods for your decidim instance
|
56
56
|
email:
|
57
57
|
- deivid.rodriguez@riseup.net
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- app/services/decidim/authorization_handler.rb
|
85
85
|
- app/services/decidim/dummy_authorization_handler.rb
|
86
86
|
- app/uploaders/decidim/verifications/attachment_uploader.rb
|
87
|
+
- app/views/decidim/verifications/authorizations/_granted_authorization.html.erb
|
87
88
|
- app/views/decidim/verifications/authorizations/first_login.html.erb
|
88
89
|
- app/views/decidim/verifications/authorizations/index.html.erb
|
89
90
|
- app/views/decidim/verifications/authorizations/new.html.erb
|
@@ -94,21 +95,26 @@ files:
|
|
94
95
|
- app/views/decidim/verifications/postal_letter/admin/pending_authorizations/index.html.erb
|
95
96
|
- app/views/decidim/verifications/postal_letter/authorizations/edit.html.erb
|
96
97
|
- app/views/decidim/verifications/postal_letter/authorizations/new.html.erb
|
98
|
+
- app/views/dummy_authorization/_form.html.erb
|
97
99
|
- config/locales/ca.yml
|
98
100
|
- config/locales/en.yml
|
99
101
|
- config/locales/es.yml
|
100
102
|
- config/locales/eu.yml
|
101
103
|
- config/locales/fi.yml
|
102
104
|
- config/locales/fr.yml
|
105
|
+
- config/locales/gl.yml
|
103
106
|
- config/locales/it.yml
|
104
107
|
- config/locales/nl.yml
|
105
108
|
- config/locales/pl.yml
|
109
|
+
- config/locales/pt-BR.yml
|
106
110
|
- config/locales/pt.yml
|
107
111
|
- config/locales/ru.yml
|
112
|
+
- config/locales/sv.yml
|
108
113
|
- config/locales/uk.yml
|
109
114
|
- db/migrate/20171030133426_move_authorizations_to_new_api.rb
|
110
115
|
- lib/decidim/verifications.rb
|
111
116
|
- lib/decidim/verifications/adapter.rb
|
117
|
+
- lib/decidim/verifications/default_action_authorizer.rb
|
112
118
|
- lib/decidim/verifications/dummy.rb
|
113
119
|
- lib/decidim/verifications/engine.rb
|
114
120
|
- lib/decidim/verifications/id_documents.rb
|
@@ -145,8 +151,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
151
|
version: '0'
|
146
152
|
requirements: []
|
147
153
|
rubyforge_project:
|
148
|
-
rubygems_version: 2.
|
154
|
+
rubygems_version: 2.7.3
|
149
155
|
signing_key:
|
150
156
|
specification_version: 4
|
151
|
-
summary:
|
157
|
+
summary: Decidim verifications module
|
152
158
|
test_files: []
|