decidim-direct_verifications 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|