Skip to content

Instantly share code, notes, and snippets.

@petebytes
Created July 2, 2021 21:15
Show Gist options
  • Save petebytes/da1a508352b4df05d210b71631b9f455 to your computer and use it in GitHub Desktop.
Save petebytes/da1a508352b4df05d210b71631b9f455 to your computer and use it in GitHub Desktop.
DataAnon
require 'data-anonymization'
DataAnon::Utils::Logging.logger.level = Logger::INFO
class MyRandomEmail
TLDS = ['com','org','net','edu','gov','mil','biz','info', 'io']
HOSTNAMES = ['google', 'outlook', 'hotmail']
def initialize hostname = nil, tld = nil
@hostname = hostname
@tld = tld
end
def anonymize field
username_length = DataAnon::Utils::RandomInt.generate(5,15)
host_name_length = DataAnon::Utils::RandomInt.generate(2,10)
username = DataAnon::Utils::RandomString.generate(username_length)
# hostname = @hostname || DataAnon::Utils::RandomString.generate(host_name_length)
hostname = @hostname || HOSTNAMES[rand(HOSTNAMES.length)]
tld = @tld || TLDS[rand(TLDS.length)]
return (username + "@" + hostname + "." + tld).downcase.to_s
end
end
database 'myco_dev' do
strategy DataAnon::Strategy::Blacklist
source_db({:adapter => 'postgresql', :host => 'localhost', :port => 5432, :pool => 5, :username => 'myuser', :password => 'secretpass', :database => 'myco_dev'})
table 'users' do
primary_key 'id'
anonymize('email').using MyRandomEmail.new
anonymize('dwolla_email').using MyRandomEmail.new
anonymize('payment_email').using MyRandomEmail.new
anonymize('name').using FieldStrategy::StringTemplate.new('user#{row_number}')
anonymize('title').using FieldStrategy::RandomString.new
anonymize('encrypted_password') { |field| "$##########################" }
anonymize('invitation_token') { |field| "" }
anonymize('authentication_token') { |field| "" }
anonymize('fb_token') { |field| "" }
end
table 'user_demographics' do
primary_key 'id'
anonymize('city').using FieldStrategy::RandomCity.region_US
anonymize('income').using FieldStrategy::RandomInteger.new(6000,7000000)
end
table 'devices' do
primary_key 'id'
anonymize('androic_id').using FieldStrategy::RandomString.new
end
table 'orders' do
primary_key 'id'
anonymize('first_name').using FieldStrategy::RandomFirstName.new
anonymize('last_name').using FieldStrategy::RandomLastName.new
anonymize('address_name').using FieldStrategy::RandomFullName.new
anonymize('address_street').using FieldStrategy::RandomAddress.region_US
anonymize('address_city').using FieldStrategy::RandomCity.region_US
anonymize('payer_email').using MyRandomEmail.new
anonymize('transaction_id').using FieldStrategy::RandomString.new
end
table 'payment_notifications' do
primary_key 'id'
anonymize('params').using FieldStrategy::RandomString.new
anonymize('transaction_id').using FieldStrategy::RandomString.new
end
table 'comments' do
primary_key 'id'
anonymize('comment').using FieldStrategy::RandomString.new
end
table 'reviews' do
primary_key 'id'
anonymize('body').using FieldStrategy::RandomString.new
anonymize('useful_text').using FieldStrategy::RandomString.new
anonymize('easytolearn_text').using FieldStrategy::RandomString.new
anonymize('easytouse_text').using FieldStrategy::RandomString.new
anonymize('stable_text').using FieldStrategy::RandomString.new
anonymize('trustworthy_text').using FieldStrategy::RandomString.new
anonymize('original_text').using FieldStrategy::RandomString.new
anonymize('durable_text').using FieldStrategy::RandomString.new
anonymize('fun_text').using FieldStrategy::RandomString.new
anonymize('attractive_text').using FieldStrategy::RandomString.new
anonymize('app_icon_text').using FieldStrategy::RandomString.new
anonymize('app_icon_a_text').using FieldStrategy::RandomString.new
anonymize('app_icon_b_text').using FieldStrategy::RandomString.new
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment