codez-tarantula 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. data/.autotest +14 -0
  2. data/.gitignore +12 -0
  3. data/.travis.yml +7 -0
  4. data/CHANGELOG +64 -0
  5. data/DSL_EXAMPLES.md +120 -0
  6. data/Gemfile +2 -0
  7. data/LICENSE +20 -0
  8. data/README.rdoc +136 -0
  9. data/Rakefile +36 -0
  10. data/ci/rails2.gemfile +4 -0
  11. data/ci/rails3.gemfile +4 -0
  12. data/laf/images/header_bg.jpg +0 -0
  13. data/laf/images/logo.png +0 -0
  14. data/laf/images/tagline.png +0 -0
  15. data/laf/javascripts/jquery-1.2.3.js +3408 -0
  16. data/laf/javascripts/jquery-ui-tabs.js +890 -0
  17. data/laf/javascripts/jquery.tablesorter.js +861 -0
  18. data/laf/javascripts/tarantula.js +10 -0
  19. data/laf/stylesheets/tarantula.css +346 -0
  20. data/lib/relevance/core_extensions/ellipsize.rb +38 -0
  21. data/lib/relevance/core_extensions/file.rb +15 -0
  22. data/lib/relevance/core_extensions/metaclass.rb +78 -0
  23. data/lib/relevance/core_extensions/response.rb +14 -0
  24. data/lib/relevance/core_extensions/test_case.rb +21 -0
  25. data/lib/relevance/tarantula.rb +55 -0
  26. data/lib/relevance/tarantula/attack.rb +22 -0
  27. data/lib/relevance/tarantula/attack_handler.rb +43 -0
  28. data/lib/relevance/tarantula/basic_attack.rb +44 -0
  29. data/lib/relevance/tarantula/crawler.rb +271 -0
  30. data/lib/relevance/tarantula/detail.html.erb +81 -0
  31. data/lib/relevance/tarantula/form.rb +29 -0
  32. data/lib/relevance/tarantula/form_submission.rb +98 -0
  33. data/lib/relevance/tarantula/html_document_handler.rb +42 -0
  34. data/lib/relevance/tarantula/html_report_helper.rb +46 -0
  35. data/lib/relevance/tarantula/html_reporter.rb +111 -0
  36. data/lib/relevance/tarantula/index.html.erb +37 -0
  37. data/lib/relevance/tarantula/invalid_html_handler.rb +27 -0
  38. data/lib/relevance/tarantula/io_reporter.rb +40 -0
  39. data/lib/relevance/tarantula/link.rb +105 -0
  40. data/lib/relevance/tarantula/log_grabber.rb +22 -0
  41. data/lib/relevance/tarantula/rails_integration_proxy.rb +90 -0
  42. data/lib/relevance/tarantula/recording.rb +12 -0
  43. data/lib/relevance/tarantula/response.rb +19 -0
  44. data/lib/relevance/tarantula/result.rb +83 -0
  45. data/lib/relevance/tarantula/test_report.html.erb +32 -0
  46. data/lib/relevance/tarantula/tidy_handler.rb +35 -0
  47. data/lib/relevance/tarantula/transform.rb +21 -0
  48. data/lib/relevance/tarantula/version.rb +5 -0
  49. data/lib/relevance/tasks/tarantula_tasks.rake +42 -0
  50. data/lib/tarantula-rails3.rb +9 -0
  51. data/spec/relevance/core_extensions/ellipsize_spec.rb +19 -0
  52. data/spec/relevance/core_extensions/file_spec.rb +7 -0
  53. data/spec/relevance/core_extensions/response_spec.rb +48 -0
  54. data/spec/relevance/core_extensions/test_case_spec.rb +19 -0
  55. data/spec/relevance/tarantula/attack_handler_spec.rb +29 -0
  56. data/spec/relevance/tarantula/basic_attack_spec.rb +12 -0
  57. data/spec/relevance/tarantula/crawler_spec.rb +409 -0
  58. data/spec/relevance/tarantula/form_spec.rb +50 -0
  59. data/spec/relevance/tarantula/form_submission_spec.rb +171 -0
  60. data/spec/relevance/tarantula/html_document_handler_spec.rb +43 -0
  61. data/spec/relevance/tarantula/html_report_helper_spec.rb +46 -0
  62. data/spec/relevance/tarantula/html_reporter_spec.rb +82 -0
  63. data/spec/relevance/tarantula/invalid_html_handler_spec.rb +33 -0
  64. data/spec/relevance/tarantula/io_reporter_spec.rb +11 -0
  65. data/spec/relevance/tarantula/link_spec.rb +132 -0
  66. data/spec/relevance/tarantula/log_grabber_spec.rb +26 -0
  67. data/spec/relevance/tarantula/rails_integration_proxy_spec.rb +100 -0
  68. data/spec/relevance/tarantula/result_spec.rb +85 -0
  69. data/spec/relevance/tarantula/tidy_handler_spec.rb +58 -0
  70. data/spec/relevance/tarantula/transform_spec.rb +20 -0
  71. data/spec/relevance/tarantula_spec.rb +23 -0
  72. data/spec/spec_helper.rb +43 -0
  73. data/tarantula.gemspec +25 -0
  74. data/template/tarantula_test.rb +22 -0
  75. data/vendor/xss-shield/MIT-LICENSE +20 -0
  76. data/vendor/xss-shield/README +76 -0
  77. data/vendor/xss-shield/init.rb +16 -0
  78. data/vendor/xss-shield/lib/xss_shield.rb +6 -0
  79. data/vendor/xss-shield/lib/xss_shield/erb_hacks.rb +111 -0
  80. data/vendor/xss-shield/lib/xss_shield/haml_hacks.rb +42 -0
  81. data/vendor/xss-shield/lib/xss_shield/safe_string.rb +47 -0
  82. data/vendor/xss-shield/lib/xss_shield/secure_helpers.rb +40 -0
  83. data/vendor/xss-shield/test/test_actionview_integration.rb +40 -0
  84. data/vendor/xss-shield/test/test_erb.rb +44 -0
  85. data/vendor/xss-shield/test/test_haml.rb +43 -0
  86. data/vendor/xss-shield/test/test_helpers.rb +25 -0
  87. data/vendor/xss-shield/test/test_safe_string.rb +55 -0
  88. metadata +247 -0
@@ -0,0 +1,10 @@
1
+ $(document).ready(function() {
2
+ $(".tablesorter").tablesorter({
3
+ sortColumn: 'name', // Integer or String of the name of the column to sort by.
4
+ cssAsc: 'sort asc', // class name for ascending sorting action to header
5
+ cssDesc: 'sort desc', // class name for descending sorting action to header
6
+ headerClass: 'header' // class name for headers (th's)
7
+ });
8
+ $('#tabs-container > ul').tabs();
9
+ });
10
+
@@ -0,0 +1,346 @@
1
+ /* RESET */
2
+ html, body, div, span, applet, object, iframe,
3
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
4
+ a, abbr, acronym, address, big, cite, code,
5
+ del, dfn, em, font, img, ins, kbd, q, s, samp,
6
+ small, strike, strong, sub, sup, tt, var,
7
+ b, u, i, center,
8
+ dl, dt, dd, ol, ul, li,
9
+ fieldset, form, label, legend,
10
+ table, caption, tbody, tfoot, thead, tr, th, td {
11
+ margin: 0;
12
+ padding: 0;
13
+ border: 0;
14
+ outline: 0;
15
+ font-size: 100%;
16
+ vertical-align: baseline;
17
+ background: transparent;
18
+ }
19
+ body {
20
+ line-height: 1;
21
+ }
22
+ ol, ul {
23
+ list-style: none;
24
+ }
25
+ blockquote, q {
26
+ quotes: none;
27
+ }
28
+
29
+ /* remember to define focus styles! */
30
+ :focus {
31
+ outline: 0;
32
+ }
33
+
34
+ /* remember to highlight inserts somehow! */
35
+ ins {
36
+ text-decoration: none;
37
+ }
38
+ del {
39
+ text-decoration: line-through;
40
+ }
41
+
42
+ /* tables still need 'cellspacing="0"' in the markup */
43
+ table {
44
+ border-collapse: collapse;
45
+ border-spacing: 0;
46
+ }
47
+
48
+ body {
49
+ line-height: 1em;
50
+ font-family: Tahoma, Arial, Helvetica, sans-serif;
51
+ color: #050505;
52
+ }
53
+
54
+ /* header */
55
+ #header {
56
+ background: #37302e url(../images/header_bg.jpg) no-repeat top left;
57
+ height: 70px;
58
+ border-bottom: 2px solid #d0d0d0;
59
+ }
60
+
61
+ #header h1 {
62
+ width:206px;
63
+ height:56px;
64
+ text-indent: -9999em;
65
+ background: transparent url(../images/logo.png) no-repeat top center;
66
+ position: absolute;
67
+ top: 7px;
68
+ left: 42px;
69
+ }
70
+
71
+ #header h2 {
72
+ width:196px;
73
+ height:34px;
74
+ text-indent: -9999em;
75
+ background: transparent url(../images/tagline.png) no-repeat top center;
76
+ position: absolute;
77
+ top: 15px;
78
+ left: 257px;
79
+ }
80
+
81
+ #header p {
82
+ display: block;
83
+ position: absolute;
84
+ right: 42px;
85
+ width: 315px;
86
+ padding: 8px;
87
+ color: #fff;
88
+ font-size: 13px;
89
+ line-height: 15px;
90
+ }
91
+
92
+ #header a:link, #header a:visited, #header a {
93
+ color: #70b1ca;
94
+ }
95
+
96
+ #header a:hover {
97
+ text-decoration: none;
98
+ }
99
+
100
+ #header hr {
101
+ display: none;
102
+ }
103
+
104
+ .left { text-align: left !important; }
105
+ .right { text-align: right !important; }
106
+ .center { text-align: center !important; }
107
+
108
+ /* page */
109
+
110
+ #page {
111
+ padding: 55px 10px 0 10px;
112
+ width: 1000px;
113
+ margin: auto;
114
+ position: relative;
115
+ }
116
+
117
+ div#page ul.tabs {
118
+ clear: both;
119
+ }
120
+
121
+ div#page ul.tabs li{
122
+ border: 1px solid #ABA6A1;
123
+ display: block;
124
+ float: left;
125
+ margin-right: 3px;
126
+ }
127
+
128
+ div#page ul.tabs li a {
129
+ display: block;
130
+ float: left;
131
+ clear: right;
132
+ min-width: 110px;
133
+ }
134
+
135
+ div#page ul.tabs li a.active, .ui-tabs-selected a {
136
+ background-color: #EC720B !important;
137
+ color: #050505 !important;
138
+ }
139
+
140
+ div#page ul.tabs li a {
141
+ background-color: #463B38;
142
+ height: 36px;
143
+ color: #fff;
144
+
145
+ padding: 12px 12px 0 12px;
146
+ font-size: 18px;
147
+ line-height: 18px;
148
+ text-decoration: none;
149
+ }
150
+
151
+ div#page ul.tabs li a:hover {
152
+ background-color: #EAA464 !important;
153
+ color: #613005;
154
+ }
155
+
156
+ div#page ul.tabs {
157
+ position: absolute;
158
+ top: 3px;
159
+ left: 10px;
160
+ }
161
+
162
+ .list {
163
+ width: 100%;
164
+ }
165
+
166
+ .list th {
167
+ cursor:pointer;
168
+ }
169
+
170
+ .list th, .list th a, .list tfoot td {
171
+ background: #b9b9a9;
172
+ color: #463c38;
173
+ text-decoration: none;
174
+
175
+ }
176
+
177
+ .sort {
178
+ font-size: 75%;
179
+ filter:alpha(opacity=50);
180
+ -moz-opacity:0.5;
181
+ -khtml-opacity: 0.5;
182
+ opacity: 0.5;
183
+ }
184
+
185
+ .list th, .list th a:hover span {
186
+ filter:alpha(opacity=100);
187
+ -moz-opacity:1;
188
+ -khtml-opacity: 1;
189
+ opacity: 1;
190
+ }
191
+
192
+ .list td, .list th {
193
+ text-align: center;
194
+ padding: 4px;
195
+ font-size: 14px;
196
+ }
197
+
198
+ .list .sort.asc .sort:after {
199
+ content: "\25BC";
200
+ }
201
+
202
+ .list .sort.desc .sort:after {
203
+ content: "\25B2";
204
+ }
205
+
206
+
207
+ div#page tbody a {
208
+ color: #6699cc;
209
+ }
210
+
211
+ div#page tbody a:hover {
212
+ text-decoration: none;
213
+ }
214
+
215
+ div#page table caption {
216
+ text-align: left;
217
+ padding: 7px;
218
+ background: #d0d0c4;
219
+ border-bottom: 2px solid #aba7a1;
220
+ -moz-border-radius-topleft: 2px;
221
+ -moz-border-radius-topright: 2px;
222
+ }
223
+
224
+ .list tbody td {
225
+ background: #f2f2eb;
226
+ }
227
+
228
+ .list tfoot td {
229
+ line-height: 18px;
230
+ }
231
+
232
+ .list .method {
233
+ width: 6em;
234
+ }
235
+
236
+ tr.even td {
237
+ background: #e9e9e2 !important;
238
+ }
239
+
240
+ /* Response Codes */
241
+
242
+ span.r1, span.r2, span.r3, span.r4,
243
+ span.r5 {
244
+ display: block;
245
+ padding: .15em;
246
+ margin: .15em;
247
+ color: #dac7ad;
248
+ }
249
+
250
+ /* Informational 1xx */
251
+ span.r1 {
252
+ background-color: #3333cc;
253
+ border: 1px solid #376edc;
254
+ }
255
+
256
+ /* Successfull 2xx */
257
+ span.r2 {
258
+ background-color: #006600;
259
+ border: 1px solid #008900;
260
+ }
261
+
262
+ /* Redirection 3xx */
263
+ span.r3 {
264
+ background-color: #555652;
265
+ border: 1px solid #80817b;
266
+ }
267
+
268
+ /* Client 4xx */
269
+ span.r4 {
270
+ background-color: #857400;
271
+ border: 1px solid #baa200;
272
+ }
273
+ /* Server Error 5xx */
274
+ span.r5 {
275
+ background-color: #c40000;
276
+ border: 1px solid #dc0000;
277
+ }
278
+
279
+ /* Detail */
280
+ #report h3 {
281
+ background: #D0D0C4; font-weight: normal;
282
+ border-bottom: 2px solid #ABA7A1;
283
+ -moz-border-radius-topleft: 2px; -moz-border-radius-topright: 2px;
284
+ -webkit-border-top-left-radius: 2px; -webkit-border-top-right-radius: 2px;
285
+ }
286
+
287
+ #report h3,
288
+ #report p {
289
+ width: 50%;
290
+ padding:6px 8px;
291
+ margin: 1px 0;
292
+ }
293
+
294
+ #report a {
295
+ color: #70B1CA
296
+ }
297
+
298
+ #report a:hover {
299
+ text-decoration: none;
300
+ }
301
+
302
+ #report p b {
303
+ color: #050505;
304
+ font-weight: normal;
305
+ }
306
+
307
+ #report p {
308
+ color: #463C38;
309
+ background: #f2f2eb;
310
+ line-height: 22px;
311
+ }
312
+
313
+ #report p span {
314
+ display: inline-block;
315
+ display: -moz-inline-block;
316
+ margin: 0;
317
+ padding: 2px 6px;
318
+ line-height: 16px;
319
+ }
320
+
321
+ #report h3 em {
322
+ display: block;
323
+ font-family: Consolas, Lucida Console, Monaco, monospace;
324
+ font-size: 75%;
325
+ font-style: normal;
326
+ font-weight: normal;
327
+ color: #463C38;
328
+ line-height: 22px;
329
+ }
330
+
331
+ /* Output */
332
+ .output {margin: 10px 0; width: 100%; font-size: 82.5%;}
333
+ .output th { background: #b9b9a9; text-align: left; padding-left: 2.25em; font-weight: normal; line-height: 18px; color: #463C38; border-bottom: 1px solid #fff;
334
+ -moz-border-radius-topleft: 2px; -moz-border-radius-topright: 2px;
335
+ -webkit-border-top-left-radius: 2px; -webkit-border-top-right-radius: 2px;
336
+ }
337
+ .output td { background: #f2f2eb; padding: 1px; line-height: 18px; }
338
+ .output { font-family: Consolas, Lucida Console, Monaco, monospace; }
339
+ .output .numbers { width: 3em; text-align: right; border-right: 1px solid #fff;}
340
+ .output .lines { width: auto; text-align: left;}
341
+ .output .line { display: block; text-align: left; padding: 1px 4px;}
342
+ .output .line.number { text-align: right; color: #585850; }
343
+
344
+ /* Tabs */
345
+ .ui-tabs-panel {display: block;}
346
+ .ui-tabs-panel.ui-tabs-hide {display: none !important;}
@@ -0,0 +1,38 @@
1
+ module Relevance
2
+ module CoreExtensions
3
+ module Nil
4
+ def ellipsize(cutoff = 20)
5
+ ""
6
+ end
7
+ end
8
+
9
+ module String
10
+ def ellipsize(cutoff = 20)
11
+ if length > cutoff
12
+ "#{self[0...cutoff]}..."
13
+ else
14
+ self
15
+ end
16
+ end
17
+ end
18
+
19
+ module Object
20
+ def ellipsize(cutoff = 20)
21
+ inspect.ellipsize(cutoff)
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ class Object
28
+ include Relevance::CoreExtensions::Object
29
+ end
30
+ class String
31
+ include Relevance::CoreExtensions::String
32
+ end
33
+ class NilClass
34
+ include Relevance::CoreExtensions::Nil
35
+ end
36
+
37
+
38
+
@@ -0,0 +1,15 @@
1
+ module Relevance
2
+ module CoreExtensions
3
+
4
+ module File
5
+ def extension(path)
6
+ extname(path)[1..-1]
7
+ end
8
+ end
9
+
10
+ end
11
+ end
12
+
13
+ class File
14
+ extend Relevance::CoreExtensions::File
15
+ end
@@ -0,0 +1,78 @@
1
+ # This is a direct copy of the facets library metaclass stuff.
2
+ # used by Tarantula pulling in all of Facets doesn't make sense here.
3
+
4
+ # From lib/core/facets/metaid.rb
5
+ module Kernel
6
+ def meta_alias(*args)
7
+ meta_class do
8
+ alias_method(*args)
9
+ end
10
+ end
11
+
12
+ def meta_eval(str=nil, &blk)
13
+ if str
14
+ meta_class.instance_eval(str)
15
+ else
16
+ meta_class.instance_eval(&blk)
17
+ end
18
+ end
19
+
20
+ def meta_def( name, &block )
21
+ meta_class do
22
+ define_method( name, &block )
23
+ end
24
+ end
25
+
26
+ def meta_class(&block)
27
+ if block_given?
28
+ (class << self; self; end).class_eval(&block)
29
+ else
30
+ (class << self; self; end)
31
+ end
32
+ end
33
+
34
+ alias_method :metaclass, :meta_class
35
+
36
+ def eigenclass
37
+ (class << self; self; end)
38
+ end
39
+ end
40
+
41
+ class Module
42
+ def class_def name, &blk
43
+ class_eval { define_method name, &blk }
44
+ end
45
+
46
+ protected :attr
47
+ protected :attr_reader
48
+ protected :attr_writer
49
+ protected :attr_accessor
50
+ protected :remove_method
51
+ protected :undef_method
52
+ end
53
+
54
+ # From /lib/more/facets/kernel/meta.rb
55
+ module Kernel
56
+ def meta
57
+ @_meta_functor ||= Functor.new do |op,*args|
58
+ (class << self; self; end).send(op,*args)
59
+ end
60
+ end
61
+ end
62
+
63
+ # From /lib/core/facets/functor.rb
64
+ class Functor
65
+ private(*instance_methods.select { |m| m !~ /(^__|^binding$)/ })
66
+
67
+ def initialize(&function)
68
+ @function = function
69
+ end
70
+
71
+ def to_proc
72
+ @function
73
+ end
74
+
75
+ def method_missing(op, *args, &blk)
76
+ @function.call(op, *args, &blk)
77
+ end
78
+ end