decidim-direct_verifications 0.22.1 → 1.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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +32 -3
  3. data/app/assets/config/direct_verifications_admin_manifest.css +3 -0
  4. data/app/assets/stylesheets/decidim/direct_verifications/authorizations.scss +17 -0
  5. data/app/commands/decidim/direct_verifications/verification/create_import.rb +50 -0
  6. data/app/controllers/decidim/direct_verifications/verification/admin/authorizations_controller.rb +40 -0
  7. data/app/controllers/decidim/direct_verifications/verification/admin/direct_verifications_controller.rb +20 -18
  8. data/app/controllers/decidim/direct_verifications/verification/admin/imports_controller.rb +55 -0
  9. data/app/forms/decidim/direct_verifications/registration_form.rb +8 -0
  10. data/app/forms/decidim/direct_verifications/verification/create_import_form.rb +43 -0
  11. data/app/jobs/decidim/direct_verifications/authorize_users_job.rb +34 -0
  12. data/app/jobs/decidim/direct_verifications/base_import_job.rb +38 -0
  13. data/app/jobs/decidim/direct_verifications/register_users_job.rb +19 -0
  14. data/app/jobs/decidim/direct_verifications/revoke_users_job.rb +17 -0
  15. data/app/mailers/decidim/direct_verifications/import_mailer.rb +27 -0
  16. data/app/mailers/decidim/direct_verifications/stats.rb +23 -0
  17. data/app/views/decidim/direct_verifications/import_mailer/finished_processing.html.erb +7 -0
  18. data/app/views/decidim/direct_verifications/import_mailer/finished_processing.text.erb +7 -0
  19. data/app/views/decidim/direct_verifications/verification/admin/authorizations/index.html.erb +42 -0
  20. data/app/views/decidim/direct_verifications/verification/admin/direct_verifications/index.html.erb +2 -1
  21. data/app/views/decidim/direct_verifications/verification/admin/imports/new.html.erb +50 -0
  22. data/config/initializers/mail_previews.rb +5 -0
  23. data/config/locales/ca.yml +20 -20
  24. data/config/locales/cs.yml +69 -0
  25. data/config/locales/en.yml +29 -2
  26. data/config/locales/es.yml +20 -20
  27. data/config/locales/fr.yml +69 -0
  28. data/lib/decidim/direct_verifications.rb +24 -1
  29. data/lib/decidim/direct_verifications/authorize_user.rb +64 -0
  30. data/lib/decidim/direct_verifications/instrumenter.rb +58 -0
  31. data/lib/decidim/direct_verifications/parsers.rb +11 -0
  32. data/lib/decidim/direct_verifications/parsers/base_parser.rb +37 -0
  33. data/lib/decidim/direct_verifications/parsers/metadata_parser.rb +54 -0
  34. data/lib/decidim/direct_verifications/parsers/name_parser.rb +40 -0
  35. data/lib/decidim/direct_verifications/register_user.rb +54 -0
  36. data/lib/decidim/direct_verifications/revoke_user.rb +45 -0
  37. data/lib/decidim/direct_verifications/tests/factories.rb +11 -0
  38. data/lib/decidim/direct_verifications/tests/verification_controller_examples.rb +8 -3
  39. data/lib/decidim/direct_verifications/user_processor.rb +17 -101
  40. data/lib/decidim/direct_verifications/user_stats.rb +5 -5
  41. data/lib/decidim/direct_verifications/verification/admin_engine.rb +6 -1
  42. data/lib/decidim/direct_verifications/version.rb +3 -3
  43. metadata +37 -9
  44. data/lib/decidim/direct_verifications/config.rb +0 -23
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/core/test/factories"
4
+
5
+ FactoryBot.modify do
6
+ factory :authorization do
7
+ trait :direct_verification do
8
+ name { "direct_verifications" }
9
+ end
10
+ end
11
+ end
@@ -2,8 +2,9 @@
2
2
 
3
3
  shared_examples_for "checking users" do |params|
4
4
  context "when check without mails" do
5
+ before { params[:userslist] = "" }
6
+
5
7
  it "renders the index with info message" do
6
- params[:userslist] = ""
7
8
  perform_enqueued_jobs do
8
9
  post :create, params: params
9
10
  expect(flash[:info]).not_to be_empty
@@ -14,8 +15,9 @@ shared_examples_for "checking users" do |params|
14
15
  end
15
16
 
16
17
  context "when check with mails" do
18
+ before { params[:userslist] = "mail@example.com" }
19
+
17
20
  it "renders the index with info message" do
18
- params[:userslist] = "mail@example.com"
19
21
  perform_enqueued_jobs do
20
22
  post :create, params: params
21
23
  expect(flash[:info]).not_to be_empty
@@ -58,13 +60,16 @@ end
58
60
 
59
61
  shared_examples_for "revoking users" do |params|
60
62
  context "when there are valid emails" do
61
- it "creates notice message" do
63
+ before do
62
64
  create(
63
65
  :authorization,
64
66
  :granted,
65
67
  name: verification_type,
66
68
  user: authorized_user
67
69
  )
70
+ end
71
+
72
+ it "creates notice message" do
68
73
  perform_enqueued_jobs do
69
74
  post :create, params: params
70
75
  expect(flash[:notice]).not_to be_empty
@@ -1,131 +1,47 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "decidim/direct_verifications/register_user"
4
+ require "decidim/direct_verifications/authorize_user"
5
+ require "decidim/direct_verifications/revoke_user"
6
+ require "decidim/direct_verifications/instrumenter"
7
+
3
8
  module Decidim
4
9
  module DirectVerifications
5
10
  class UserProcessor
6
- def initialize(organization, current_user, session)
11
+ def initialize(organization, current_user, session, instrumenter)
7
12
  @organization = organization
8
13
  @current_user = current_user
9
14
  @authorization_handler = :direct_verifications
10
- @errors = { registered: [], authorized: [], revoked: [] }
11
- @processed = { registered: [], authorized: [], revoked: [] }
15
+
12
16
  @emails = {}
13
17
  @session = session
18
+ @instrumenter = instrumenter
14
19
  end
15
20
 
16
- attr_reader :organization, :current_user, :session, :errors, :processed, :emails
17
- attr_accessor :authorization_handler
18
-
19
- def emails=(email_list)
20
- @emails = email_list.map { |k, v| [k.to_s.downcase, v.presence || k.split("@").first] }.to_h
21
- end
21
+ attr_reader :organization, :current_user, :session, :errors, :processed
22
+ attr_accessor :authorization_handler, :emails
22
23
 
23
24
  def register_users
24
- @emails.each do |email, name|
25
- next if find_user(email)
26
-
27
- form = register_form(email, name)
28
- begin
29
- InviteUser.call(form) do
30
- on(:ok) do
31
- add_processed :registered, email
32
- log_action find_user(email)
33
- end
34
- on(:invalid) do
35
- add_error :registered, email
36
- end
37
- end
38
- rescue StandardError
39
- add_error :registered, email
40
- end
25
+ emails.each do |email, data|
26
+ RegisterUser.new(email, data, organization, current_user, instrumenter).call
41
27
  end
42
28
  end
43
29
 
44
30
  def authorize_users
45
- @emails.each do |email, _name|
46
- if (u = find_user(email))
47
- auth = authorization(u)
48
- next unless !auth.granted? || auth.expired?
49
-
50
- Verification::ConfirmUserAuthorization.call(auth, authorize_form(u), session) do
51
- on(:ok) do
52
- add_processed :authorized, email
53
- end
54
- on(:invalid) do
55
- add_error :authorized, email
56
- end
57
- end
58
- else
59
- add_error :authorized, email
60
- end
31
+ emails.each do |email, data|
32
+ AuthorizeUser.new(email, data, session, organization, instrumenter, authorization_handler).call
61
33
  end
62
34
  end
63
35
 
64
36
  def revoke_users
65
- @emails.each do |email, _name|
66
- if (u = find_user(email))
67
- auth = authorization(u)
68
- next unless auth.granted?
69
-
70
- Verification::DestroyUserAuthorization.call(auth) do
71
- on(:ok) do
72
- add_processed :revoked, email
73
- end
74
- on(:invalid) do
75
- add_error :revoked, email
76
- end
77
- end
78
- else
79
- add_error :revoked, email
80
- end
37
+ emails.each do |email, _name|
38
+ RevokeUser.new(email, organization, instrumenter, authorization_handler).call
81
39
  end
82
40
  end
83
41
 
84
42
  private
85
43
 
86
- def find_user(email)
87
- User.find_by(email: email, decidim_organization_id: @organization.id)
88
- end
89
-
90
- def register_form(email, name)
91
- OpenStruct.new(name: name.presence || email.split("@").first,
92
- email: email.downcase,
93
- organization: organization,
94
- admin: false,
95
- invited_by: current_user,
96
- invitation_instructions: "direct_invite")
97
- end
98
-
99
- def authorization(user)
100
- Authorization.find_or_initialize_by(
101
- user: user,
102
- name: authorization_handler
103
- )
104
- end
105
-
106
- def authorize_form(user)
107
- Verification::DirectVerificationsForm.new(email: user.email, name: user.name)
108
- end
109
-
110
- def add_processed(type, email)
111
- @processed[type] << email unless @processed[type].include? email
112
- end
113
-
114
- def add_error(type, email)
115
- @errors[type] << email unless @errors[type].include? email
116
- end
117
-
118
- def log_action(user)
119
- Decidim.traceability.perform_action!(
120
- "invite",
121
- user,
122
- current_user,
123
- extra: {
124
- invited_user_role: "participant",
125
- invited_user_id: user.id
126
- }
127
- )
128
- end
44
+ attr_reader :instrumenter
129
45
  end
130
46
  end
131
47
  end
@@ -22,7 +22,7 @@ module Decidim
22
22
  end
23
23
 
24
24
  def unconfirmed
25
- registered_users.where("decidim_users.confirmed_at IS NULL").count
25
+ registered_users.where(decidim_users: { confirmed_at: nil }).count
26
26
  end
27
27
 
28
28
  def authorized
@@ -30,7 +30,7 @@ module Decidim
30
30
  end
31
31
 
32
32
  def authorized_unconfirmed
33
- authorized_users.where("decidim_users.confirmed_at IS NULL").count
33
+ authorized_users.where(decidim_users: { confirmed_at: nil }).count
34
34
  end
35
35
 
36
36
  private
@@ -41,10 +41,10 @@ module Decidim
41
41
  filter[:email] = emails unless emails.empty?
42
42
  return User.where(filter).where.not(email: "")
43
43
  end
44
- authorized_users(false)
44
+ authorized_users(strict: false)
45
45
  end
46
46
 
47
- def authorized_users(strict = true)
47
+ def authorized_users(strict: true)
48
48
  q = Decidim::Authorization.joins(:user)
49
49
  unless authorization_handler.empty?
50
50
  q = q.where(name: authorization_handler)
@@ -56,7 +56,7 @@ module Decidim
56
56
  q = q.where("decidim_users.decidim_organization_id=:org and decidim_users.email!=''", org: organization.id)
57
57
  return q if emails.empty?
58
58
 
59
- q.where("decidim_users.email IN (:emails)", emails: emails)
59
+ q.where(decidim_users: { email: emails })
60
60
  end
61
61
 
62
62
  def expires_in
@@ -10,12 +10,17 @@ module Decidim
10
10
  routes do
11
11
  resources :direct_verifications, only: [:index, :create, :stats]
12
12
  resources :stats, only: [:index]
13
+ resources :authorizations, only: [:index, :destroy]
14
+ resources :imports, only: [:new, :create]
13
15
 
14
16
  root to: "direct_verifications#index"
15
17
  end
16
18
 
17
19
  initializer "decidim_direct_verifications.admin_assets" do |app|
18
- app.config.assets.precompile += %w(direct_verifications_admin_manifest.js)
20
+ app.config.assets.precompile += %w(
21
+ direct_verifications_admin_manifest.js
22
+ direct_verifications_admin_manifest.css
23
+ )
19
24
  end
20
25
  end
21
26
  end
@@ -3,8 +3,8 @@
3
3
  module Decidim
4
4
  # This holds the decidim-direct_verifications version.
5
5
  module DirectVerifications
6
- VERSION = "0.22.1"
7
- DECIDIM_VERSION = "0.22"
8
- MIN_DECIDIM_VERSION = ">= 0.22.0"
6
+ VERSION = "1.0"
7
+ DECIDIM_VERSION = "0.24.3"
8
+ MIN_DECIDIM_VERSION = ">= 0.23.0"
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-direct_verifications
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.1
4
+ version: '1.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Vergés
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-12 00:00:00.000000000 Z
11
+ date: 2021-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: decidim-admin
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.22.0
19
+ version: 0.23.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.22.0
26
+ version: 0.23.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: decidim-core
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.22.0
33
+ version: 0.23.0
34
34
  type: :runtime
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.22.0
40
+ version: 0.23.0
41
41
  description: Provides a verification method that also registers users directly in
42
42
  the platform. Can be used to mass verificate user with other verification handlers
43
43
  email:
@@ -49,23 +49,51 @@ files:
49
49
  - LICENSE-AGPLv3.txt
50
50
  - README.md
51
51
  - Rakefile
52
+ - app/assets/config/direct_verifications_admin_manifest.css
52
53
  - app/assets/config/direct_verifications_admin_manifest.js
53
54
  - app/assets/javascripts/decidim/direct_verifications/verification/admin/direct_verifications_admin.js.es6
55
+ - app/assets/stylesheets/decidim/direct_verifications/authorizations.scss
54
56
  - app/commands/decidim/direct_verifications/verification/confirm_user_authorization.rb
57
+ - app/commands/decidim/direct_verifications/verification/create_import.rb
55
58
  - app/commands/decidim/direct_verifications/verification/destroy_user_authorization.rb
59
+ - app/controllers/decidim/direct_verifications/verification/admin/authorizations_controller.rb
56
60
  - app/controllers/decidim/direct_verifications/verification/admin/direct_verifications_controller.rb
61
+ - app/controllers/decidim/direct_verifications/verification/admin/imports_controller.rb
57
62
  - app/controllers/decidim/direct_verifications/verification/admin/stats_controller.rb
58
63
  - app/controllers/decidim/direct_verifications/verification/authorizations_controller.rb
64
+ - app/forms/decidim/direct_verifications/registration_form.rb
65
+ - app/forms/decidim/direct_verifications/verification/create_import_form.rb
59
66
  - app/forms/decidim/direct_verifications/verification/direct_verifications_form.rb
67
+ - app/jobs/decidim/direct_verifications/authorize_users_job.rb
68
+ - app/jobs/decidim/direct_verifications/base_import_job.rb
69
+ - app/jobs/decidim/direct_verifications/register_users_job.rb
70
+ - app/jobs/decidim/direct_verifications/revoke_users_job.rb
71
+ - app/mailers/decidim/direct_verifications/import_mailer.rb
72
+ - app/mailers/decidim/direct_verifications/stats.rb
73
+ - app/views/decidim/direct_verifications/import_mailer/finished_processing.html.erb
74
+ - app/views/decidim/direct_verifications/import_mailer/finished_processing.text.erb
75
+ - app/views/decidim/direct_verifications/verification/admin/authorizations/index.html.erb
60
76
  - app/views/decidim/direct_verifications/verification/admin/direct_verifications/index.html.erb
77
+ - app/views/decidim/direct_verifications/verification/admin/imports/new.html.erb
61
78
  - app/views/decidim/direct_verifications/verification/admin/stats/index.html.erb
62
79
  - app/views/devise/mailer/direct_invite.html.erb
63
80
  - app/views/devise/mailer/direct_invite.text.erb
81
+ - config/initializers/mail_previews.rb
64
82
  - config/locales/ca.yml
83
+ - config/locales/cs.yml
65
84
  - config/locales/en.yml
66
85
  - config/locales/es.yml
86
+ - config/locales/fr.yml
67
87
  - lib/decidim/direct_verifications.rb
68
- - lib/decidim/direct_verifications/config.rb
88
+ - lib/decidim/direct_verifications/authorize_user.rb
89
+ - lib/decidim/direct_verifications/instrumenter.rb
90
+ - lib/decidim/direct_verifications/parsers.rb
91
+ - lib/decidim/direct_verifications/parsers/base_parser.rb
92
+ - lib/decidim/direct_verifications/parsers/metadata_parser.rb
93
+ - lib/decidim/direct_verifications/parsers/name_parser.rb
94
+ - lib/decidim/direct_verifications/register_user.rb
95
+ - lib/decidim/direct_verifications/revoke_user.rb
96
+ - lib/decidim/direct_verifications/tests/factories.rb
69
97
  - lib/decidim/direct_verifications/tests/verification_controller_examples.rb
70
98
  - lib/decidim/direct_verifications/user_processor.rb
71
99
  - lib/decidim/direct_verifications/user_stats.rb
@@ -87,14 +115,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
87
115
  requirements:
88
116
  - - ">="
89
117
  - !ruby/object:Gem::Version
90
- version: '2.5'
118
+ version: '2.7'
91
119
  required_rubygems_version: !ruby/object:Gem::Requirement
92
120
  requirements:
93
121
  - - ">="
94
122
  - !ruby/object:Gem::Version
95
123
  version: '0'
96
124
  requirements: []
97
- rubygems_version: 3.0.3
125
+ rubygems_version: 3.1.4
98
126
  signing_key:
99
127
  specification_version: 4
100
128
  summary: A decidim batch direct registration and verification module
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module DirectVerifications
5
- class << self
6
- attr_accessor :config
7
- def configure
8
- yield self.config ||= Config.new
9
- end
10
- end
11
-
12
- class Config
13
- attr_reader :manage_workflows
14
- def manage_workflows=(manage_workflows)
15
- @manage_workflows.concat(manage_workflows).uniq!
16
- end
17
-
18
- def initialize
19
- @manage_workflows = ["direct_verifications"]
20
- end
21
- end
22
- end
23
- end