decidim-direct_verifications 0.2.1
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 +146 -0
- data/Rakefile +17 -0
- data/app/commands/decidim/direct_verifications/verification/confirm_user_authorization.rb +20 -0
- data/app/commands/decidim/direct_verifications/verification/destroy_user_authorization.rb +38 -0
- data/app/controllers/decidim/direct_verifications/verification/admin/direct_verifications_controller.rb +74 -0
- data/app/controllers/decidim/direct_verifications/verification/authorizations_controller.rb +14 -0
- data/app/forms/decidim/direct_verifications/verification/direct_verifications_form.rb +19 -0
- data/app/permissions/decidim/direct_verifications/verification/admin/permissions.rb +20 -0
- data/app/views/decidim/direct_verifications/verification/admin/direct_verifications/index.html.erb +40 -0
- data/config/locales/ca.yml +43 -0
- data/config/locales/en.yml +42 -0
- data/config/locales/es.yml +43 -0
- data/lib/decidim/direct_verifications.rb +10 -0
- data/lib/decidim/direct_verifications/user_processor.rb +130 -0
- data/lib/decidim/direct_verifications/verification.rb +6 -0
- data/lib/decidim/direct_verifications/verification/admin.rb +12 -0
- data/lib/decidim/direct_verifications/verification/admin_engine.rb +18 -0
- data/lib/decidim/direct_verifications/verification/engine.rb +19 -0
- data/lib/decidim/direct_verifications/verification/workflow.rb +8 -0
- data/lib/decidim/direct_verifications/version.rb +14 -0
- metadata +93 -0
@@ -0,0 +1,42 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
decidim:
|
4
|
+
authorization_handlers:
|
5
|
+
admin:
|
6
|
+
direct_verifications:
|
7
|
+
help:
|
8
|
+
- 'Allows the massive introduction of users in order to:'
|
9
|
+
- Direct register in the organization and sends invitations
|
10
|
+
- Verify them in any active verification method
|
11
|
+
- Revoke their verification in any active verification method
|
12
|
+
direct_verifications:
|
13
|
+
explanation: Manual verification by the administrators of the organization
|
14
|
+
name: Direct verification
|
15
|
+
direct_verifications:
|
16
|
+
verification:
|
17
|
+
admin:
|
18
|
+
direct_verifications:
|
19
|
+
create:
|
20
|
+
authorized: "%{authorized} users have been successfully verified using
|
21
|
+
[%{handler}] (%{count} detected, %{errors} errors)"
|
22
|
+
info: "%{count} users detected, of which %{registered} are registered,
|
23
|
+
%{unconfirmed} unconfirmed and %{authorized} authorized using [%{handler}]"
|
24
|
+
registered: "%{registered} users have been successfully registered (%{count}
|
25
|
+
detected, %{errors} errors) "
|
26
|
+
revoked: Verification from %{revoked} users have been revoked using
|
27
|
+
[%{handler}] (%{count} detected, %{errors} errors)
|
28
|
+
index:
|
29
|
+
title: Register and authorize users
|
30
|
+
new:
|
31
|
+
authorization_handler: 'Verification method:'
|
32
|
+
authorize: Authorize users
|
33
|
+
check: Check users status
|
34
|
+
info: Enter the emails here, one per line. If the emails are preceded
|
35
|
+
by a text, it will be interpreted as the user's name
|
36
|
+
register: Register users in the platform (if they exist they will be ignored)
|
37
|
+
revoke: Revoke authorization from users
|
38
|
+
submit: Send and process the list
|
39
|
+
textarea: 'Emails list:'
|
40
|
+
authorizations:
|
41
|
+
new:
|
42
|
+
no_action: This method requires an administrator that verifies you
|
@@ -0,0 +1,43 @@
|
|
1
|
+
---
|
2
|
+
es:
|
3
|
+
decidim:
|
4
|
+
authorization_handlers:
|
5
|
+
admin:
|
6
|
+
direct_verifications:
|
7
|
+
help:
|
8
|
+
- 'Permite la introducción masiva d usuarios con el fin de:'
|
9
|
+
- Registrarlos directamente a la organización con el envío de invitaciones
|
10
|
+
- Verificarlos en cualquier método de verificación activo
|
11
|
+
- Revocar la verificación en cualquier método de verificación activo
|
12
|
+
direct_verifications:
|
13
|
+
explanation: Verificación manual por parte de los administradores de la organización
|
14
|
+
name: Verificación directa
|
15
|
+
direct_verifications:
|
16
|
+
verification:
|
17
|
+
admin:
|
18
|
+
direct_verifications:
|
19
|
+
create:
|
20
|
+
authorized: Se han verificado correctamente %{authorized} usuarios usando
|
21
|
+
[%{handler}] (%{count} detectados, %{errors} errores)
|
22
|
+
info: Se han detectado %{count} usuarios, de los cuales %{registered}
|
23
|
+
están registrados, %{unconfirmed} sin confirmar y %{authorized} autorizados
|
24
|
+
usando [%{handler}]
|
25
|
+
registered: Se han registrado correctamente %{registered} usuarios (%{count}
|
26
|
+
detectados, %{errors} errores)
|
27
|
+
revoked: Se ha revocado correctament la verificación de %{revoked} usuarios
|
28
|
+
usando [%{handler}] (%{count} detectados, %{errors} errores)
|
29
|
+
index:
|
30
|
+
title: Inscribe y autoriza usuarios
|
31
|
+
new:
|
32
|
+
authorization_handler: 'Método de verificación:'
|
33
|
+
authorize: Autoriza los usuarios
|
34
|
+
check: Comprueba el estado de los usuarios
|
35
|
+
info: Introduce aquí los emails, uno por linea. Si los emails están precedidos
|
36
|
+
por un texto, se interpretará como el nombre del usuario
|
37
|
+
register: Registra los usuarios a la plataforma (si existen se ignorarán)
|
38
|
+
revoke: Revoca la autorización de los usuarios
|
39
|
+
submit: Envía y procesa el listado
|
40
|
+
textarea: 'Lista de emails:'
|
41
|
+
authorizations:
|
42
|
+
new:
|
43
|
+
no_action: Este método requiere que un administrador os verifique
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module DirectVerifications
|
5
|
+
class UserProcessor
|
6
|
+
def initialize(organization, current_user)
|
7
|
+
@organization = organization
|
8
|
+
@current_user = current_user
|
9
|
+
@authorization_handler = :direct_verifications
|
10
|
+
@errors = { registered: [], authorized: [], revoked: [] }
|
11
|
+
@processed = { registered: [], authorized: [], revoked: [] }
|
12
|
+
@emails = {}
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_reader :organization, :current_user, :errors, :processed, :emails
|
16
|
+
attr_accessor :authorization_handler
|
17
|
+
|
18
|
+
def emails=(email_list)
|
19
|
+
@emails = email_list.map { |k, v| [k.to_s.downcase, v.presence || k.split("@").first] }.to_h
|
20
|
+
end
|
21
|
+
|
22
|
+
def register_users
|
23
|
+
@emails.each do |email, name|
|
24
|
+
next if find_user(email)
|
25
|
+
form = register_form(email, name)
|
26
|
+
begin
|
27
|
+
InviteUser.call(form) do
|
28
|
+
on(:ok) do
|
29
|
+
add_processed :registered, email
|
30
|
+
end
|
31
|
+
on(:invalid) do
|
32
|
+
add_error :registered, email
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def authorize_users
|
40
|
+
@emails.each do |email, _name|
|
41
|
+
if (u = find_user(email))
|
42
|
+
auth = authorization(u)
|
43
|
+
next if auth.granted?
|
44
|
+
Verification::ConfirmUserAuthorization.call(auth, authorize_form(u)) do
|
45
|
+
on(:ok) do
|
46
|
+
add_processed :authorized, email
|
47
|
+
end
|
48
|
+
on(:invalid) do
|
49
|
+
add_error :authorized, email
|
50
|
+
end
|
51
|
+
end
|
52
|
+
else
|
53
|
+
add_error :authorized, email
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def revoke_users
|
59
|
+
@emails.each do |email, _name|
|
60
|
+
if (u = find_user(email))
|
61
|
+
auth = authorization(u)
|
62
|
+
next unless auth.granted?
|
63
|
+
Verification::DestroyUserAuthorization.call(auth) do
|
64
|
+
on(:ok) do
|
65
|
+
add_processed :revoked, email
|
66
|
+
end
|
67
|
+
on(:invalid) do
|
68
|
+
add_error :revoked, email
|
69
|
+
end
|
70
|
+
end
|
71
|
+
else
|
72
|
+
add_error :revoked, email
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def total(type)
|
78
|
+
if type == :registered
|
79
|
+
return User.where(email: @emails.keys, decidim_organization_id: @organization.id)
|
80
|
+
.where(confirmed_at: nil).count
|
81
|
+
end
|
82
|
+
if type == :unconfirmed
|
83
|
+
return User.where(email: @emails.keys, decidim_organization_id: @organization.id)
|
84
|
+
.where.not(confirmed_at: nil).count
|
85
|
+
end
|
86
|
+
if type == :authorized
|
87
|
+
return Decidim::Authorization.joins(:user)
|
88
|
+
.where(name: authorization_handler)
|
89
|
+
.where("decidim_users.email IN (:emails) AND decidim_users.decidim_organization_id=:org AND decidim_users.confirmed_at IS NOT NULL",
|
90
|
+
emails: @emails.keys, org: @organization.id).count
|
91
|
+
end
|
92
|
+
0
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def find_user(email)
|
98
|
+
User.find_by(email: email, decidim_organization_id: @organization.id)
|
99
|
+
end
|
100
|
+
|
101
|
+
def register_form(email, name)
|
102
|
+
OpenStruct.new(name: name.presence || email.split("@").first,
|
103
|
+
email: email.downcase,
|
104
|
+
organization: organization,
|
105
|
+
admin: false,
|
106
|
+
invited_by: current_user,
|
107
|
+
invitation_instructions: "invite_private_user")
|
108
|
+
end
|
109
|
+
|
110
|
+
def authorization(user)
|
111
|
+
Authorization.find_or_initialize_by(
|
112
|
+
user: user,
|
113
|
+
name: authorization_handler
|
114
|
+
)
|
115
|
+
end
|
116
|
+
|
117
|
+
def authorize_form(user)
|
118
|
+
Verification::DirectVerificationsForm.new(email: user.email, name: user.name)
|
119
|
+
end
|
120
|
+
|
121
|
+
def add_processed(type, email)
|
122
|
+
@processed[type] << email unless @processed[type].include? email
|
123
|
+
end
|
124
|
+
|
125
|
+
def add_error(type, email)
|
126
|
+
@errors[type] << email unless @errors[type].include? email
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module DirectVerifications
|
5
|
+
module Verification
|
6
|
+
# This module contains all the domain logic associated to Decidim's DirectVerifications
|
7
|
+
# component admin panel.
|
8
|
+
module Admin
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module DirectVerifications
|
5
|
+
module Verification
|
6
|
+
class AdminEngine < ::Rails::Engine
|
7
|
+
isolate_namespace Decidim::DirectVerifications::Verification::Admin
|
8
|
+
paths["db/migrate"] = nil
|
9
|
+
|
10
|
+
routes do
|
11
|
+
resources :direct_verifications, only: [:index, :create]
|
12
|
+
|
13
|
+
root to: "direct_verifications#index"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module DirectVerifications
|
5
|
+
module Verification
|
6
|
+
class Engine < ::Rails::Engine
|
7
|
+
isolate_namespace Decidim::DirectVerifications::Verification
|
8
|
+
|
9
|
+
paths["db/migrate"] = nil
|
10
|
+
paths["lib/tasks"] = nil
|
11
|
+
|
12
|
+
routes do
|
13
|
+
resource :authorization, only: [:new], as: :authorization
|
14
|
+
root to: "authorizations#new"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "decidim/verifications"
|
4
|
+
|
5
|
+
Decidim::Verifications.register_workflow(:direct_verifications) do |workflow|
|
6
|
+
workflow.engine = Decidim::DirectVerifications::Verification::Engine
|
7
|
+
workflow.admin_engine = Decidim::DirectVerifications::Verification::AdminEngine
|
8
|
+
end
|
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: decidim-direct_verifications
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ivan Vergés
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-04-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: decidim-admin
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.16'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.16'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: decidim-core
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.16'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.16'
|
41
|
+
description: Provides a verification method that also registers users directly in
|
42
|
+
the platform. Can be used to mass verificate user with other verification handlers
|
43
|
+
email:
|
44
|
+
- ivan@platoniq.net
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- LICENSE-AGPLv3.txt
|
50
|
+
- README.md
|
51
|
+
- Rakefile
|
52
|
+
- app/commands/decidim/direct_verifications/verification/confirm_user_authorization.rb
|
53
|
+
- app/commands/decidim/direct_verifications/verification/destroy_user_authorization.rb
|
54
|
+
- app/controllers/decidim/direct_verifications/verification/admin/direct_verifications_controller.rb
|
55
|
+
- app/controllers/decidim/direct_verifications/verification/authorizations_controller.rb
|
56
|
+
- app/forms/decidim/direct_verifications/verification/direct_verifications_form.rb
|
57
|
+
- app/permissions/decidim/direct_verifications/verification/admin/permissions.rb
|
58
|
+
- app/views/decidim/direct_verifications/verification/admin/direct_verifications/index.html.erb
|
59
|
+
- config/locales/ca.yml
|
60
|
+
- config/locales/en.yml
|
61
|
+
- config/locales/es.yml
|
62
|
+
- lib/decidim/direct_verifications.rb
|
63
|
+
- lib/decidim/direct_verifications/user_processor.rb
|
64
|
+
- lib/decidim/direct_verifications/verification.rb
|
65
|
+
- lib/decidim/direct_verifications/verification/admin.rb
|
66
|
+
- lib/decidim/direct_verifications/verification/admin_engine.rb
|
67
|
+
- lib/decidim/direct_verifications/verification/engine.rb
|
68
|
+
- lib/decidim/direct_verifications/verification/workflow.rb
|
69
|
+
- lib/decidim/direct_verifications/version.rb
|
70
|
+
homepage: https://github.com/Platoniq/decidim-verifications-direct_verifications
|
71
|
+
licenses:
|
72
|
+
- AGPL-3.0
|
73
|
+
metadata: {}
|
74
|
+
post_install_message:
|
75
|
+
rdoc_options: []
|
76
|
+
require_paths:
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.5'
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
requirements: []
|
89
|
+
rubygems_version: 3.0.3
|
90
|
+
signing_key:
|
91
|
+
specification_version: 4
|
92
|
+
summary: A decidim batch direct registration and verification module
|
93
|
+
test_files: []
|