decidim-direct_verifications 0.2.1

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