decidim-cdtb 0.1.2
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.
- checksums.yaml +7 -0
- data/.node-version +1 -0
- data/.rspec +3 -0
- data/.rubocop.yml +42 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +14 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +28 -0
- data/Gemfile.lock +776 -0
- data/LICENSE.txt +21 -0
- data/README.md +118 -0
- data/Rakefile +13 -0
- data/app/jobs/application_job.rb +12 -0
- data/app/jobs/cdtb/fix_nickname_job.rb +18 -0
- data/decidim-cdtb.gemspec +38 -0
- data/lib/decidim/cdtb/engine.rb +15 -0
- data/lib/decidim/cdtb/fixes/nickname_fixer.rb +45 -0
- data/lib/decidim/cdtb/multitenants/org_by_host_like.rb +65 -0
- data/lib/decidim/cdtb/storage/local_sharding.rb +62 -0
- data/lib/decidim/cdtb/storage/set_local_on_blobs.rb +35 -0
- data/lib/decidim/cdtb/task.rb +67 -0
- data/lib/decidim/cdtb/tasks.rb +8 -0
- data/lib/decidim/cdtb/tasks_utils.rb +36 -0
- data/lib/decidim/cdtb/version.rb +8 -0
- data/lib/decidim/cdtb.rb +10 -0
- data/lib/tasks/anonymize.rake +127 -0
- data/lib/tasks/cdtb.rake +13 -0
- data/lib/tasks/multitenants.rake +18 -0
- data/lib/tasks/storage.rake +36 -0
- data/sig/decidim/cdtb.rbs +6 -0
- metadata +145 -0
@@ -0,0 +1,127 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
namespace :cdtb do
|
4
|
+
namespace :anonymize do
|
5
|
+
desc "Checks for the environment"
|
6
|
+
task :check do
|
7
|
+
raise "Won't run unless the env var DISABLE_PRODUCTION_CHECK=1 is set" unless ENV["DISABLE_PRODUCTION_CHECK"]
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Anonymizes a production dump."
|
11
|
+
task all: %i[users user_groups system_admins paper_trail]
|
12
|
+
|
13
|
+
def with_progress(collection, name:)
|
14
|
+
total = collection.count
|
15
|
+
progressbar = create_progress_bar(total: total)
|
16
|
+
|
17
|
+
puts "Anonymizing #{total} #{name}...\n"
|
18
|
+
skip_logs do
|
19
|
+
collection.find_each do |item|
|
20
|
+
yield(item)
|
21
|
+
progressbar.increment
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def create_progress_bar(total:)
|
27
|
+
ProgressBar.create(
|
28
|
+
progress_mark: " ",
|
29
|
+
remainder_mark: "\u{FF65}",
|
30
|
+
total: total,
|
31
|
+
format: "%a %e %b\u{15E7}%i %p%% %t"
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
def skip_logs
|
36
|
+
previous_log_level = ActiveRecord::Base.logger.level
|
37
|
+
ActiveRecord::Base.logger.level = 2
|
38
|
+
yield
|
39
|
+
ActiveRecord::Base.logger.level = previous_log_level
|
40
|
+
end
|
41
|
+
|
42
|
+
task proposals: %i[check environment] do
|
43
|
+
Decidim::Proposals::ProposalVote.delete_all
|
44
|
+
|
45
|
+
with_progress(Decidim::Proposals::Proposal.all, name: "proposals") do |proposal|
|
46
|
+
proposal.votes.delete_all
|
47
|
+
end
|
48
|
+
Decidim::Proposals::Proposal.update_all(proposal_votes_count: 0)
|
49
|
+
end
|
50
|
+
|
51
|
+
task users: %i[check environment] do
|
52
|
+
with_progress Decidim::User.where.not(admin: true), name: "users" do |user|
|
53
|
+
user.update_columns(
|
54
|
+
email: "email#{user.id}@example.org",
|
55
|
+
name: "Anonymized User #{user.id}",
|
56
|
+
nickname: "anon-#{user.id}",
|
57
|
+
encrypted_password: "encryptedpassword#{user.id}",
|
58
|
+
reset_password_token: nil,
|
59
|
+
current_sign_in_at: nil,
|
60
|
+
last_sign_in_at: nil,
|
61
|
+
current_sign_in_ip: nil,
|
62
|
+
last_sign_in_ip: nil,
|
63
|
+
invitation_token: nil,
|
64
|
+
confirmed_at: Time.zone.now,
|
65
|
+
confirmation_token: nil,
|
66
|
+
unconfirmed_email: nil,
|
67
|
+
avatar: nil
|
68
|
+
)
|
69
|
+
|
70
|
+
user.update_columns(extra: {}) if user.attributes["extra"].present?
|
71
|
+
|
72
|
+
user.identities.find_each do |identity|
|
73
|
+
identity.update_columns(uid: "anonymized-identity-#{identity.id}")
|
74
|
+
end
|
75
|
+
|
76
|
+
Decidim::Authorization.where(user: user).find_each do |authorization|
|
77
|
+
authorization.update_columns(unique_id: authorization.id)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
task user_groups: %i[check environment] do
|
83
|
+
with_progress Decidim::UserGroup.all, name: "user groups" do |user_group|
|
84
|
+
user_group.update_columns(
|
85
|
+
email: "email-ug-#{user_group.id}@example.org",
|
86
|
+
name: "User Group #{user_group.id}",
|
87
|
+
nickname: "anon-ug-#{user_group.id}",
|
88
|
+
encrypted_password: "encryptedpassword#{user_group.id}",
|
89
|
+
reset_password_token: nil,
|
90
|
+
current_sign_in_at: nil,
|
91
|
+
last_sign_in_at: nil,
|
92
|
+
current_sign_in_ip: nil,
|
93
|
+
last_sign_in_ip: nil,
|
94
|
+
invitation_token: nil,
|
95
|
+
confirmed_at: Time.zone.now,
|
96
|
+
confirmation_token: nil,
|
97
|
+
unconfirmed_email: nil,
|
98
|
+
avatar: nil,
|
99
|
+
extended_data: user_group.extended_data.merge({
|
100
|
+
"phone": "123456789",
|
101
|
+
"document_number":
|
102
|
+
"document-#{user_group.id}"
|
103
|
+
})
|
104
|
+
)
|
105
|
+
|
106
|
+
user_group.update_columns(extra: {}) if user_group.attributes["extra"].present?
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
task system_admins: %i[check environment] do
|
111
|
+
with_progress Decidim::System::Admin.all, name: "system admins" do |admin|
|
112
|
+
admin.update_columns(
|
113
|
+
email: "email-admin#{admin.id}@example.org",
|
114
|
+
encrypted_password: "encryptedpassword#{admin.id}",
|
115
|
+
reset_password_token: nil,
|
116
|
+
unlock_token: nil
|
117
|
+
)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
task paper_trail: %i[check environment] do
|
122
|
+
PaperTrail::Version
|
123
|
+
.where(item_type: %w[Decidim::Authorization Decidim::UserBaseEntity Decidim::UserGroup])
|
124
|
+
.delete_all
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
data/lib/tasks/cdtb.rake
ADDED
@@ -0,0 +1,13 @@
|
|
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
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# A set of utils to manage Decidim Organizations.
|
5
|
+
#
|
6
|
+
namespace :cdtb do
|
7
|
+
require "decidim/cdtb/tasks_utils"
|
8
|
+
include ::Decidim::Cdtb::TasksUtils
|
9
|
+
|
10
|
+
desc <<~EODESC
|
11
|
+
Finds information about the Organization, or Organizations, searching by the :host_term argument ignorecase.
|
12
|
+
Set :full (second param) to `true` for full information
|
13
|
+
EODESC
|
14
|
+
task :org_by_host_like, %i[host_term full] => :environment do |_task, args|
|
15
|
+
task= Decidim::Cdtb::Multitenants::OrgByHostLike.new(args.host_term, args.full)
|
16
|
+
task.execute!
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# A set of utils to migrate from one storage service to another.
|
5
|
+
#
|
6
|
+
namespace :cdtb do
|
7
|
+
require "decidim/cdtb/tasks_utils"
|
8
|
+
include ::Decidim::Cdtb::TasksUtils
|
9
|
+
require "decidim/cdtb/storage/local_sharding"
|
10
|
+
|
11
|
+
# To migrate from S3 to local storage.
|
12
|
+
#
|
13
|
+
# Typical use case is:
|
14
|
+
# 1. aws s3 sync s3://bucket-name tmp/storage/
|
15
|
+
# 2. bin/rake cdtb:s3_to_local:do_sharding
|
16
|
+
# 3. rm -Rf tmp/cache/*
|
17
|
+
#
|
18
|
+
namespace :s3_to_local do
|
19
|
+
desc <<~EODESC
|
20
|
+
Given that all assets has already been copied from S3 to storage/, this task performs the sharding of the downloaded files.
|
21
|
+
This step is required because in S3 all assets are stored at the same level (directory), but local service stores the files with sharding.
|
22
|
+
EODESC
|
23
|
+
task do_sharding: [:environment] do
|
24
|
+
task= Decidim::Cdtb::Storage::LocalSharding.new
|
25
|
+
task.execute!
|
26
|
+
end
|
27
|
+
|
28
|
+
desc <<~EODESC
|
29
|
+
Updates all ActiveStorage::Blob rows in the DB to use the :local service.
|
30
|
+
EODESC
|
31
|
+
task set_local_service_on_blobs: [:environment] do
|
32
|
+
task= Decidim::Cdtb::Storage::SetLocalOnBlobs.new
|
33
|
+
task.execute!
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
metadata
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: decidim-cdtb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Oliver Valls
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-06-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: decidim
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.26.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.26.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rails
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '6'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: ruby-progressbar
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: decidim-dev
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.26.2
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.26.2
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: faker
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: A gem to help managing Decidim applications.
|
84
|
+
email:
|
85
|
+
- 199462+tramuntanal@users.noreply.github.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- ".node-version"
|
91
|
+
- ".rspec"
|
92
|
+
- ".rubocop.yml"
|
93
|
+
- ".ruby-version"
|
94
|
+
- CHANGELOG.md
|
95
|
+
- CODE_OF_CONDUCT.md
|
96
|
+
- Gemfile
|
97
|
+
- Gemfile.lock
|
98
|
+
- LICENSE.txt
|
99
|
+
- README.md
|
100
|
+
- Rakefile
|
101
|
+
- app/jobs/application_job.rb
|
102
|
+
- app/jobs/cdtb/fix_nickname_job.rb
|
103
|
+
- decidim-cdtb.gemspec
|
104
|
+
- lib/decidim/cdtb.rb
|
105
|
+
- lib/decidim/cdtb/engine.rb
|
106
|
+
- lib/decidim/cdtb/fixes/nickname_fixer.rb
|
107
|
+
- lib/decidim/cdtb/multitenants/org_by_host_like.rb
|
108
|
+
- lib/decidim/cdtb/storage/local_sharding.rb
|
109
|
+
- lib/decidim/cdtb/storage/set_local_on_blobs.rb
|
110
|
+
- lib/decidim/cdtb/task.rb
|
111
|
+
- lib/decidim/cdtb/tasks.rb
|
112
|
+
- lib/decidim/cdtb/tasks_utils.rb
|
113
|
+
- lib/decidim/cdtb/version.rb
|
114
|
+
- lib/tasks/anonymize.rake
|
115
|
+
- lib/tasks/cdtb.rake
|
116
|
+
- lib/tasks/multitenants.rake
|
117
|
+
- lib/tasks/storage.rake
|
118
|
+
- sig/decidim/cdtb.rbs
|
119
|
+
homepage: http://github.com/CodiTramunana/cdtb
|
120
|
+
licenses:
|
121
|
+
- MIT
|
122
|
+
metadata:
|
123
|
+
homepage_uri: http://github.com/CodiTramunana/cdtb
|
124
|
+
source_code_uri: http://github.com/CodiTramunana/cdtb
|
125
|
+
changelog_uri: http://github.com/CodiTramunana/cdtb/CHANGELOG.md
|
126
|
+
post_install_message:
|
127
|
+
rdoc_options: []
|
128
|
+
require_paths:
|
129
|
+
- lib
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: 2.7.5
|
135
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
requirements: []
|
141
|
+
rubygems_version: 3.1.6
|
142
|
+
signing_key:
|
143
|
+
specification_version: 4
|
144
|
+
summary: CodiTramuntana's Decidim Toolbelt (cdtb).
|
145
|
+
test_files: []
|