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.
@@ -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: []