decidim-cleaner 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -0
- data/app/helpers/decidim/cleaner/delays_helper.rb +15 -0
- data/app/jobs/decidim/cleaner/clean_admin_logs_job.rb +7 -1
- data/app/jobs/decidim/cleaner/clean_inactive_users_job.rb +21 -5
- data/app/mailers/decidim/cleaner/inactive_users_mailer.rb +1 -0
- data/app/views/decidim/cleaner/inactive_users_mailer/warning_deletion.html.erb +1 -1
- data/app/views/decidim/cleaner/inactive_users_mailer/warning_inactive.html.erb +2 -2
- data/config/locales/en.yml +2 -1
- data/config/locales/fr.yml +2 -2
- data/db/migrate/20230328094652_add_warning_date_to_users.rb +7 -0
- data/lib/decidim/cleaner/version.rb +1 -1
- data/lib/decidim/cleaner.rb +13 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7667514845e0dddc19580aa0762d5218b93e1a24b75e5053856c8d1b7d748e0e
|
4
|
+
data.tar.gz: e39fbda595e2082802936da1a446b6e9a943d6dbb3c611dd2d67539c2a72e700
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 334ed4a155cbafd585244e53d6e080145c046894411ef9bec85d9fab00d9d9e89f8a7fc75b30c8eeef761a913183a3474543108b1e5ff6bbb624ab9a0dfbdad0
|
7
|
+
data.tar.gz: 76f39a3e96f7a152efc8420c2b352825f3d544826a7dac395f1f7d2025e82b3e81412b6b6144d93342f0c799c825a1f52c89548761362a45aa2306e511e56ca9
|
data/README.md
CHANGED
@@ -22,6 +22,19 @@ bundle exec rails decidim_cleaner:install:migrations
|
|
22
22
|
bundle exec rails db:migrate
|
23
23
|
```
|
24
24
|
|
25
|
+
You can then modify the default values of the cleaner in your .ENV with the following variables:
|
26
|
+
|
27
|
+
```bash
|
28
|
+
# Delay until a user is considered inactive and receive a warning email (in days)
|
29
|
+
DECIDIM_CLEANER_INACTIVE_USERS_MAIL=
|
30
|
+
|
31
|
+
# Delay until a user is deleted after receiving an email (in days)
|
32
|
+
DECIDIM_CLEANER_DELETE_INACTIVE_USERS=
|
33
|
+
|
34
|
+
# Delay until an admin log is deleted (in days)
|
35
|
+
DECIDIM_CLEANER_DELETE_ADMIN_LOGS=
|
36
|
+
```
|
37
|
+
|
25
38
|
### Sidekiq Scheduler
|
26
39
|
[Further documentation](https://github.com/sidekiq-scheduler/sidekiq-scheduler)
|
27
40
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Cleaner
|
5
|
+
module DelaysHelper
|
6
|
+
def email_inactive_after(organization)
|
7
|
+
organization.delete_inactive_users_email_after || Decidim::Cleaner.delete_inactive_users_email_after
|
8
|
+
end
|
9
|
+
|
10
|
+
def delete_inactive_after(organization)
|
11
|
+
organization.delete_inactive_users_after || Decidim::Cleaner.delete_inactive_users_after
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -10,10 +10,16 @@ module Decidim
|
|
10
10
|
next unless organization.delete_admin_logs?
|
11
11
|
|
12
12
|
Decidim::ActionLog.where(organization: organization)
|
13
|
-
.where("created_at < ?",
|
13
|
+
.where("created_at < ?", delete_admin_logs_before_date(organization))
|
14
14
|
.delete_all
|
15
15
|
end
|
16
16
|
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def delete_admin_logs_before_date(organization)
|
21
|
+
Time.zone.now - (organization.delete_admin_logs_after || Decidim::Cleaner.delete_admin_logs_after).days
|
22
|
+
end
|
17
23
|
end
|
18
24
|
end
|
19
25
|
end
|
@@ -12,25 +12,31 @@ module Decidim
|
|
12
12
|
send_warning(Decidim::User.where(organization: organization)
|
13
13
|
.not_deleted
|
14
14
|
.where.not(email: "")
|
15
|
-
.where("last_sign_in_at < ?",
|
16
|
-
.where("last_sign_in_at > ?", Time.zone.now - (organization.delete_inactive_users_email_after || 365).days - 1.day))
|
17
|
-
|
15
|
+
.where("last_sign_in_at < ?", email_inactive_before_date(organization)))
|
18
16
|
delete_user_and_send_email(Decidim::User.where(organization: organization)
|
19
17
|
.not_deleted
|
20
18
|
.where.not(email: "")
|
21
|
-
.where("
|
19
|
+
.where("warning_date < ?", delete_inactive_before_date(organization)))
|
22
20
|
end
|
23
21
|
end
|
24
22
|
|
25
23
|
def send_warning(users)
|
26
24
|
users.find_each do |user|
|
27
|
-
|
25
|
+
next if user.warning_date.present?
|
26
|
+
|
27
|
+
user.update!(warning_date: Time.zone.now) if InactiveUsersMailer.warning_inactive(user).deliver_now
|
28
28
|
Rails.logger.info "Inactive warning sent to #{user.email}"
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
def delete_user_and_send_email(users)
|
33
33
|
users.find_each do |user|
|
34
|
+
if user.last_sign_in_at > user.warning_date
|
35
|
+
user.update!(warning_date: nil)
|
36
|
+
Rails.logger.info "User with id #{user.id} has logged in again, warning date reset"
|
37
|
+
next
|
38
|
+
end
|
39
|
+
|
34
40
|
InactiveUsersMailer.warning_deletion(user).deliver_now
|
35
41
|
Rails.logger.info "Deletion warning sent to #{user.email}"
|
36
42
|
|
@@ -38,6 +44,16 @@ module Decidim
|
|
38
44
|
Rails.logger.info "User with id #{user.id} destroyed"
|
39
45
|
end
|
40
46
|
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def email_inactive_before_date(organization)
|
51
|
+
Time.zone.now - (organization.delete_inactive_users_email_after || Decidim::Cleaner.delete_inactive_users_email_after).days
|
52
|
+
end
|
53
|
+
|
54
|
+
def delete_inactive_before_date(organization)
|
55
|
+
Time.zone.now - (organization.delete_inactive_users_after || Decidim::Cleaner.delete_inactive_users_after).days
|
56
|
+
end
|
41
57
|
end
|
42
58
|
end
|
43
59
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<p class="email-greeting"><%= t ".hello" %></p>
|
2
2
|
|
3
|
-
<p class="email-instructions"><%= t(".body_1", organization_name: h(@organization.name), organization_url: decidim.root_url(host: @organization.host), days: @organization
|
3
|
+
<p class="email-instructions"><%= t(".body_1", organization_name: h(@organization.name), organization_url: decidim.root_url(host: @organization.host), days: email_inactive_after(@organization) + delete_inactive_after(@organization)).html_safe %></p>
|
4
4
|
|
5
5
|
<p class="email-instructions"><%= t ".body_2" %></p>
|
6
6
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<p class="email-greeting"><%= t ".hello" %></p>
|
2
2
|
|
3
|
-
<p class="email-instructions"><%= t ".body_1", organization_name: h(@organization.name), days: @organization
|
3
|
+
<p class="email-instructions"><%= t ".body_1", organization_name: h(@organization.name), days: email_inactive_after(@organization) %></p>
|
4
4
|
|
5
|
-
<p class="email-instructions"><%= t(".body_2", remaining_days: (@organization
|
5
|
+
<p class="email-instructions"><%= t(".body_2", remaining_days: delete_inactive_after(@organization), organization_url: decidim.root_url(host: @organization.host)).html_safe %></p>
|
6
6
|
|
7
7
|
<p class="email-closing"><%= t(".greetings", organization_name: h(@organization.name), organization_url: decidim.root_url(host: @organization.host)).html_safe %></p>
|
data/config/locales/en.yml
CHANGED
@@ -6,7 +6,8 @@ en:
|
|
6
6
|
delete_admin_logs: Enable admin logs deletion
|
7
7
|
delete_admin_logs_after: Delete admin logs after (days, default 365)
|
8
8
|
delete_inactive_users: Enable inactive users deletion
|
9
|
-
delete_inactive_users_after: Delete inactive users after (days,
|
9
|
+
delete_inactive_users_after: Delete inactive users x days after the mail(days,
|
10
|
+
default 30)
|
10
11
|
delete_inactive_users_email_after: Send email to inactive users before deletion
|
11
12
|
(days, default 365)
|
12
13
|
decidim:
|
data/config/locales/fr.yml
CHANGED
@@ -7,8 +7,8 @@ fr:
|
|
7
7
|
delete_admin_logs_after: Supprimer l'historique d'administration après (jours,
|
8
8
|
par défaut 365)
|
9
9
|
delete_inactive_users: Activer la suppression des utilisateurs inactifs
|
10
|
-
delete_inactive_users_after: Supprimer les utilisateurs inactifs
|
11
|
-
par défaut
|
10
|
+
delete_inactive_users_after: Supprimer les utilisateurs inactifs au bout de
|
11
|
+
x jours après le courriel (jours, par défaut 30)
|
12
12
|
delete_inactive_users_email_after: Envoyer un courriel aux utilisateurs inactifs
|
13
13
|
avant la suppression (jours, par défaut 365)
|
14
14
|
decidim:
|
data/lib/decidim/cleaner.rb
CHANGED
@@ -7,5 +7,18 @@ require "decidim/cleaner/admin_engine"
|
|
7
7
|
module Decidim
|
8
8
|
# This namespace holds the logic of the `Cleaner` module.
|
9
9
|
module Cleaner
|
10
|
+
include ActiveSupport::Configurable
|
11
|
+
|
12
|
+
config_accessor :delete_admin_logs_after do
|
13
|
+
ENV.fetch("DECIDIM_CLEANER_DELETE_ADMIN_LOGS", "365").to_i
|
14
|
+
end
|
15
|
+
|
16
|
+
config_accessor :delete_inactive_users_after do
|
17
|
+
ENV.fetch("DECIDIM_CLEANER_DELETE_INACTIVE_USERS", "30").to_i
|
18
|
+
end
|
19
|
+
|
20
|
+
config_accessor :delete_inactive_users_email_after do
|
21
|
+
ENV.fetch("DECIDIM_CLEANER_INACTIVE_USERS_MAIL", "365").to_i
|
22
|
+
end
|
10
23
|
end
|
11
24
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: decidim-cleaner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Quentinchampenois
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: decidim-core
|
@@ -38,6 +38,7 @@ files:
|
|
38
38
|
- app/controllers/decidim/cleaner/admin/application_controller.rb
|
39
39
|
- app/controllers/decidim/cleaner/admin/organization_cleaner_controller.rb
|
40
40
|
- app/forms/decidim/cleaner/admin/organization_cleaner_form.rb
|
41
|
+
- app/helpers/decidim/cleaner/delays_helper.rb
|
41
42
|
- app/jobs/decidim/cleaner/clean_admin_logs_job.rb
|
42
43
|
- app/jobs/decidim/cleaner/clean_inactive_users_job.rb
|
43
44
|
- app/mailers/decidim/cleaner/inactive_users_mailer.rb
|
@@ -52,6 +53,7 @@ files:
|
|
52
53
|
- config/routes.rb
|
53
54
|
- db/migrate/20230106105014_add_delete_admin_logs_to_organization.rb
|
54
55
|
- db/migrate/20230110150032_add_delete_inactive_users_to_organization.rb
|
56
|
+
- db/migrate/20230328094652_add_warning_date_to_users.rb
|
55
57
|
- lib/decidim/cleaner.rb
|
56
58
|
- lib/decidim/cleaner/admin.rb
|
57
59
|
- lib/decidim/cleaner/admin_engine.rb
|