Files
openfoodnetwork/lib/tasks/data/anonymize_data.rake
David Cook 9c51615b03 Anonymise customer first and last names
These were added a couple of years ago in https://github.com/openfoodfoundation/openfoodnetwork/pull/8763
But I guess we never noticed the names weren't getting anonymised.

The old 'name' field is still in the DB. It was kept for compatibility during migraiton but never cleaned up. I've added the tech debt task to the welcome new devs board now: https://github.com/openfoodfoundation/openfoodnetwork/issues/8835
2024-09-16 11:42:58 +10:00

80 lines
3.1 KiB
Ruby

# frozen_string_literal: true
require 'highline'
namespace :ofn do
namespace :data do
desc 'Anonymize data'
task anonymize: :environment do
guard_and_warn
anonymize_users_data
Spree::Address.update_all("
firstname = concat('Ms. Number', id), lastname = 'Jones', phone = '01234567890',
alternative_phone = '01234567890', address1 = 'Dummy address',
address2 = 'Dummy address continuation',
company = null, latitude = null, longitude = null")
anonymize_payments_data
anonymize_payments_accounts
Spree::TokenizedPermission.update_all("token = null")
# Delete all preferences that may contain sensitive information
Spree::Preference
.where("key like '%gateway%' OR key like '%billing_integration%' OR key like '%s3%'")
.delete_all
end
def guard_and_warn
if Rails.env.production?
Rails.logger.info("This task cannot be executed in production")
exit
end
message = "\n <%= color('This will permanently change DB contents', :yellow) %>,
are you sure you want to proceed? (y/N)"
exit unless HighLine.new.agree(message) { |q| q.default = "n" }
end
private
def anonymize_users_data
Spree::User.update_all("email = concat(id, '_ofn_user@example.com'),
login = concat(id, '_ofn_user@example.com'),
unconfirmed_email = concat(id, '_ofn_user@example.com')")
Customer.where(user_id: nil)
.update_all("email = concat(id, '_ofn_customer@example.com'),
name = concat('Customer Number ', id, ' (without connected User)'),
first_name = concat('Customer Number ', id),
last_name = '(without connected User)'")
Customer.where.not(user_id: nil)
.update_all("email = concat(user_id, '_ofn_user@example.com'),
name = concat('Customer Number ', id, ' - User ', user_id),
first_name = concat('Customer Number ', id),
last_name = concat('User ', user_id)")
Spree::Order.update_all("email = concat(id, '_ofn_order@example.com')")
end
def anonymize_payments_data
Spree::PaymentMethod.update_all("name = concat('Dummy Payment Method', id),
description = name,
environment = '#{Rails.env}'")
Spree::Payment.update_all("response_code = null, avs_response = null,
cvv_response_code = null, identifier = null,
cvv_response_message = null")
Spree::CreditCard.update_all("
month = 12, year = 2020, start_month = 12, start_year = 2000,
cc_type = 'VISA', first_name = 'Dummy', last_name = 'Dummy', last_digits = '2543'")
end
def anonymize_payments_accounts
Spree::PaypalExpressCheckout.update_all("token = null")
StripeAccount.delete_all
ActiveRecord::Base.connection.execute("delete from spree_paypal_accounts")
end
end
end