vulcan 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. data/bin/vulcan +3 -1
  2. data/lib/vulcan/cli.rb +22 -3
  3. data/lib/vulcan/version.rb +1 -1
  4. data/server/bin/make +1 -3
  5. data/server/lib/spawner.js +9 -4
  6. data/server/node_modules/connect-form/node_modules/formidable/Readme.md +13 -2
  7. data/server/node_modules/connect-form/node_modules/formidable/lib/incoming_form.js +19 -7
  8. data/server/node_modules/connect-form/node_modules/formidable/lib/multipart_parser.js +12 -1
  9. data/server/node_modules/connect-form/node_modules/formidable/package.json +1 -1
  10. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/file/plain.txt +1 -0
  11. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/no-filename/generic.http +13 -0
  12. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-chrome-13.http +0 -10
  13. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-chrome-12.http +0 -9
  14. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/js/no-filename.js +3 -0
  15. data/server/node_modules/connect-form/node_modules/formidable/test/legacy/simple/test-multipart-parser.js +1 -1
  16. data/server/node_modules/cradle/lib/cradle.js +0 -1
  17. data/server/node_modules/cradle/package.json +3 -3
  18. data/server/node_modules/cradle/test/cache-test.js +6 -7
  19. data/server/node_modules/cradle/test/cradle-test.js +4 -5
  20. data/server/node_modules/cradle/test/response-test.js +5 -6
  21. data/server/node_modules/express/History.md +53 -1
  22. data/server/node_modules/express/Makefile +3 -9
  23. data/server/node_modules/express/Readme.md +3 -1
  24. data/server/node_modules/express/bin/express +65 -66
  25. data/server/node_modules/express/lib/express.js +1 -1
  26. data/server/node_modules/express/lib/request.js +23 -9
  27. data/server/node_modules/express/lib/response.js +3 -2
  28. data/server/node_modules/express/lib/utils.js +13 -0
  29. data/server/node_modules/express/lib/view/view.js +2 -1
  30. data/server/node_modules/express/lib/view.js +19 -16
  31. data/server/node_modules/express/node_modules/connect/lib/connect.js +1 -1
  32. data/server/node_modules/express/node_modules/connect/lib/http.js +2 -0
  33. data/server/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js +135 -31
  34. data/server/node_modules/express/node_modules/connect/lib/middleware/limit.js +5 -1
  35. data/server/node_modules/express/node_modules/connect/lib/middleware/session.js +2 -2
  36. data/server/node_modules/express/node_modules/connect/lib/middleware/static.js +26 -21
  37. data/server/node_modules/express/node_modules/connect/lib/middleware/staticCache.js +91 -38
  38. data/server/node_modules/express/node_modules/connect/lib/middleware/vhost.js +1 -1
  39. data/server/node_modules/express/node_modules/connect/lib/utils.js +11 -4
  40. data/server/node_modules/express/node_modules/connect/node_modules/formidable/Makefile +14 -0
  41. data/server/node_modules/express/node_modules/connect/node_modules/formidable/Readme.md +286 -0
  42. data/server/node_modules/express/node_modules/connect/node_modules/formidable/TODO +3 -0
  43. data/server/node_modules/express/node_modules/connect/node_modules/formidable/benchmark/bench-multipart-parser.js +70 -0
  44. data/server/node_modules/express/node_modules/connect/node_modules/formidable/example/post.js +43 -0
  45. data/server/node_modules/express/node_modules/connect/node_modules/formidable/example/upload.js +48 -0
  46. data/server/node_modules/express/node_modules/connect/node_modules/formidable/index.js +1 -0
  47. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/file.js +61 -0
  48. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js +377 -0
  49. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/index.js +3 -0
  50. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/multipart_parser.js +312 -0
  51. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/querystring_parser.js +25 -0
  52. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/util.js +6 -0
  53. data/server/node_modules/express/node_modules/connect/node_modules/formidable/package.json +22 -0
  54. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/common.js +19 -0
  55. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/funkyfilename.txt +1 -0
  56. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/plain.txt +1 -0
  57. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/no-filename/generic.http +13 -0
  58. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/info.md +3 -0
  59. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-chrome-13.http +26 -0
  60. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-firefox-3.6.http +24 -0
  61. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-safari-5.http +23 -0
  62. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-chrome-12.http +24 -0
  63. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-ie-7.http +22 -0
  64. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-ie-8.http +22 -0
  65. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-safari-5.http +22 -0
  66. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/no-filename.js +3 -0
  67. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/special-chars-in-filename.js +21 -0
  68. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/multi_video.upload +0 -0
  69. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/multipart.js +72 -0
  70. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/integration/test-fixtures.js +89 -0
  71. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/common.js +24 -0
  72. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/integration/test-multipart-parser.js +80 -0
  73. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-file.js +104 -0
  74. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-incoming-form.js +715 -0
  75. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-multipart-parser.js +50 -0
  76. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-querystring-parser.js +45 -0
  77. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/system/test-multi-video-upload.js +72 -0
  78. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/run.js +2 -0
  79. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/unit/test-incoming-form.js +63 -0
  80. data/server/node_modules/express/node_modules/connect/node_modules/formidable/tool/record.js +47 -0
  81. data/server/node_modules/express/node_modules/connect/package.json +7 -6
  82. data/server/node_modules/express/node_modules/connect/test.js +44 -31
  83. data/server/node_modules/express/node_modules/mime/mime.js +3 -3
  84. data/server/node_modules/express/node_modules/mime/package.json +21 -10
  85. data/server/node_modules/express/node_modules/mime/test.js +2 -3
  86. data/server/node_modules/express/node_modules/mime/{mime.types → types/mime.types} +0 -0
  87. data/server/node_modules/express/node_modules/mime/{node.types → types/node.types} +17 -0
  88. data/server/node_modules/express/node_modules/mkdirp/LICENSE +21 -0
  89. data/server/node_modules/express/node_modules/mkdirp/README.markdown +21 -0
  90. data/server/node_modules/express/node_modules/mkdirp/examples/pow.js +6 -0
  91. data/server/node_modules/express/node_modules/mkdirp/examples/pow.js.orig +6 -0
  92. data/server/node_modules/express/node_modules/mkdirp/examples/pow.js.rej +19 -0
  93. data/server/node_modules/express/node_modules/mkdirp/index.js +20 -0
  94. data/server/node_modules/express/node_modules/mkdirp/package.json +23 -0
  95. data/server/node_modules/express/node_modules/mkdirp/test/mkdirp.js +28 -0
  96. data/server/node_modules/express/node_modules/mkdirp/test/race.js +41 -0
  97. data/server/node_modules/express/node_modules/mkdirp/test/rel.js +32 -0
  98. data/server/node_modules/express/node_modules/qs/History.md +11 -0
  99. data/server/node_modules/express/node_modules/qs/Makefile +1 -3
  100. data/server/node_modules/express/node_modules/qs/Readme.md +2 -4
  101. data/server/node_modules/express/node_modules/qs/lib/querystring.js +100 -74
  102. data/server/node_modules/express/node_modules/qs/package.json +9 -2
  103. data/server/node_modules/express/node_modules/qs/test/mocha.opts +2 -0
  104. data/server/node_modules/express/node_modules/qs/test/{parse.test.js → parse.js} +1 -2
  105. data/server/node_modules/express/node_modules/qs/test/{stringify.test.js → stringify.js} +0 -0
  106. data/server/node_modules/express/package.json +9 -8
  107. data/server/node_modules/express/testing/foo/app.js +35 -0
  108. data/server/node_modules/express/testing/foo/package.json +9 -0
  109. data/server/node_modules/express/testing/foo/public/stylesheets/style.css +8 -0
  110. data/server/node_modules/express/testing/foo/routes/index.js +10 -0
  111. data/server/node_modules/express/testing/foo/views/index.jade +2 -0
  112. data/server/node_modules/express/testing/foo/views/layout.jade +6 -0
  113. data/server/node_modules/express/testing/index.js +43 -0
  114. data/server/node_modules/express/testing/public/test.txt +2971 -0
  115. data/server/node_modules/express/testing/views/page.html +1 -0
  116. data/server/node_modules/express/testing/views/page.jade +3 -0
  117. data/server/node_modules/express/testing/views/test.md +1 -0
  118. data/server/node_modules/express/testing/views/user/index.jade +1 -0
  119. data/server/node_modules/express/testing/views/user/list.jade +1 -0
  120. data/server/node_modules/node-uuid/README.md +166 -67
  121. data/server/node_modules/node-uuid/benchmark/README.md +53 -0
  122. data/server/node_modules/node-uuid/benchmark/bench.gnu +174 -0
  123. data/server/node_modules/node-uuid/benchmark/bench.sh +34 -0
  124. data/server/node_modules/node-uuid/{test → benchmark}/benchmark-native.c +0 -0
  125. data/server/node_modules/node-uuid/benchmark/benchmark.js +84 -0
  126. data/server/node_modules/node-uuid/package.json +5 -3
  127. data/server/node_modules/node-uuid/test/benchmark-native +0 -0
  128. data/server/node_modules/node-uuid/test/compare_v1.js +63 -0
  129. data/server/node_modules/node-uuid/test/test.html +3 -0
  130. data/server/node_modules/node-uuid/test/test.js +214 -57
  131. data/server/node_modules/node-uuid/uuid.js +225 -56
  132. data/server/node_modules/restler/README.md +20 -7
  133. data/server/node_modules/restler/bin/restler +1 -1
  134. data/server/node_modules/restler/lib/multipartform.js +9 -8
  135. data/server/node_modules/restler/lib/restler.js +64 -22
  136. data/server/node_modules/restler/package.json +2 -2
  137. data/server/node_modules/restler/test/restler.js +22 -2
  138. data/server/node_modules/restler/test/test_helper.js +20 -1
  139. data/server/package.json +1 -2
  140. data/server/web.js +30 -7
  141. metadata +90 -86
  142. data/server/node_modules/cradle/node_modules/vows/LICENSE +0 -20
  143. data/server/node_modules/cradle/node_modules/vows/Makefile +0 -7
  144. data/server/node_modules/cradle/node_modules/vows/README.md +0 -39
  145. data/server/node_modules/cradle/node_modules/vows/bin/vows +0 -515
  146. data/server/node_modules/cradle/node_modules/vows/lib/assert/error.js +0 -27
  147. data/server/node_modules/cradle/node_modules/vows/lib/assert/macros.js +0 -215
  148. data/server/node_modules/cradle/node_modules/vows/lib/assert/utils.js +0 -77
  149. data/server/node_modules/cradle/node_modules/vows/lib/vows/console.js +0 -131
  150. data/server/node_modules/cradle/node_modules/vows/lib/vows/context.js +0 -55
  151. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/file.js +0 -29
  152. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/fragments/coverage-foot.html +0 -2
  153. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/fragments/coverage-head.html +0 -61
  154. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-html.js +0 -54
  155. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-json.js +0 -54
  156. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-plain.js +0 -38
  157. data/server/node_modules/cradle/node_modules/vows/lib/vows/extras.js +0 -28
  158. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/dot-matrix.js +0 -67
  159. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/json.js +0 -16
  160. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/silent.js +0 -8
  161. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/spec.js +0 -44
  162. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/watch.js +0 -39
  163. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/xunit.js +0 -90
  164. data/server/node_modules/cradle/node_modules/vows/lib/vows/suite.js +0 -319
  165. data/server/node_modules/cradle/node_modules/vows/lib/vows.js +0 -193
  166. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/LICENSE +0 -20
  167. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/Makefile +0 -4
  168. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/README.md +0 -72
  169. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/lib/eyes.js +0 -233
  170. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/package.json +0 -14
  171. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/test/eyes-test.js +0 -55
  172. data/server/node_modules/cradle/node_modules/vows/package.json +0 -14
  173. data/server/node_modules/cradle/node_modules/vows/test/assert-test.js +0 -135
  174. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/failing.js +0 -18
  175. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/log.js +0 -18
  176. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/passing.js +0 -17
  177. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/stderr.js +0 -18
  178. data/server/node_modules/cradle/node_modules/vows/test/isolate-test.js +0 -140
  179. data/server/node_modules/cradle/node_modules/vows/test/testInherit.js +0 -133
  180. data/server/node_modules/cradle/node_modules/vows/test/vows-error-test.js +0 -51
  181. data/server/node_modules/cradle/node_modules/vows/test/vows-test.js +0 -374
  182. data/server/node_modules/express/node_modules/mime/index.js +0 -1
  183. data/server/node_modules/express/node_modules/qs/support/expresso/History.md +0 -128
  184. data/server/node_modules/express/node_modules/qs/support/expresso/Makefile +0 -53
  185. data/server/node_modules/express/node_modules/qs/support/expresso/Readme.md +0 -61
  186. data/server/node_modules/express/node_modules/qs/support/expresso/bin/expresso +0 -856
  187. data/server/node_modules/express/node_modules/qs/support/expresso/docs/api.html +0 -1080
  188. data/server/node_modules/express/node_modules/qs/support/expresso/docs/index.html +0 -377
  189. data/server/node_modules/express/node_modules/qs/support/expresso/docs/index.md +0 -290
  190. data/server/node_modules/express/node_modules/qs/support/expresso/docs/layout/foot.html +0 -3
  191. data/server/node_modules/express/node_modules/qs/support/expresso/docs/layout/head.html +0 -42
  192. data/server/node_modules/express/node_modules/qs/support/expresso/lib/bar.js +0 -4
  193. data/server/node_modules/express/node_modules/qs/support/expresso/lib/foo.js +0 -16
  194. data/server/node_modules/express/node_modules/qs/support/expresso/package.json +0 -12
  195. data/server/node_modules/express/node_modules/qs/support/expresso/test/assert.test.js +0 -91
  196. data/server/node_modules/express/node_modules/qs/support/expresso/test/async.test.js +0 -12
  197. data/server/node_modules/express/node_modules/qs/support/expresso/test/bar.test.js +0 -13
  198. data/server/node_modules/express/node_modules/qs/support/expresso/test/foo.test.js +0 -14
  199. data/server/node_modules/express/node_modules/qs/support/expresso/test/http.test.js +0 -146
  200. data/server/node_modules/express/node_modules/qs/support/expresso/test/serial/async.test.js +0 -39
  201. data/server/node_modules/express/node_modules/qs/support/expresso/test/serial/http.test.js +0 -48
  202. data/server/node_modules/express/node_modules/qs/support/should/History.md +0 -22
  203. data/server/node_modules/express/node_modules/qs/support/should/Makefile +0 -6
  204. data/server/node_modules/express/node_modules/qs/support/should/Readme.md +0 -248
  205. data/server/node_modules/express/node_modules/qs/support/should/examples/runner.js +0 -53
  206. data/server/node_modules/express/node_modules/qs/support/should/index.js +0 -2
  207. data/server/node_modules/express/node_modules/qs/support/should/lib/eql.js +0 -91
  208. data/server/node_modules/express/node_modules/qs/support/should/lib/should.js +0 -548
  209. data/server/node_modules/express/node_modules/qs/support/should/package.json +0 -8
  210. data/server/node_modules/express/node_modules/qs/support/should/test/should.test.js +0 -358
  211. data/server/node_modules/node-uuid/test/benchmark.js +0 -27
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "formidable",
3
+ "version": "1.0.8",
4
+ "dependencies": {},
5
+ "devDependencies": {
6
+ "gently": "0.8.0",
7
+ "findit": "0.1.1",
8
+ "hashish": "0.0.4",
9
+ "urun": "0.0.4",
10
+ "utest": "0.0.3"
11
+ },
12
+ "directories": {
13
+ "lib": "./lib"
14
+ },
15
+ "main": "./lib/index",
16
+ "scripts": {
17
+ "test": "make test"
18
+ },
19
+ "engines": {
20
+ "node": "*"
21
+ }
22
+ }
@@ -0,0 +1,19 @@
1
+ var mysql = require('..');
2
+ var path = require('path');
3
+
4
+ var root = path.join(__dirname, '../');
5
+ exports.dir = {
6
+ root : root,
7
+ lib : root + '/lib',
8
+ fixture : root + '/test/fixture',
9
+ tmp : root + '/test/tmp',
10
+ };
11
+
12
+ exports.port = 13532;
13
+
14
+ exports.formidable = require('..');
15
+ exports.assert = require('assert');
16
+
17
+ exports.require = function(lib) {
18
+ return require(exports.dir.lib + '/' + lib);
19
+ };
@@ -0,0 +1,13 @@
1
+ POST /upload HTTP/1.1
2
+ Host: localhost:8080
3
+ Content-Type: multipart/form-data; boundary=----WebKitFormBoundarytyE4wkKlZ5CQJVTG
4
+ Content-Length: 1000
5
+
6
+ ------WebKitFormBoundarytyE4wkKlZ5CQJVTG
7
+ Content-Disposition: form-data; name="upload"; filename=""
8
+ Content-Type: text/plain
9
+
10
+ I am a plain text file
11
+
12
+ ------WebKitFormBoundarytyE4wkKlZ5CQJVTG--
13
+
@@ -0,0 +1,3 @@
1
+ * Opera does not allow submitting this file, it shows a warning to the
2
+ user that the file could not be found instead. Tested in 9.8, 11.51 on OSX.
3
+ Reported to Opera on 08.09.2011 (tracking email DSK-346009@bugs.opera.com).
@@ -0,0 +1,26 @@
1
+ POST /upload HTTP/1.1
2
+ Host: localhost:8080
3
+ Connection: keep-alive
4
+ Referer: http://localhost:8080/
5
+ Content-Length: 383
6
+ Cache-Control: max-age=0
7
+ Origin: http://localhost:8080
8
+ User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1
9
+ Content-Type: multipart/form-data; boundary=----WebKitFormBoundarytyE4wkKlZ5CQJVTG
10
+ Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
11
+ Accept-Encoding: gzip,deflate,sdch
12
+ Accept-Language: en-US,en;q=0.8
13
+ Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
14
+ Cookie: jqCookieJar_tablesorter=%7B%22showListTable%22%3A%5B%5B5%2C1%5D%2C%5B1%2C0%5D%5D%7D
15
+
16
+ ------WebKitFormBoundarytyE4wkKlZ5CQJVTG
17
+ Content-Disposition: form-data; name="title"
18
+
19
+ Weird filename
20
+ ------WebKitFormBoundarytyE4wkKlZ5CQJVTG
21
+ Content-Disposition: form-data; name="upload"; filename=": \ ? % * | %22 < > . ? ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt"
22
+ Content-Type: text/plain
23
+
24
+ I am a text file with a funky name!
25
+
26
+ ------WebKitFormBoundarytyE4wkKlZ5CQJVTG--
@@ -0,0 +1,24 @@
1
+ POST /upload HTTP/1.1
2
+ Host: localhost:8080
3
+ User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22
4
+ Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
5
+ Accept-Language: en-us,en;q=0.5
6
+ Accept-Encoding: gzip,deflate
7
+ Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
8
+ Keep-Alive: 115
9
+ Connection: keep-alive
10
+ Referer: http://localhost:8080/
11
+ Content-Type: multipart/form-data; boundary=---------------------------9849436581144108930470211272
12
+ Content-Length: 438
13
+
14
+ -----------------------------9849436581144108930470211272
15
+ Content-Disposition: form-data; name="title"
16
+
17
+ Weird filename
18
+ -----------------------------9849436581144108930470211272
19
+ Content-Disposition: form-data; name="upload"; filename=": \ ? % * | " < > . &#9731; ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt"
20
+ Content-Type: text/plain
21
+
22
+ I am a text file with a funky name!
23
+
24
+ -----------------------------9849436581144108930470211272--
@@ -0,0 +1,23 @@
1
+ POST /upload HTTP/1.1
2
+ Host: localhost:8080
3
+ Origin: http://localhost:8080
4
+ Content-Length: 383
5
+ User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1
6
+ Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryQJZ1gvhvdgfisJPJ
7
+ Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
8
+ Referer: http://localhost:8080/
9
+ Accept-Language: en-us
10
+ Accept-Encoding: gzip, deflate
11
+ Connection: keep-alive
12
+
13
+ ------WebKitFormBoundaryQJZ1gvhvdgfisJPJ
14
+ Content-Disposition: form-data; name="title"
15
+
16
+ Weird filename
17
+ ------WebKitFormBoundaryQJZ1gvhvdgfisJPJ
18
+ Content-Disposition: form-data; name="upload"; filename=": \ ? % * | %22 < > . ? ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt"
19
+ Content-Type: text/plain
20
+
21
+ I am a text file with a funky name!
22
+
23
+ ------WebKitFormBoundaryQJZ1gvhvdgfisJPJ--
@@ -0,0 +1,24 @@
1
+ POST /upload HTTP/1.1
2
+ Host: 192.168.56.1:8080
3
+ Connection: keep-alive
4
+ Referer: http://192.168.56.1:8080/
5
+ Content-Length: 344
6
+ Cache-Control: max-age=0
7
+ Origin: http://192.168.56.1:8080
8
+ User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30
9
+ Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryEvqBNplR3ByrwQPa
10
+ Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
11
+ Accept-Encoding: gzip,deflate,sdch
12
+ Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
13
+ Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
14
+
15
+ ------WebKitFormBoundaryEvqBNplR3ByrwQPa
16
+ Content-Disposition: form-data; name="title"
17
+
18
+ Weird filename
19
+ ------WebKitFormBoundaryEvqBNplR3ByrwQPa
20
+ Content-Disposition: form-data; name="upload"; filename=" ? % * | %22 < > . ? ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt"
21
+ Content-Type: text/plain
22
+
23
+
24
+ ------WebKitFormBoundaryEvqBNplR3ByrwQPa--
@@ -0,0 +1,22 @@
1
+ POST /upload HTTP/1.1
2
+ Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, */*
3
+ Referer: http://192.168.56.1:8080/
4
+ Accept-Language: de
5
+ User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
6
+ Content-Type: multipart/form-data; boundary=---------------------------7db1fe232017c
7
+ Accept-Encoding: gzip, deflate
8
+ Host: 192.168.56.1:8080
9
+ Content-Length: 368
10
+ Connection: Keep-Alive
11
+ Cache-Control: no-cache
12
+
13
+ -----------------------------7db1fe232017c
14
+ Content-Disposition: form-data; name="title"
15
+
16
+ Weird filename
17
+ -----------------------------7db1fe232017c
18
+ Content-Disposition: form-data; name="upload"; filename=" ? % * | " < > . &#9731; ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt"
19
+ Content-Type: application/octet-stream
20
+
21
+
22
+ -----------------------------7db1fe232017c--
@@ -0,0 +1,22 @@
1
+ POST /upload HTTP/1.1
2
+ Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, */*
3
+ Referer: http://192.168.56.1:8080/
4
+ Accept-Language: de
5
+ User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)
6
+ Content-Type: multipart/form-data; boundary=---------------------------7db3a8372017c
7
+ Accept-Encoding: gzip, deflate
8
+ Host: 192.168.56.1:8080
9
+ Content-Length: 368
10
+ Connection: Keep-Alive
11
+ Cache-Control: no-cache
12
+
13
+ -----------------------------7db3a8372017c
14
+ Content-Disposition: form-data; name="title"
15
+
16
+ Weird filename
17
+ -----------------------------7db3a8372017c
18
+ Content-Disposition: form-data; name="upload"; filename=" ? % * | " < > . &#9731; ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt"
19
+ Content-Type: application/octet-stream
20
+
21
+
22
+ -----------------------------7db3a8372017c--
@@ -0,0 +1,22 @@
1
+ POST /upload HTTP/1.1
2
+ Host: 192.168.56.1:8080
3
+ Referer: http://192.168.56.1:8080/
4
+ Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
5
+ Accept-Language: en-US
6
+ Origin: http://192.168.56.1:8080
7
+ User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4
8
+ Accept-Encoding: gzip, deflate
9
+ Content-Type: multipart/form-data; boundary=----WebKitFormBoundarykmaWSUbu697WN9TM
10
+ Content-Length: 344
11
+ Connection: keep-alive
12
+
13
+ ------WebKitFormBoundarykmaWSUbu697WN9TM
14
+ Content-Disposition: form-data; name="title"
15
+
16
+ Weird filename
17
+ ------WebKitFormBoundarykmaWSUbu697WN9TM
18
+ Content-Disposition: form-data; name="upload"; filename=" ? % * | %22 < > . ? ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt"
19
+ Content-Type: text/plain
20
+
21
+
22
+ ------WebKitFormBoundarykmaWSUbu697WN9TM--
@@ -0,0 +1,3 @@
1
+ module.exports['generic.http'] = [
2
+ {type: 'file', name: 'upload', filename: '', fixture: 'plain.txt'},
3
+ ];
@@ -0,0 +1,21 @@
1
+ var properFilename = 'funkyfilename.txt';
2
+
3
+ function expect(filename) {
4
+ return [
5
+ {type: 'field', name: 'title', value: 'Weird filename'},
6
+ {type: 'file', name: 'upload', filename: filename, fixture: properFilename},
7
+ ];
8
+ };
9
+
10
+ var webkit = " ? % * | \" < > . ? ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt";
11
+ var ffOrIe = " ? % * | \" < > . ☃ ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt";
12
+
13
+ module.exports = {
14
+ 'osx-chrome-13.http' : expect(webkit),
15
+ 'osx-firefox-3.6.http' : expect(ffOrIe),
16
+ 'osx-safari-5.http' : expect(webkit),
17
+ 'xp-chrome-12.http' : expect(webkit),
18
+ 'xp-ie-7.http' : expect(ffOrIe),
19
+ 'xp-ie-8.http' : expect(ffOrIe),
20
+ 'xp-safari-5.http' : expect(webkit),
21
+ };
@@ -0,0 +1,72 @@
1
+ exports['rfc1867'] =
2
+ { boundary: 'AaB03x',
3
+ raw:
4
+ '--AaB03x\r\n'+
5
+ 'content-disposition: form-data; name="field1"\r\n'+
6
+ '\r\n'+
7
+ 'Joe Blow\r\nalmost tricked you!\r\n'+
8
+ '--AaB03x\r\n'+
9
+ 'content-disposition: form-data; name="pics"; filename="file1.txt"\r\n'+
10
+ 'Content-Type: text/plain\r\n'+
11
+ '\r\n'+
12
+ '... contents of file1.txt ...\r\r\n'+
13
+ '--AaB03x--\r\n',
14
+ parts:
15
+ [ { headers: {
16
+ 'content-disposition': 'form-data; name="field1"',
17
+ },
18
+ data: 'Joe Blow\r\nalmost tricked you!',
19
+ },
20
+ { headers: {
21
+ 'content-disposition': 'form-data; name="pics"; filename="file1.txt"',
22
+ 'Content-Type': 'text/plain',
23
+ },
24
+ data: '... contents of file1.txt ...\r',
25
+ }
26
+ ]
27
+ };
28
+
29
+ exports['noTrailing\r\n'] =
30
+ { boundary: 'AaB03x',
31
+ raw:
32
+ '--AaB03x\r\n'+
33
+ 'content-disposition: form-data; name="field1"\r\n'+
34
+ '\r\n'+
35
+ 'Joe Blow\r\nalmost tricked you!\r\n'+
36
+ '--AaB03x\r\n'+
37
+ 'content-disposition: form-data; name="pics"; filename="file1.txt"\r\n'+
38
+ 'Content-Type: text/plain\r\n'+
39
+ '\r\n'+
40
+ '... contents of file1.txt ...\r\r\n'+
41
+ '--AaB03x--',
42
+ parts:
43
+ [ { headers: {
44
+ 'content-disposition': 'form-data; name="field1"',
45
+ },
46
+ data: 'Joe Blow\r\nalmost tricked you!',
47
+ },
48
+ { headers: {
49
+ 'content-disposition': 'form-data; name="pics"; filename="file1.txt"',
50
+ 'Content-Type': 'text/plain',
51
+ },
52
+ data: '... contents of file1.txt ...\r',
53
+ }
54
+ ]
55
+ };
56
+
57
+ exports['emptyHeader'] =
58
+ { boundary: 'AaB03x',
59
+ raw:
60
+ '--AaB03x\r\n'+
61
+ 'content-disposition: form-data; name="field1"\r\n'+
62
+ ': foo\r\n'+
63
+ '\r\n'+
64
+ 'Joe Blow\r\nalmost tricked you!\r\n'+
65
+ '--AaB03x\r\n'+
66
+ 'content-disposition: form-data; name="pics"; filename="file1.txt"\r\n'+
67
+ 'Content-Type: text/plain\r\n'+
68
+ '\r\n'+
69
+ '... contents of file1.txt ...\r\r\n'+
70
+ '--AaB03x--\r\n',
71
+ expectError: true,
72
+ };
@@ -0,0 +1,89 @@
1
+ var hashish = require('hashish');
2
+ var fs = require('fs');
3
+ var findit = require('findit');
4
+ var path = require('path');
5
+ var http = require('http');
6
+ var net = require('net');
7
+ var assert = require('assert');
8
+
9
+ var common = require('../common');
10
+ var formidable = common.formidable;
11
+
12
+ var server = http.createServer();
13
+ server.listen(common.port, findFixtures);
14
+
15
+ function findFixtures() {
16
+ var fixtures = [];
17
+ findit
18
+ .sync(common.dir.fixture + '/js')
19
+ .forEach(function(jsPath) {
20
+ if (!/\.js$/.test(jsPath)) return;
21
+
22
+ var group = path.basename(jsPath, '.js');
23
+ hashish.forEach(require(jsPath), function(fixture, name) {
24
+ fixtures.push({
25
+ name : group + '/' + name,
26
+ fixture : fixture,
27
+ });
28
+ });
29
+ });
30
+
31
+ testNext(fixtures);
32
+ }
33
+
34
+ function testNext(fixtures) {
35
+ var fixture = fixtures.shift();
36
+ if (!fixture) return server.close();
37
+
38
+ var name = fixture.name;
39
+ var fixture = fixture.fixture;
40
+
41
+ uploadFixture(name, function(err, parts) {
42
+ if (err) throw err;
43
+
44
+ fixture.forEach(function(expectedPart, i) {
45
+ var parsedPart = parts[i];
46
+ assert.equal(parsedPart.type, expectedPart.type);
47
+ assert.equal(parsedPart.name, expectedPart.name);
48
+
49
+ if (parsedPart.type === 'file') {
50
+ var filename = parsedPart.value.name;
51
+ assert.equal(filename, expectedPart.filename);
52
+ }
53
+ });
54
+
55
+ testNext(fixtures);
56
+ });
57
+ };
58
+
59
+ function uploadFixture(name, cb) {
60
+ server.once('request', function(req, res) {
61
+ var form = new formidable.IncomingForm();
62
+ form.uploadDir = common.dir.tmp;
63
+ form.parse(req);
64
+
65
+ function callback() {
66
+ var realCallback = cb;
67
+ cb = function() {};
68
+ realCallback.apply(null, arguments);
69
+ }
70
+
71
+ var parts = [];
72
+ form
73
+ .on('error', callback)
74
+ .on('fileBegin', function(name, value) {
75
+ parts.push({type: 'file', name: name, value: value});
76
+ })
77
+ .on('field', function(name, value) {
78
+ parts.push({type: 'field', name: name, value: value});
79
+ })
80
+ .on('end', function() {
81
+ callback(null, parts);
82
+ });
83
+ });
84
+
85
+ var socket = net.createConnection(common.port);
86
+ var file = fs.createReadStream(common.dir.fixture + '/http/' + name);
87
+
88
+ file.pipe(socket);
89
+ }
@@ -0,0 +1,24 @@
1
+ var path = require('path'),
2
+ fs = require('fs');
3
+
4
+ try {
5
+ global.Gently = require('gently');
6
+ } catch (e) {
7
+ throw new Error('this test suite requires node-gently');
8
+ }
9
+
10
+ exports.lib = path.join(__dirname, '../../lib');
11
+
12
+ global.GENTLY = new Gently();
13
+
14
+ global.assert = require('assert');
15
+ global.TEST_PORT = 13532;
16
+ global.TEST_FIXTURES = path.join(__dirname, '../fixture');
17
+ global.TEST_TMP = path.join(__dirname, '../tmp');
18
+
19
+ // Stupid new feature in node that complains about gently attaching too many
20
+ // listeners to process 'exit'. This is a workaround until I can think of a
21
+ // better way to deal with this.
22
+ if (process.setMaxListeners) {
23
+ process.setMaxListeners(10000);
24
+ }
@@ -0,0 +1,80 @@
1
+ var common = require('../common');
2
+ var CHUNK_LENGTH = 10,
3
+ multipartParser = require(common.lib + '/multipart_parser'),
4
+ MultipartParser = multipartParser.MultipartParser,
5
+ parser = new MultipartParser(),
6
+ fixtures = require(TEST_FIXTURES + '/multipart'),
7
+ Buffer = require('buffer').Buffer;
8
+
9
+ Object.keys(fixtures).forEach(function(name) {
10
+ var fixture = fixtures[name],
11
+ buffer = new Buffer(Buffer.byteLength(fixture.raw, 'binary')),
12
+ offset = 0,
13
+ chunk,
14
+ nparsed,
15
+
16
+ parts = [],
17
+ part = null,
18
+ headerField,
19
+ headerValue,
20
+ endCalled = '';
21
+
22
+ parser.initWithBoundary(fixture.boundary);
23
+ parser.onPartBegin = function() {
24
+ part = {headers: {}, data: ''};
25
+ parts.push(part);
26
+ headerField = '';
27
+ headerValue = '';
28
+ };
29
+
30
+ parser.onHeaderField = function(b, start, end) {
31
+ headerField += b.toString('ascii', start, end);
32
+ };
33
+
34
+ parser.onHeaderValue = function(b, start, end) {
35
+ headerValue += b.toString('ascii', start, end);
36
+ }
37
+
38
+ parser.onHeaderEnd = function() {
39
+ part.headers[headerField] = headerValue;
40
+ headerField = '';
41
+ headerValue = '';
42
+ };
43
+
44
+ parser.onPartData = function(b, start, end) {
45
+ var str = b.toString('ascii', start, end);
46
+ part.data += b.slice(start, end);
47
+ }
48
+
49
+ parser.onEnd = function() {
50
+ endCalled = true;
51
+ }
52
+
53
+ buffer.write(fixture.raw, 'binary', 0);
54
+
55
+ while (offset < buffer.length) {
56
+ if (offset + CHUNK_LENGTH < buffer.length) {
57
+ chunk = buffer.slice(offset, offset+CHUNK_LENGTH);
58
+ } else {
59
+ chunk = buffer.slice(offset, buffer.length);
60
+ }
61
+ offset = offset + CHUNK_LENGTH;
62
+
63
+ nparsed = parser.write(chunk);
64
+ if (nparsed != chunk.length) {
65
+ if (fixture.expectError) {
66
+ return;
67
+ }
68
+ puts('-- ERROR --');
69
+ p(chunk.toString('ascii'));
70
+ throw new Error(chunk.length+' bytes written, but only '+nparsed+' bytes parsed!');
71
+ }
72
+ }
73
+
74
+ if (fixture.expectError) {
75
+ throw new Error('expected parse error did not happen');
76
+ }
77
+
78
+ assert.ok(endCalled);
79
+ assert.deepEqual(parts, fixture.parts);
80
+ });
@@ -0,0 +1,104 @@
1
+ var common = require('../common');
2
+ var WriteStreamStub = GENTLY.stub('fs', 'WriteStream');
3
+
4
+ var File = require(common.lib + '/file'),
5
+ EventEmitter = require('events').EventEmitter,
6
+ file,
7
+ gently;
8
+
9
+ function test(test) {
10
+ gently = new Gently();
11
+ file = new File();
12
+ test();
13
+ gently.verify(test.name);
14
+ }
15
+
16
+ test(function constructor() {
17
+ assert.ok(file instanceof EventEmitter);
18
+ assert.strictEqual(file.size, 0);
19
+ assert.strictEqual(file.path, null);
20
+ assert.strictEqual(file.name, null);
21
+ assert.strictEqual(file.type, null);
22
+ assert.strictEqual(file.lastModifiedDate, null);
23
+
24
+ assert.strictEqual(file._writeStream, null);
25
+
26
+ (function testSetProperties() {
27
+ var file2 = new File({foo: 'bar'});
28
+ assert.equal(file2.foo, 'bar');
29
+ })();
30
+ });
31
+
32
+ test(function open() {
33
+ var WRITE_STREAM;
34
+ file.path = '/foo';
35
+
36
+ gently.expect(WriteStreamStub, 'new', function (path) {
37
+ WRITE_STREAM = this;
38
+ assert.strictEqual(path, file.path);
39
+ });
40
+
41
+ file.open();
42
+ assert.strictEqual(file._writeStream, WRITE_STREAM);
43
+ });
44
+
45
+ test(function write() {
46
+ var BUFFER = {length: 10},
47
+ CB_STUB,
48
+ CB = function() {
49
+ CB_STUB.apply(this, arguments);
50
+ };
51
+
52
+ file._writeStream = {};
53
+
54
+ gently.expect(file._writeStream, 'write', function (buffer, cb) {
55
+ assert.strictEqual(buffer, BUFFER);
56
+
57
+ gently.expect(file, 'emit', function (event, bytesWritten) {
58
+ assert.ok(file.lastModifiedDate instanceof Date);
59
+ assert.equal(event, 'progress');
60
+ assert.equal(bytesWritten, file.size);
61
+ });
62
+
63
+ CB_STUB = gently.expect(function writeCb() {
64
+ assert.equal(file.size, 10);
65
+ });
66
+
67
+ cb();
68
+
69
+ gently.expect(file, 'emit', function (event, bytesWritten) {
70
+ assert.equal(event, 'progress');
71
+ assert.equal(bytesWritten, file.size);
72
+ });
73
+
74
+ CB_STUB = gently.expect(function writeCb() {
75
+ assert.equal(file.size, 20);
76
+ });
77
+
78
+ cb();
79
+ });
80
+
81
+ file.write(BUFFER, CB);
82
+ });
83
+
84
+ test(function end() {
85
+ var CB_STUB,
86
+ CB = function() {
87
+ CB_STUB.apply(this, arguments);
88
+ };
89
+
90
+ file._writeStream = {};
91
+
92
+ gently.expect(file._writeStream, 'end', function (cb) {
93
+ gently.expect(file, 'emit', function (event) {
94
+ assert.equal(event, 'end');
95
+ });
96
+
97
+ CB_STUB = gently.expect(function endCb() {
98
+ });
99
+
100
+ cb();
101
+ });
102
+
103
+ file.end(CB);
104
+ });