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.
@@ -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,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "direct_verifications/version"
4
+ require_relative "direct_verifications/user_processor"
5
+ require_relative "direct_verifications/verification"
6
+
7
+ module Decidim
8
+ module DirectVerifications
9
+ end
10
+ end
@@ -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,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "verification/admin"
4
+ require_relative "verification/admin_engine"
5
+ require_relative "verification/engine"
6
+ require_relative "verification/workflow"
@@ -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
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # This holds the decidim-direct_verifications version.
5
+ module DirectVerifications
6
+ def self.version
7
+ "0.2.1"
8
+ end
9
+
10
+ def self.decidim_version
11
+ "~> 0.16"
12
+ end
13
+ end
14
+ 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: []