iterationlabs-my_obfuscate 0.3.4 → 0.3.6
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.
- data/.gitignore +2 -0
- data/README.rdoc +2 -2
- data/iterationlabs-my_obfuscate.gemspec +2 -2
- data/lib/my_obfuscate.rb +12 -3
- data/lib/my_obfuscate/mysql.rb +3 -1
- data/lib/my_obfuscate/version.rb +1 -1
- data/spec/my_obfuscate_spec.rb +30 -2
- data/spec/mysql_spec.rb +29 -1
- metadata +8 -8
data/.gitignore
CHANGED
data/README.rdoc
CHANGED
@@ -4,7 +4,7 @@ Standalone Ruby code for the selective rewriting of SQL dumps in order to protec
|
|
4
4
|
|
5
5
|
= Install
|
6
6
|
|
7
|
-
sudo gem install my_obfuscate
|
7
|
+
(sudo) gem install iterationlabs-my_obfuscate
|
8
8
|
|
9
9
|
= Example Usage
|
10
10
|
|
@@ -53,7 +53,7 @@ And to get an obfuscated dump:
|
|
53
53
|
mysqldump -c --add-drop-table -u user -ppassword database | ruby obfuscator.rb > obfuscated_dump.sql
|
54
54
|
|
55
55
|
Note that the -c option on mysqldump is required to use my_obfuscator. If you get MySQL errors due to very long lines,
|
56
|
-
try some combination of
|
56
|
+
try some combination of --max_allowed_packet=128M, --single-transaction, --skip-extended-insert, and --quick.
|
57
57
|
|
58
58
|
== Database Server
|
59
59
|
|
@@ -9,11 +9,11 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.authors = ["Andrew Cantino", "Dave Willett", "Mike Grafton", "Mason Glaves", "Greg Bell", "Mavenlink"]
|
10
10
|
s.description = %q{Standalone Ruby code for the selective rewriting of MySQL dumps in order to protect user privacy.}
|
11
11
|
s.email = %q{andrew@iterationlabs.com}
|
12
|
-
s.homepage = %q{http://github.com/iterationlabs/
|
12
|
+
s.homepage = %q{http://github.com/iterationlabs/my_obfuscate}
|
13
13
|
s.summary = %q{Standalone Ruby code for the selective rewriting of MySQL dumps in order to protect user privacy.}
|
14
14
|
|
15
15
|
s.add_development_dependency "rspec"
|
16
|
-
s.add_dependency "faker", "
|
16
|
+
s.add_dependency "faker", ">= 1.0.1"
|
17
17
|
|
18
18
|
s.files = `git ls-files`.split("\n")
|
19
19
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/my_obfuscate.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
require 'jcode' if RUBY_VERSION < '1.9'
|
2
2
|
require 'faker'
|
3
|
-
require 'my_obfuscate/mysql'
|
4
|
-
require 'my_obfuscate/sql_server'
|
5
3
|
|
6
4
|
# Class for obfuscating MySQL dumps. This can parse mysqldump outputs when using the -c option, which includes
|
7
5
|
# column names in the insert statements.
|
@@ -110,7 +108,7 @@ class MyObfuscate
|
|
110
108
|
|
111
109
|
row[index.to_i] = case definition[:type]
|
112
110
|
when :email
|
113
|
-
|
111
|
+
clean_quotes(Faker::Internet.email)
|
114
112
|
when :string
|
115
113
|
random_string(definition[:length] || 30, definition[:chars] || SENSIBLE_CHARS)
|
116
114
|
when :lorem
|
@@ -133,6 +131,14 @@ class MyObfuscate
|
|
133
131
|
Faker::Address.zip_code
|
134
132
|
when :phone
|
135
133
|
Faker::PhoneNumber.phone_number
|
134
|
+
when :company
|
135
|
+
clean_bad_whitespace(clean_quotes(Faker::Company.name))
|
136
|
+
when :ipv4
|
137
|
+
Faker::Internet.ip_v4_address
|
138
|
+
when :ipv6
|
139
|
+
Faker::Internet.ip_v6_address
|
140
|
+
when :url
|
141
|
+
clean_bad_whitespace(Faker::Internet.url)
|
136
142
|
when :integer
|
137
143
|
random_integer(definition[:between] || (0..1000)).to_s
|
138
144
|
when :fixed
|
@@ -211,3 +217,6 @@ class MyObfuscate
|
|
211
217
|
value.gsub(/[\n\t\r]/, '')
|
212
218
|
end
|
213
219
|
end
|
220
|
+
|
221
|
+
require 'my_obfuscate/mysql'
|
222
|
+
require 'my_obfuscate/sql_server'
|
data/lib/my_obfuscate/mysql.rb
CHANGED
data/lib/my_obfuscate/version.rb
CHANGED
data/spec/my_obfuscate_spec.rb
CHANGED
@@ -27,7 +27,7 @@ describe MyObfuscate do
|
|
27
27
|
it "should work on email addresses" do
|
28
28
|
new_row = MyObfuscate.apply_table_config(["blah", "something_else"], {:a => {:type => :email}}, [:a, :b])
|
29
29
|
new_row.length.should == 2
|
30
|
-
new_row.first.should =~
|
30
|
+
new_row.first.should =~ /^[\w\.]+\@\w+\.\w+$/
|
31
31
|
end
|
32
32
|
|
33
33
|
it "should work on strings" do
|
@@ -174,6 +174,34 @@ describe MyObfuscate do
|
|
174
174
|
new_row[1].should =~ /\w\.(?!\Z)/
|
175
175
|
end
|
176
176
|
|
177
|
+
it "should be able to generate an :company" do
|
178
|
+
new_row = MyObfuscate.apply_table_config(["Smith and Sons", "something_else", "5"], {:a => :company}, [:a, :b, :c])
|
179
|
+
new_row.length.should == 3
|
180
|
+
new_row[0].should_not == "Smith and Sons"
|
181
|
+
new_row[0].should =~ /\w+/
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should be able to generate an :url" do
|
185
|
+
new_row = MyObfuscate.apply_table_config(["http://mystuff.blogger.com", "something_else", "5"], {:a => :url}, [:a, :b, :c])
|
186
|
+
new_row.length.should == 3
|
187
|
+
new_row[0].should_not == "http://mystuff.blogger.com"
|
188
|
+
new_row[0].should =~ /http:\/\/\w+/
|
189
|
+
end
|
190
|
+
|
191
|
+
it "should be able to generate an :ipv4" do
|
192
|
+
new_row = MyObfuscate.apply_table_config(["1.2.3.4", "something_else", "5"], {:a => :ipv4}, [:a, :b, :c])
|
193
|
+
new_row.length.should == 3
|
194
|
+
new_row[0].should_not == "1.2.3.4"
|
195
|
+
new_row[0].should =~ /\d+\.\d+\.\d+\.\d+/
|
196
|
+
end
|
197
|
+
|
198
|
+
it "should be able to generate an :ipv6" do
|
199
|
+
new_row = MyObfuscate.apply_table_config(["fe80:0000:0000:0000:0202:b3ff:fe1e:8329", "something_else", "5"], {:a => :ipv6}, [:a, :b, :c])
|
200
|
+
new_row.length.should == 3
|
201
|
+
new_row[0].should_not == "fe80:0000:0000:0000:0202:b3ff:fe1e:8329"
|
202
|
+
new_row[0].should =~ /[0-9a-f:]+/
|
203
|
+
end
|
204
|
+
|
177
205
|
it "should be able to generate an :address" do
|
178
206
|
new_row = MyObfuscate.apply_table_config(["blah", "something_else", "5"], {:a => :address}, [:a, :b, :c])
|
179
207
|
new_row.length.should == 3
|
@@ -528,4 +556,4 @@ describe MyObfuscate do
|
|
528
556
|
end
|
529
557
|
end
|
530
558
|
end
|
531
|
-
end
|
559
|
+
end
|
data/spec/mysql_spec.rb
CHANGED
@@ -46,5 +46,33 @@ describe MyObfuscate::Mysql do
|
|
46
46
|
fields = [[nil, '', '', '', '25', '2', '', "hi", '']]
|
47
47
|
subject.rows_to_be_inserted(string).should == fields
|
48
48
|
end
|
49
|
+
|
50
|
+
it "should work with hex encoded blobs" do
|
51
|
+
string = "INSERT INTO `some_table` (thing1,thing2) VALUES ('bla' , 'blobdata', 'blubb' , 0xACED00057372001F6A6176612E7574696C2E436F6C6C656) ;"
|
52
|
+
fields = [['bla', 'blobdata', 'blubb', '0xACED00057372001F6A6176612E7574696C2E436F6C6C656']]
|
53
|
+
subject.rows_to_be_inserted(string).should == fields
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "#make_valid_value_string" do
|
58
|
+
it "should work with nil values" do
|
59
|
+
value = nil
|
60
|
+
subject.make_valid_value_string(value).should == 'NULL'
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should work with hex-encoded blob data" do
|
64
|
+
value = "0xACED00057372001F6A6176612E7574696C2E436F6C6C656"
|
65
|
+
subject.make_valid_value_string(value).should == '0xACED00057372001F6A6176612E7574696C2E436F6C6C656'
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should quote hex-encoded ALIKE data" do
|
69
|
+
value = "40x17x7"
|
70
|
+
subject.make_valid_value_string(value).should == "'40x17x7'"
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should quote all other values" do
|
74
|
+
value = "hello world"
|
75
|
+
subject.make_valid_value_string(value).should == "'hello world'"
|
76
|
+
end
|
49
77
|
end
|
50
|
-
end
|
78
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iterationlabs-my_obfuscate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2012-
|
17
|
+
date: 2012-05-15 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: rspec
|
@@ -37,17 +37,17 @@ dependencies:
|
|
37
37
|
requirement: !ruby/object:Gem::Requirement
|
38
38
|
none: false
|
39
39
|
requirements:
|
40
|
-
- - '
|
40
|
+
- - ! '>='
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: 0.
|
42
|
+
version: 1.0.1
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
none: false
|
47
47
|
requirements:
|
48
|
-
- - '
|
48
|
+
- - ! '>='
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
version: 0.
|
50
|
+
version: 1.0.1
|
51
51
|
description: Standalone Ruby code for the selective rewriting of MySQL dumps in order
|
52
52
|
to protect user privacy.
|
53
53
|
email: andrew@iterationlabs.com
|
@@ -69,7 +69,7 @@ files:
|
|
69
69
|
- spec/mysql_spec.rb
|
70
70
|
- spec/spec_helper.rb
|
71
71
|
- spec/sql_server_spec.rb
|
72
|
-
homepage: http://github.com/iterationlabs/
|
72
|
+
homepage: http://github.com/iterationlabs/my_obfuscate
|
73
73
|
licenses: []
|
74
74
|
post_install_message:
|
75
75
|
rdoc_options: []
|
@@ -89,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
89
89
|
version: '0'
|
90
90
|
requirements: []
|
91
91
|
rubyforge_project:
|
92
|
-
rubygems_version: 1.8.
|
92
|
+
rubygems_version: 1.8.24
|
93
93
|
signing_key:
|
94
94
|
specification_version: 3
|
95
95
|
summary: Standalone Ruby code for the selective rewriting of MySQL dumps in order
|