decidim-cdtb 0.1.4 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 515d740942f3089a3cb906fab890191dc4b19f97c98ccff17fac5aac2aa83d9e
4
- data.tar.gz: 557fa8a269b25d0ac8b15c522d16072600c0b5a0d39fee2250cf9c80299486ab
3
+ metadata.gz: 7ea237b7898bc194b0f63514d1f699d5cd1cf649ac7dd7433de19d9319541474
4
+ data.tar.gz: be9a6f3251d35022b933524b3227edac2186a1c338a4025f6d73eb5495633e61
5
5
  SHA512:
6
- metadata.gz: 519c7234a2cff3adba2732e07e4fb9c2aa111fb0803ac8cac8180a9683c501676bb2f0aa96059f1a5cedd063db98471f70e1321d33be0e8db4a9947341df3b6a
7
- data.tar.gz: be0c056d4b91a543a528628b4f820fd06a7913899c12f3fa4e5db646ddbd1599970fcba41d67d583472b53abe2eef447e8b0d4aede8d83222617e3f3d80f9df8
6
+ metadata.gz: 3999c77a44817f3c0b3bc6b97663a47f3dade93f896958cdce06298bd9695d734cdd82859315607ecc3fcd990efd6e567e2e63d6e0141f5c3d256bc44d6b91ef
7
+ data.tar.gz: 513123ffe284a654f47666d8a0e355b29cb3dd011a30bab73cdef0348776f45cd44dab8c8c9f23f5e962fb5f00a5dc9acb9d68a70ced7b39335cfc225ce56839
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.1.7] - 2024-04-22 (Emocions de colors)
4
+
5
+ - Fix remove users task and add the reporter user mailer to arguments
6
+
7
+ ## [0.1.6] - 2024-04-11 (Malifetes ben fetes)
8
+
9
+ - Add remover users task
10
+
11
+ ## [0.1.5] - 2024-02-08 (Pastissos voladors de colors)
12
+
13
+ - Fix homepage in rubygems.org
14
+ - Add organization id and name in spam csv
15
+
3
16
  ## [0.1.4] - 2024-01-30 (Peus grans com gegants)
4
17
 
5
18
  - Add users spam detector task
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- decidim-cdtb (0.1.4)
4
+ decidim-cdtb (0.1.7)
5
5
  decidim (>= 0.26.2)
6
6
  rails (>= 6)
7
7
  ruby-progressbar
data/README.md CHANGED
@@ -36,17 +36,6 @@ bin/rake cdtb:org_by_host_like[vila]
36
36
  host: localhost, time_zone: Madrid, locales: ca + [ca, es, oc], available authorizations: [postal_letter, members_picker_authorization_handler]
37
37
  ```
38
38
 
39
- ### Fix nicknames
40
-
41
- In a previous version than Decidim v0.25 a validation to the `Decidim::User.nickname` was added with a migration to fix existing nicknames. But the migration was only taking into acocunt managed (impersonated) users.
42
-
43
- This task iterates (with `find_each`) over all non managed users and nicknamizes the nickname.
44
-
45
- To execute the task run:
46
-
47
- ```
48
- bin/rake cdtb:fix_nicknames
49
- ```
50
39
 
51
40
  ### Anonymize production dump
52
41
 
@@ -98,6 +87,36 @@ Decidim::Cdtb.configure do |config|
98
87
  end
99
88
  ```
100
89
 
90
+ ### Users
91
+
92
+ Tasks related with users.
93
+
94
+ ### Fix nicknames
95
+
96
+ In a previous version than Decidim v0.25 a validation to the `Decidim::User.nickname` was added with a migration to fix existing nicknames. But the migration was only taking into account managed (impersonated) users.
97
+
98
+ This task iterates (with `find_each`) over all non managed users and nicknamizes the nickname.
99
+
100
+ To execute the task run:
101
+
102
+ ```
103
+ bin/rake cdtb:users:fix_nicknames
104
+ ```
105
+
106
+ #### Remove users
107
+
108
+ You can delete users through a CSV with the user ID and a reporter user mailer. The purpose is to be able to eliminate potentially spammy users.
109
+
110
+ This task reports and hide the user's comments, blocks the user, and finally deletes the user.
111
+
112
+ The CSV will have a header and one column with the user ID.
113
+
114
+ To execute the task run:
115
+
116
+ ```
117
+ bundle exec rake cdtb:users:remove[spam_users.csv, reporter_user@example.org]
118
+ ```
119
+
101
120
  ### Upgrades:
102
121
 
103
122
  #### Upgrade modules
data/decidim-cdtb.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
 
11
11
  spec.summary = "CodiTramuntana's Decidim Toolbelt (cdtb)."
12
12
  spec.description = "A gem to help managing Decidim applications."
13
- spec.homepage = "http://github.com/CodiTramunana/cdtb"
13
+ spec.homepage = "https://github.com/CodiTramuntana/decidim-module-cdtb"
14
14
  spec.license = "MIT"
15
15
  spec.required_ruby_version = ">= 2.7.5"
16
16
 
@@ -35,11 +35,12 @@ module Decidim
35
35
  @num_users
36
36
  end
37
37
 
38
+ # rubocop:disable Metrics/AbcSize
38
39
  def do_execution(context)
39
40
  progress_bar = context[:progress_bar]
40
-
41
41
  CSV.open("spam_users.csv", "w") do |csv|
42
- csv_headers = ["ID", "Is suspicious?", "Name", "Email", "Nickname", "Personal URL", "About"]
42
+ csv_headers = ["ID", "Is suspicious?", "Name", "Email", "Nickname", "Personal URL", "About",
43
+ "Organization ID", "Organization Name"]
43
44
  csv << csv_headers
44
45
 
45
46
  @users.find_each do |user|
@@ -50,12 +51,14 @@ module Decidim
50
51
  @num_applied+= 1
51
52
  end
52
53
 
53
- csv << [user.id, suspicious, user.name, user.email, user.nickname, user.personal_url, user.about]
54
+ csv << [user.id, suspicious, user.name, user.email, user.nickname, user.personal_url, user.about,
55
+ user.organization.id, user.organization.name]
54
56
 
55
57
  progress_bar.increment
56
58
  end
57
59
  end
58
60
  end
61
+ # rubocop:enable Metrics/AbcSize
59
62
 
60
63
  def end_execution(_ctx)
61
64
  if @num_applied.positive?
@@ -3,6 +3,7 @@
3
3
  require "decidim/cdtb/tasks_utils"
4
4
  require "decidim/cdtb/task"
5
5
  require "decidim/cdtb/fixes/nickname_fixer"
6
+ require "decidim/cdtb/users/remover"
6
7
  require "decidim/cdtb/multitenants/org_by_host_like"
7
8
  require "decidim/cdtb/spam/user_spam_detector"
8
9
  require "decidim/cdtb/storage/local_sharding"
@@ -0,0 +1,125 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Cdtb
5
+ module Users
6
+ # Remove Decidim::User's
7
+ #
8
+ class Remover < ::Decidim::Cdtb::Task
9
+ def initialize(csv_path, reporter_user_email)
10
+ @csv_path = csv_path
11
+ @reporter_user_email = reporter_user_email
12
+ progress_bar = { title: "Decidim::User" }
13
+ super("USER REMOVER", progress_bar: progress_bar)
14
+ end
15
+
16
+ def prepare_execution(_ctx); end
17
+
18
+ def total_items
19
+ File.open(@csv_path).readlines.size - 1
20
+ end
21
+
22
+ def do_execution(context)
23
+ progress_bar = context[:progress_bar]
24
+
25
+ CSV.foreach(@csv_path, headers: true, col_sep: ",") do |row|
26
+ user = Decidim::User.find_by(id: row[0])
27
+ next unless user.present?
28
+
29
+ reporter_user = Decidim::User.find_by(email: @reporter_user_email,
30
+ organization: user.organization)
31
+ comments = Decidim::Comments::Comment.where(decidim_author_id: user.id)
32
+ manage_comments(comments, user, reporter_user) unless comments.empty?
33
+ destroy_user(user) if block_user(user, reporter_user)
34
+ progress_bar.increment
35
+ end
36
+ end
37
+
38
+ def end_execution(_ctx)
39
+ log_task_step("#{@num_applied} users removed")
40
+ end
41
+
42
+ private
43
+
44
+ def manage_comments(comments, user, reporter_user)
45
+ comments.find_each do |comment|
46
+ report_comment(comment, user, reporter_user)
47
+ end
48
+ end
49
+
50
+ def block_user(user, reporter_user)
51
+ params = {
52
+ user_id: user.id,
53
+ justification: "Confirmed spam suspicious"
54
+ }
55
+
56
+ form = Decidim::Admin::BlockUserForm.from_params(params).with_context(
57
+ {
58
+ current_organization: user.organization,
59
+ current_user: reporter_user
60
+ }
61
+ )
62
+
63
+ Decidim::Admin::BlockUser.call(form) do
64
+ on(:ok) do
65
+ puts "OK: User #{user.id} blocked"
66
+ return true
67
+ end
68
+
69
+ on(:invalid) do
70
+ puts "ERROR: User #{user.id} not blocked"
71
+ return false
72
+ end
73
+ end
74
+ end
75
+
76
+ def destroy_user(user)
77
+ params = {
78
+ delete_reason: "Confirmed spam suspicious"
79
+ }
80
+
81
+ form = Decidim::DeleteAccountForm.from_params(params)
82
+
83
+ Decidim::DestroyAccount.call(user, form) do
84
+ on(:ok) do
85
+ puts "OK: User #{user.id} removed"
86
+ end
87
+
88
+ on(:invalid) do
89
+ puts "ERROR: User #{user.id} not removed"
90
+ end
91
+ end
92
+ end
93
+
94
+ def report_comment(comment, user, reporter_user)
95
+ params = {
96
+ reason: "spam",
97
+ details: "Spam message"
98
+ }
99
+
100
+ form = Decidim::ReportForm.from_params(params).with_context(context_for_report(user, comment, reporter_user))
101
+ reportable = GlobalID::Locator.locate_signed(comment.to_sgid.to_s)
102
+
103
+ Decidim::CreateReport.call(form, reportable, reporter_user) do
104
+ on(:ok) do
105
+ puts "OK: Comment #{comment.id} of User #{user.id} reported"
106
+ end
107
+
108
+ on(:invalid) do
109
+ puts "ERROR: Comment #{comment.id} of User #{user.id} not reported"
110
+ end
111
+ end
112
+ end
113
+
114
+ def context_for_report(user, comment, reporter_user)
115
+ {
116
+ current_organization: user.organization,
117
+ current_component: comment.component,
118
+ current_user: reporter_user,
119
+ current_participatory_space: comment.participatory_space
120
+ }
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Decidim
4
4
  module Cdtb
5
- VERSION = "0.1.4"
5
+ VERSION = "0.1.7"
6
6
  DECIDIM_MIN_VERSION = ">= 0.26.2"
7
7
  end
8
8
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/cdtb/tasks"
4
+
5
+ namespace :cdtb do
6
+ namespace :users do
7
+ desc <<~EODESC
8
+ Fix Decidim::User's nicknames.
9
+ EODESC
10
+ task fix_nicknames: [:environment] do
11
+ fixer= ::Decidim::Cdtb::Fixes::NicknameFixer.new
12
+ fixer.execute!
13
+ end
14
+
15
+ desc <<~EODESC
16
+ Remove Decidim::User's by IDs in a CSV.
17
+ EODESC
18
+ task :remove, %i[csv_path reporter_user_email] => [:environment] do |_taks, args|
19
+ service = ::Decidim::Cdtb::Users::Remover.new(args.csv_path, args.reporter_user_email)
20
+ service.execute!
21
+ end
22
+ end
23
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-cdtb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oliver Valls
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-02-07 00:00:00.000000000 Z
11
+ date: 2024-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: decidim
@@ -114,24 +114,25 @@ files:
114
114
  - lib/decidim/cdtb/upgrades/install_gem_migrations_step.rb
115
115
  - lib/decidim/cdtb/upgrades/upgrade_modules_task.rb
116
116
  - lib/decidim/cdtb/upgrades/validate_migrations_task.rb
117
+ - lib/decidim/cdtb/users/remover.rb
117
118
  - lib/decidim/cdtb/version.rb
118
119
  - lib/generators/cdtb/USAGE
119
120
  - lib/generators/cdtb/templates/validate_migrations.yml
120
121
  - lib/generators/cdtb/validate_migrations_ci_generator.rb
121
122
  - lib/tasks/anonymize.rake
122
- - lib/tasks/cdtb.rake
123
123
  - lib/tasks/multitenants.rake
124
124
  - lib/tasks/spam.rake
125
125
  - lib/tasks/storage.rake
126
126
  - lib/tasks/upgrade.rake
127
+ - lib/tasks/users.rake
127
128
  - sig/decidim/cdtb.rbs
128
- homepage: http://github.com/CodiTramunana/cdtb
129
+ homepage: https://github.com/CodiTramuntana/decidim-module-cdtb
129
130
  licenses:
130
131
  - MIT
131
132
  metadata:
132
- homepage_uri: http://github.com/CodiTramunana/cdtb
133
- source_code_uri: http://github.com/CodiTramunana/cdtb
134
- changelog_uri: http://github.com/CodiTramunana/cdtb/CHANGELOG.md
133
+ homepage_uri: https://github.com/CodiTramuntana/decidim-module-cdtb
134
+ source_code_uri: https://github.com/CodiTramuntana/decidim-module-cdtb
135
+ changelog_uri: https://github.com/CodiTramuntana/decidim-module-cdtb/CHANGELOG.md
135
136
  post_install_message:
136
137
  rdoc_options: []
137
138
  require_paths:
data/lib/tasks/cdtb.rake DELETED
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "decidim/cdtb/tasks"
4
-
5
- namespace :cdtb do
6
- desc <<~EODESC
7
- Fix Decidim::User's nicknames.
8
- EODESC
9
- task fix_nicknames: [:environment] do
10
- fixer= ::Decidim::Cdtb::Fixes::NicknameFixer.new
11
- fixer.execute!
12
- end
13
- end