mop 0.0.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.
- data/.gemspec +42 -0
- data/.rspec +2 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +151 -0
- data/Guardfile +4 -0
- data/README.md +103 -0
- data/README.md.erb +38 -0
- data/Rakefile +6 -0
- data/acceptance-test +3 -0
- data/bin/mop +3 -0
- data/edit +3 -0
- data/lib/mop.rb +63 -0
- data/lib/mop/version.rb +3 -0
- data/pkg/mop-0.0.1.gem +0 -0
- data/test/cases.yml +97 -0
- data/test/mop_test.rb +52 -0
- data/test/test_helper.rb +5 -0
- metadata +103 -0
data/.gemspec
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.unshift './lib'
|
3
|
+
require 'mop/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |gem|
|
6
|
+
gem.name = "mop"
|
7
|
+
gem.version = Mop::VERSION
|
8
|
+
gem.authors = %w(☈king)
|
9
|
+
gem.email = %w(rking-mop@sharpsaw.org)
|
10
|
+
gem.summary = %q{Make OK for Public: Clean up sensitive info from a file before jisting}
|
11
|
+
gem.description = <<-EOT
|
12
|
+
A simplistic pre-filter (not (yet) a substitute for manual examination).
|
13
|
+
|
14
|
+
Usage
|
15
|
+
=====
|
16
|
+
|
17
|
+
mop < /var/log/nginx/error_log > cleaned_file
|
18
|
+
vim cleaned_file # check for anything it might've missed
|
19
|
+
jist -co cleaned_file # upload, copy its URL to clipboard, open in browser
|
20
|
+
|
21
|
+
Note
|
22
|
+
====
|
23
|
+
|
24
|
+
This thing is really in its beginning phases. It currently:
|
25
|
+
|
26
|
+
* Deletes too much
|
27
|
+
* Leaves too much
|
28
|
+
|
29
|
+
However, all [Issues](https://github.com/rking/mop/issues) will be addressed.
|
30
|
+
Just file 'em.'
|
31
|
+
EOT
|
32
|
+
gem.homepage = 'https://github.com/rking/mop'
|
33
|
+
gem.files = `git ls-files`.split($/)
|
34
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{|f| File.basename f}
|
35
|
+
gem.test_files = gem.files.grep %r{^ test|spec|features/}
|
36
|
+
gem.require_paths = ['lib']
|
37
|
+
|
38
|
+
%w(
|
39
|
+
jist
|
40
|
+
).each do |dep| gem.add_dependency dep end
|
41
|
+
gem.add_development_dependency 'working'
|
42
|
+
end
|
data/.rspec
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
mop (0.0.1)
|
5
|
+
jist
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
ansi (1.4.3)
|
11
|
+
awesome_print (1.1.0)
|
12
|
+
beg (0.0.3)
|
13
|
+
guard
|
14
|
+
binding_of_caller (0.6.8)
|
15
|
+
bond (0.4.3)
|
16
|
+
childprocess (0.3.6)
|
17
|
+
ffi (~> 1.0, >= 1.0.6)
|
18
|
+
coderay (1.0.8)
|
19
|
+
columnize (0.3.6)
|
20
|
+
debugger (1.2.3)
|
21
|
+
columnize (>= 0.3.1)
|
22
|
+
debugger-linecache (~> 1.1.1)
|
23
|
+
debugger-ruby_core_source (~> 1.1.5)
|
24
|
+
debugger-linecache (1.1.2)
|
25
|
+
debugger-ruby_core_source (>= 1.1.1)
|
26
|
+
debugger-ruby_core_source (1.1.6)
|
27
|
+
diff-lcs (1.1.3)
|
28
|
+
diffy (2.1.3)
|
29
|
+
ffi (1.2.0)
|
30
|
+
grit (2.5.0)
|
31
|
+
diff-lcs (~> 1.1)
|
32
|
+
mime-types (~> 1.15)
|
33
|
+
posix-spawn (~> 0.3.6)
|
34
|
+
guard (1.6.1)
|
35
|
+
listen (>= 0.6.0)
|
36
|
+
lumberjack (>= 1.0.2)
|
37
|
+
pry (>= 0.9.10)
|
38
|
+
thor (>= 0.14.6)
|
39
|
+
guard-bundler (1.0.0)
|
40
|
+
bundler (~> 1.0)
|
41
|
+
guard (~> 1.1)
|
42
|
+
guard-spork (1.4.0)
|
43
|
+
childprocess (>= 0.2.3)
|
44
|
+
guard (>= 1.1)
|
45
|
+
spork (>= 0.8.4)
|
46
|
+
guard-sporkminitest (0.0.2)
|
47
|
+
guard
|
48
|
+
guard-spork
|
49
|
+
rb-fsevent
|
50
|
+
rb-inotify
|
51
|
+
spork-minitest
|
52
|
+
interception (0.3)
|
53
|
+
jist (1.4.0)
|
54
|
+
json
|
55
|
+
json (1.7.6)
|
56
|
+
listen (0.7.0)
|
57
|
+
lumberjack (1.0.2)
|
58
|
+
method_source (0.8.1)
|
59
|
+
mime-types (1.19)
|
60
|
+
minitest (4.3.3)
|
61
|
+
nokogiri (1.5.6)
|
62
|
+
posix-spawn (0.3.6)
|
63
|
+
pry (0.9.11)
|
64
|
+
coderay (~> 1.0.5)
|
65
|
+
method_source (~> 0.8)
|
66
|
+
slop (~> 3.3.1)
|
67
|
+
pry-awesome_print (9.6.5)
|
68
|
+
awesome_print (~> 1.1.0)
|
69
|
+
pry-de (0.1.0)
|
70
|
+
guard
|
71
|
+
pry-full
|
72
|
+
pry-debugger (0.2.1)
|
73
|
+
debugger (~> 1.2.0)
|
74
|
+
pry (~> 0.9.10)
|
75
|
+
pry-developer_tools (0.1.1)
|
76
|
+
pry (>= 0.9.8.pre, < 0.11)
|
77
|
+
pry-doc (0.4.4)
|
78
|
+
pry (>= 0.9.9.6)
|
79
|
+
yard (~> 0.8.1)
|
80
|
+
pry-docmore (0.0.3)
|
81
|
+
pry
|
82
|
+
pry-doc
|
83
|
+
pry-editline (1.1.1)
|
84
|
+
pry-exception_explorer (0.2.3)
|
85
|
+
pry-stack_explorer (>= 0.4.6)
|
86
|
+
pry-full (1.2.0)
|
87
|
+
pry-awesome_print
|
88
|
+
pry-developer_tools
|
89
|
+
pry-editline
|
90
|
+
pry-git
|
91
|
+
pry-highlight
|
92
|
+
pry-plus
|
93
|
+
pry-pretty-numeric
|
94
|
+
pry-syntax-hacks
|
95
|
+
pry-theme
|
96
|
+
pry-git (0.2.3)
|
97
|
+
diffy
|
98
|
+
grit
|
99
|
+
pry (>= 0.9.8)
|
100
|
+
pry-highlight (0.0.1)
|
101
|
+
coderay
|
102
|
+
json
|
103
|
+
nokogiri
|
104
|
+
pry
|
105
|
+
pry-plus (0.2.0)
|
106
|
+
bond
|
107
|
+
jist
|
108
|
+
pry-debugger
|
109
|
+
pry-doc
|
110
|
+
pry-docmore
|
111
|
+
pry-exception_explorer
|
112
|
+
pry-rescue
|
113
|
+
pry-stack_explorer
|
114
|
+
pry-pretty-numeric (0.1.1)
|
115
|
+
pry
|
116
|
+
pry-rescue (0.14)
|
117
|
+
interception (>= 0.3)
|
118
|
+
pry
|
119
|
+
pry-stack_explorer (0.4.7)
|
120
|
+
binding_of_caller (~> 0.6.8)
|
121
|
+
pry-syntax-hacks (0.0.6)
|
122
|
+
pry (>= 0.9.8)
|
123
|
+
pry-theme (0.1.3)
|
124
|
+
json
|
125
|
+
rake (10.0.3)
|
126
|
+
rb-fsevent (0.9.3)
|
127
|
+
rb-inotify (0.8.8)
|
128
|
+
ffi (>= 0.5.0)
|
129
|
+
slop (3.3.3)
|
130
|
+
spork (0.9.2)
|
131
|
+
spork-minitest (0.0.3)
|
132
|
+
spork
|
133
|
+
thor (0.16.0)
|
134
|
+
turn (0.9.6)
|
135
|
+
ansi
|
136
|
+
working (0.0.7)
|
137
|
+
beg
|
138
|
+
guard-bundler
|
139
|
+
guard-sporkminitest
|
140
|
+
minitest
|
141
|
+
pry-de
|
142
|
+
rake
|
143
|
+
turn
|
144
|
+
yard (0.8.3)
|
145
|
+
|
146
|
+
PLATFORMS
|
147
|
+
ruby
|
148
|
+
|
149
|
+
DEPENDENCIES
|
150
|
+
mop!
|
151
|
+
working
|
data/Guardfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
mop
|
2
|
+
===
|
3
|
+
|
4
|
+
Make OK for Public. A simplistic pre-filter (not (yet) a substitute for manual
|
5
|
+
examination).
|
6
|
+
|
7
|
+
Usage
|
8
|
+
-----
|
9
|
+
|
10
|
+
mop < /var/log/nginx/error_log > cleaned_file
|
11
|
+
vim cleaned_file # check for anything it might've missed
|
12
|
+
jist -co cleaned_file # upload, copy its URL to clipboard, open in browser
|
13
|
+
|
14
|
+
Note
|
15
|
+
----
|
16
|
+
|
17
|
+
This thing is really in its beginning phases. It currently:
|
18
|
+
|
19
|
+
* Deletes too much
|
20
|
+
* Leaves too much
|
21
|
+
|
22
|
+
However, all [Issues](https://github.com/rking/mop/issues) will be addressed.
|
23
|
+
Just file 'em.'
|
24
|
+
|
25
|
+
Currently Works With
|
26
|
+
--------------------
|
27
|
+
|
28
|
+
- Passwords
|
29
|
+
- `"password: secr3t"` ⇒ `"password: hiddenpass"`
|
30
|
+
- `"password: secr3t"` ⇒ `"password: hiddenpass"`
|
31
|
+
- `"password:\n\tsecr3t"` ⇒ `"password:\n\thiddenpass"`
|
32
|
+
- `"password: 'secr3t'"` ⇒ `"password: hiddenpass"`
|
33
|
+
- `"password:secr3t"` ⇒ `"password:hiddenpass"`
|
34
|
+
- `"passwd:secr3t"` ⇒ `"passwd:hiddenpass"`
|
35
|
+
- `"passwd: secr3t"` ⇒ `"passwd: hiddenpass"`
|
36
|
+
- `"password=secr3t"` ⇒ `"password=hiddenpass"`
|
37
|
+
- `"passwd=secr3t"` ⇒ `"passwd=hiddenpass"`
|
38
|
+
- `"password=\"secr3t\""` ⇒ `"password=hiddenpass"`
|
39
|
+
- `"buzbuz password: secr3t bizbiz"` ⇒ `"buzbuz password: hiddenpass bizbiz"`
|
40
|
+
- `"buzbuz password: secr3t bizbiz another password: secr4t bazbaz"` ⇒ `"buzbuz password: hiddenpass bizbiz another password: hiddenpass bazbaz"`
|
41
|
+
- `"USER: user55 PASS: secr3t"` ⇒ `"USER: hiddenuser PASS: hiddenpass"`
|
42
|
+
- `"U/N: user55 P/W: secr3t"` ⇒ `"U/N: hiddenuser P/W: hiddenpass"`
|
43
|
+
- `"U: user55 P: secr3t"` ⇒ `"U: hiddenuser P: hiddenpass"`
|
44
|
+
- `"U=user55 P=secr3t"` ⇒ `"U=hiddenuser P=hiddenpass"`
|
45
|
+
- `"u=user55 p=secr3t"` ⇒ `"u=hiddenuser p=hiddenpass"`
|
46
|
+
- `"u: user55 p: secr3t"` ⇒ `"u: hiddenuser p: hiddenpass"`
|
47
|
+
- `"L=user55 P=secr3t"` ⇒ `"L=hiddenuser P=hiddenpass"`
|
48
|
+
- Users
|
49
|
+
- `"user: user55"` ⇒ `"user: hiddenuser"`
|
50
|
+
- `"User=user55"` ⇒ `"User=hiddenuser"`
|
51
|
+
- `"/Users/user55"` ⇒ `"hiddenuser"`
|
52
|
+
- `"/home/user55"` ⇒ `"hiddenuser"`
|
53
|
+
- IPv4 Addresses
|
54
|
+
- `"1.2.3.4"` ⇒ `"XX.YY.ZZ.AA"`
|
55
|
+
- `"asdf 1.2.3.4 asdf"` ⇒ `"asdf XX.YY.ZZ.AA asdf"`
|
56
|
+
- `"1.2.3.4:22"` ⇒ `"XX.YY.ZZ.AA:22"`
|
57
|
+
- `"123.45.67.89"` ⇒ `"XX.YY.ZZ.AA"`
|
58
|
+
- `"0.0.0.0"` _(unchanged)_
|
59
|
+
- `"127.0.0.1"` _(unchanged)_
|
60
|
+
- IPv6 Addresses (probably many patterns TODO on this one)
|
61
|
+
- `"21:43:6f:1a:f6:f6"` ⇒ `"aa:bb:cc:dd:ee:ff"`
|
62
|
+
- Capistrano's `deploy.rb`
|
63
|
+
- `"host_name: 'shouldhide'"` ⇒ `"host_name: caphidden"`
|
64
|
+
- `"host_name: \"shouldhide\""` ⇒ `"host_name: caphidden"`
|
65
|
+
- `":host_name => 'shouldhide'"` ⇒ `":host_name => caphidden"`
|
66
|
+
- `":host_name, 'shouldhide'"` ⇒ `":host_name, caphidden"`
|
67
|
+
- `":port => 'shouldhide'"` ⇒ `":port => caphidden"`
|
68
|
+
- `"deploy_to, 'shouldhide'"` ⇒ `"deploy_to, caphidden"`
|
69
|
+
- `"server 'shouldhide', …"` ⇒ `"server capserver …"`
|
70
|
+
- `"set :application, \"shouldhide\""` ⇒ `"set :application, caphidden"`
|
71
|
+
- `"set :user, \"shouldhide\""` ⇒ `"set :user, hiddenuser"`
|
72
|
+
- `"server without comma"` _(unchanged)_
|
73
|
+
- `"portage"` _(unchanged)_
|
74
|
+
- /etc/passwd having "fakeuser" and "fakeuser2"
|
75
|
+
- `"foo bar fakeuser baz"` ⇒ `"foo bar hiddenuser baz"`
|
76
|
+
- `"~/fakeuser"` ⇒ `"~/hiddenuser"`
|
77
|
+
- `"/home/fakeuser/.foo"` ⇒ `"hiddenuser"`
|
78
|
+
- `"fakeuser2"` ⇒ `"hiddenuser"`
|
79
|
+
- `"cron"` _(unchanged)_
|
80
|
+
- `"root"` _(unchanged)_
|
81
|
+
- hostname being 'gargantatron'
|
82
|
+
- `"gargantatron"` ⇒ `"hiddenhost"`
|
83
|
+
- Git repos
|
84
|
+
- `"git@github.com/username/reponame.git"` ⇒ `"git@github.com/hiddenrepo"`
|
85
|
+
- `"git@github.com/username/reponame"` ⇒ `"git@github.com/hiddenrepo"`
|
86
|
+
- `"git@github.com:username/reponame"` ⇒ `"git@github.com:hiddenrepo"`
|
87
|
+
- `"https://github.com/username/reponame"` ⇒ `"https://github.com/hiddenrepo"`
|
88
|
+
- `"http://github.com/username/reponame"` ⇒ `"http://github.com/hiddenrepo"`
|
89
|
+
- `"git://github.com/username/reponame"` ⇒ `"git://github.com/hiddenrepo"`
|
90
|
+
- `"http://someotherhost.net/reponame.git"` ⇒ `"http://hiddenrepo"`
|
91
|
+
- SSH
|
92
|
+
- `"ssh://user55@secrethost/path/to/reponame.git/"` ⇒ `"ssh://hiddensshurl"`
|
93
|
+
|
94
|
+
|
95
|
+
TODO
|
96
|
+
----
|
97
|
+
|
98
|
+
- Add -j for ConradIrwin's `jist` gem
|
99
|
+
- Make distinct (similar to an uglifier's symbol replacement)
|
100
|
+
- first.host.name ⇒ hiddenhostname1
|
101
|
+
- second.host.name ⇒ hiddenhostname2
|
102
|
+
- Learn more about IPv6 Addresses
|
103
|
+
- Dorky ISP-given hostnames that show IP addresses
|
data/README.md.erb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
mop
|
2
|
+
===
|
3
|
+
|
4
|
+
Make OK for Public. A simplistic pre-filter (not (yet) a substitute for manual
|
5
|
+
examination).
|
6
|
+
|
7
|
+
Usage
|
8
|
+
-----
|
9
|
+
|
10
|
+
mop < /var/log/nginx/error_log > cleaned_file
|
11
|
+
vim cleaned_file # check for anything it might've missed
|
12
|
+
jist -co cleaned_file # upload, copy its URL to clipboard, open in browser
|
13
|
+
|
14
|
+
Note
|
15
|
+
----
|
16
|
+
|
17
|
+
This thing is really in its beginning phases. It currently:
|
18
|
+
|
19
|
+
* Deletes too much
|
20
|
+
* Leaves too much
|
21
|
+
|
22
|
+
However, all [Issues](https://github.com/rking/mop/issues) will be addressed.
|
23
|
+
Just file 'em.'
|
24
|
+
|
25
|
+
Currently Works With
|
26
|
+
--------------------
|
27
|
+
|
28
|
+
<%= actual_results %>
|
29
|
+
|
30
|
+
TODO
|
31
|
+
----
|
32
|
+
|
33
|
+
- Add -j for ConradIrwin's `jist` gem
|
34
|
+
- Make distinct (similar to an uglifier's symbol replacement)
|
35
|
+
- first.host.name ⇒ hiddenhostname1
|
36
|
+
- second.host.name ⇒ hiddenhostname2
|
37
|
+
- Learn more about IPv6 Addresses
|
38
|
+
- Dorky ISP-given hostnames that show IP addresses
|
data/Rakefile
ADDED
data/acceptance-test
ADDED
data/bin/mop
ADDED
data/edit
ADDED
data/lib/mop.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
class Mop
|
2
|
+
IPv4_ADDRESSES = %r/((\d+\.){3}\d+)/
|
3
|
+
HEXDIGIT = %r/[a-z0-9]/i # XXX a-f
|
4
|
+
IPv6_ADDRESSES = %r/((#{HEXDIGIT}+:){5}#{HEXDIGIT}+)/
|
5
|
+
EQUATE = %r/\s*(?:=>|[:=]|,)\s*/
|
6
|
+
USER_EQUALS = %r/(user#{EQUATE})\S+/i
|
7
|
+
HOME_DIRS = %r((/(?:Users|home)/)\S+) # not worried about spaces in usernames.
|
8
|
+
USER_PATTERN = %r/(?:#{USER_EQUALS}|#{HOME_DIRS})/
|
9
|
+
PASSWORD_EQUALS = %r/(passw?(or)?d?#{EQUATE})\S+/i
|
10
|
+
UN = %r[\b(?:[ul]\/?n?)\b]i
|
11
|
+
PW = %r[\b(?:p\/?w?)\b]i
|
12
|
+
USERNAME_AND_PASSWORD = %r/(#{UN}#{EQUATE})\S+(\s*#{PW}#{EQUATE})\S+/
|
13
|
+
GITHUB_URL = %r[((?:git@|(?:https?|git)://)github.com[:/])[^/]+/.+(\.git)?]i
|
14
|
+
GIT_URL = %r[(ssh|git|https?|ftp|rsync)://\S+(\.git)]
|
15
|
+
SSH_URL = %r[(ssh://)\S+]i
|
16
|
+
CAPISTRANO_KEYWORDS = %r/((?:host_name|port|deploy_to|application)(?:#{EQUATE}))\S+/
|
17
|
+
CAPISTRANO_SERVER = %r/(\bserver\s+)\S+,/
|
18
|
+
|
19
|
+
def self.wipe input
|
20
|
+
cleanups = username_cleanups + [
|
21
|
+
hostname_cleanup,
|
22
|
+
[ IPv4_ADDRESSES, -> { check_address $1 } ],
|
23
|
+
[ IPv6_ADDRESSES, -> { 'aa:bb:cc:dd:ee:ff' } ],
|
24
|
+
[ USER_PATTERN, -> { "#$1hiddenuser" } ],
|
25
|
+
[ PASSWORD_EQUALS, -> { "#$1hiddenpass" } ],
|
26
|
+
[ USERNAME_AND_PASSWORD, -> { "#$1hiddenuser#$2hiddenpass" } ],
|
27
|
+
[ GITHUB_URL, -> { "#$1hiddenrepo#$2" } ],
|
28
|
+
[ GIT_URL, -> { "#$1://hiddenrepo" } ],
|
29
|
+
[ SSH_URL, -> { "#$1hiddensshurl" } ],
|
30
|
+
[ CAPISTRANO_KEYWORDS, -> { "#$1caphidden" } ],
|
31
|
+
[ CAPISTRANO_SERVER, -> { "#$1capserver" } ],
|
32
|
+
]
|
33
|
+
cleanups.inject input do |result, xform|
|
34
|
+
result.gsub xform[0] do xform[1].call end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.username_cleanups
|
39
|
+
users = read_etc_passwd.split(/\n/).map do |e|
|
40
|
+
username, archaic, uid, *junk = e.split ':'
|
41
|
+
uid.to_i >= 1000 and username
|
42
|
+
end.compact
|
43
|
+
users.map do |e|
|
44
|
+
[ %r/\b#{e}\b/, -> { 'hiddenuser' } ]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
def self.read_etc_passwd; File.read '/etc/passwd' end
|
48
|
+
|
49
|
+
def self.hostname_cleanup
|
50
|
+
[ %r/\b#{find_hostname}\b/, -> { 'hiddenhost' } ]
|
51
|
+
end
|
52
|
+
def self.find_hostname; `hostname`.chomp || 'weird, no hostname' end
|
53
|
+
|
54
|
+
PASSTHRU_ADDRESSES = %w(127.0.0.1 0.0.0.0)
|
55
|
+
def self.check_address addr
|
56
|
+
if PASSTHRU_ADDRESSES.include? addr
|
57
|
+
addr
|
58
|
+
else
|
59
|
+
'XX.YY.ZZ.AA'
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
data/lib/mop/version.rb
ADDED
data/pkg/mop-0.0.1.gem
ADDED
Binary file
|
data/test/cases.yml
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
fake passwd file: |
|
2
|
+
root:x:0:0:root:/root:/bin/zsh
|
3
|
+
cron:x:16:16:added by portage for cronbase:/var/spool/cron:/sbin/nologin
|
4
|
+
fakeuser:x:1000:1000::/home/fakeuser:/bin/zsh
|
5
|
+
fakeuser2:x:1001:1001::/home/fakeuser2:/bin/zsh
|
6
|
+
fake hostname: gargantatron
|
7
|
+
Passwords:
|
8
|
+
- filter: [ secr3t, secr4t ]
|
9
|
+
from:
|
10
|
+
- 'password: secr3t'
|
11
|
+
- 'password: secr3t'
|
12
|
+
- "password:\n\tsecr3t"
|
13
|
+
- "password: 'secr3t'"
|
14
|
+
- 'password:secr3t'
|
15
|
+
- 'passwd:secr3t'
|
16
|
+
- 'passwd: secr3t'
|
17
|
+
- password=secr3t
|
18
|
+
- passwd=secr3t
|
19
|
+
- password="secr3t"
|
20
|
+
- 'buzbuz password: secr3t bizbiz'
|
21
|
+
- 'buzbuz password: secr3t bizbiz another password: secr4t bazbaz'
|
22
|
+
- 'USER: user55 PASS: secr3t'
|
23
|
+
- 'U/N: user55 P/W: secr3t'
|
24
|
+
- 'U: user55 P: secr3t'
|
25
|
+
- U=user55 P=secr3t
|
26
|
+
- u=user55 p=secr3t
|
27
|
+
- 'u: user55 p: secr3t'
|
28
|
+
- L=user55 P=secr3t
|
29
|
+
Users:
|
30
|
+
- filter: user55
|
31
|
+
from:
|
32
|
+
- 'user: user55'
|
33
|
+
- 'User=user55'
|
34
|
+
- '/Users/user55'
|
35
|
+
- '/home/user55'
|
36
|
+
IPv4 Addresses:
|
37
|
+
- filter: 1.2.3.4
|
38
|
+
from:
|
39
|
+
- 1.2.3.4
|
40
|
+
- asdf 1.2.3.4 asdf
|
41
|
+
- 1.2.3.4:22
|
42
|
+
- filter: 123.45.67.89
|
43
|
+
from:
|
44
|
+
- 123.45.67.89
|
45
|
+
- passthru:
|
46
|
+
- 0.0.0.0
|
47
|
+
- 127.0.0.1
|
48
|
+
IPv6 Addresses (probably many patterns TODO on this one):
|
49
|
+
- filter: 21:43:6f:1a:f6:f6
|
50
|
+
from:
|
51
|
+
- 21:43:6f:1a:f6:f6
|
52
|
+
"Capistrano's `deploy.rb`":
|
53
|
+
- filter: shouldhide
|
54
|
+
from:
|
55
|
+
- "host_name: 'shouldhide'"
|
56
|
+
- 'host_name: "shouldhide"'
|
57
|
+
- ":host_name => 'shouldhide'"
|
58
|
+
- ":host_name, 'shouldhide'"
|
59
|
+
- ":port => 'shouldhide'"
|
60
|
+
- deploy_to, 'shouldhide'
|
61
|
+
- server 'shouldhide', …
|
62
|
+
- 'set :application, "shouldhide"'
|
63
|
+
- 'set :user, "shouldhide"'
|
64
|
+
- passthru:
|
65
|
+
- server without comma
|
66
|
+
- portage
|
67
|
+
/etc/passwd having "fakeuser" and "fakeuser2":
|
68
|
+
- filter: fakeuser
|
69
|
+
from:
|
70
|
+
- foo bar fakeuser baz
|
71
|
+
- ~/fakeuser
|
72
|
+
- /home/fakeuser/.foo
|
73
|
+
- filter: fakeuser2
|
74
|
+
from:
|
75
|
+
- fakeuser2
|
76
|
+
- passthru:
|
77
|
+
- cron
|
78
|
+
- root
|
79
|
+
hostname being 'gargantatron':
|
80
|
+
- filter: gargantatron
|
81
|
+
from:
|
82
|
+
- gargantatron
|
83
|
+
Git repos:
|
84
|
+
- filter: [ username, reponame, someotherhost ]
|
85
|
+
from:
|
86
|
+
- git@github.com/username/reponame.git
|
87
|
+
- git@github.com/username/reponame
|
88
|
+
- git@github.com:username/reponame
|
89
|
+
- https://github.com/username/reponame
|
90
|
+
- http://github.com/username/reponame
|
91
|
+
- git://github.com/username/reponame
|
92
|
+
- http://someotherhost.net/reponame.git
|
93
|
+
SSH:
|
94
|
+
- filter: [ user55, secrethost, path, to, reponame ]
|
95
|
+
from:
|
96
|
+
- ssh://user55@secrethost/path/to/reponame.git/
|
97
|
+
# TODO [user@]host.xz:path/to/repo.git/
|
data/test/mop_test.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require './test/test_helper'
|
3
|
+
require 'stringio'
|
4
|
+
require 'erb'
|
5
|
+
|
6
|
+
class MopTest < MiniTest::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@cases = YAML.load_file('test/cases.yml')
|
9
|
+
$passwd_contents = @cases.delete 'fake passwd file'
|
10
|
+
def Mop.read_etc_passwd; $passwd_contents end
|
11
|
+
$hostname = @cases.delete 'fake hostname'
|
12
|
+
def Mop.find_hostname; $hostname end
|
13
|
+
end
|
14
|
+
|
15
|
+
def write_readme actual_results
|
16
|
+
template = ERB.new File.read('README.md.erb')
|
17
|
+
File.write 'README.md', template.result(binding)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_in_a_big_loop
|
21
|
+
doc = StringIO.new
|
22
|
+
@cases.each do |name, intentions|
|
23
|
+
doc.puts '- ' + name
|
24
|
+
intentions.each do |intention|
|
25
|
+
if intention.has_key? 'passthru'
|
26
|
+
intention['passthru'].each do |already_clean|
|
27
|
+
assert_equal Mop.wipe(already_clean), already_clean
|
28
|
+
doc.puts " - `#{already_clean.inspect}` _(unchanged)_"
|
29
|
+
end
|
30
|
+
elsif intention.has_key? 'filter' and intention.has_key? 'from'
|
31
|
+
illicit = [intention['filter']].flatten
|
32
|
+
intention['from'].each do |dirty|
|
33
|
+
dirty.freeze # make sure original is unchanged
|
34
|
+
clean = Mop.wipe dirty
|
35
|
+
illicit.each do |e|
|
36
|
+
refute clean.include?(e),
|
37
|
+
"#{name} — should wipe #{illicit} from #{dirty}"
|
38
|
+
end
|
39
|
+
doc.puts " - `#{dirty.inspect}` ⇒ `#{clean.inspect}`"
|
40
|
+
end
|
41
|
+
else
|
42
|
+
fail "Unknown test case structure: #{intention.to_yaml}"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
write_readme doc.string
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_differentiated_symbols_like_an_uglifier
|
50
|
+
# TODO
|
51
|
+
end
|
52
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mop
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- ☈king
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-05 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: jist
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: working
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: ! "A simplistic pre-filter (not (yet) a substitute for manual examination).\n\nUsage\n=====\n\n
|
47
|
+
\ mop < /var/log/nginx/error_log > cleaned_file\n vim cleaned_file # check
|
48
|
+
for anything it might've missed\n jist -co cleaned_file # upload, copy its URL
|
49
|
+
to clipboard, open in browser\n\nNote\n====\n\nThis thing is really in its beginning
|
50
|
+
phases. It currently:\n\n* Deletes too much\n* Leaves too much\n\nHowever, all [Issues](https://github.com/rking/mop/issues)
|
51
|
+
will be addressed.\nJust file 'em.'\n"
|
52
|
+
email:
|
53
|
+
- rking-mop@sharpsaw.org
|
54
|
+
executables:
|
55
|
+
- mop
|
56
|
+
extensions: []
|
57
|
+
extra_rdoc_files: []
|
58
|
+
files:
|
59
|
+
- .gemspec
|
60
|
+
- .rspec
|
61
|
+
- Gemfile
|
62
|
+
- Gemfile.lock
|
63
|
+
- Guardfile
|
64
|
+
- README.md
|
65
|
+
- README.md.erb
|
66
|
+
- Rakefile
|
67
|
+
- acceptance-test
|
68
|
+
- bin/mop
|
69
|
+
- edit
|
70
|
+
- lib/mop.rb
|
71
|
+
- lib/mop/version.rb
|
72
|
+
- pkg/mop-0.0.1.gem
|
73
|
+
- test/cases.yml
|
74
|
+
- test/mop_test.rb
|
75
|
+
- test/test_helper.rb
|
76
|
+
homepage: https://github.com/rking/mop
|
77
|
+
licenses: []
|
78
|
+
post_install_message:
|
79
|
+
rdoc_options: []
|
80
|
+
require_paths:
|
81
|
+
- lib
|
82
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
requirements: []
|
95
|
+
rubyforge_project:
|
96
|
+
rubygems_version: 1.8.24
|
97
|
+
signing_key:
|
98
|
+
specification_version: 3
|
99
|
+
summary: ! 'Make OK for Public: Clean up sensitive info from a file before jisting'
|
100
|
+
test_files:
|
101
|
+
- .gemspec
|
102
|
+
- .rspec
|
103
|
+
has_rdoc:
|