decidim-cdtb 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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
@@ -0,0 +1,6 @@
1
+ module Decidim
2
+ module Cdtb
3
+ VERSION: String
4
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
5
+ end
6
+ 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: []