├── .gitignore ├── LICENSE ├── README.md ├── app.js ├── node_modules ├── .bin │ └── express ├── express │ ├── .npmignore │ ├── .travis.yml │ ├── History.md │ ├── LICENSE │ ├── Makefile │ ├── Readme.md │ ├── bin │ │ └── express │ ├── client.js │ ├── index.js │ ├── lib │ │ ├── application.js │ │ ├── express.js │ │ ├── middleware.js │ │ ├── request.js │ │ ├── response.js │ │ ├── router │ │ │ ├── index.js │ │ │ └── route.js │ │ ├── utils.js │ │ └── view.js │ ├── node_modules │ │ ├── buffer-crc32 │ │ │ ├── .npmignore │ │ │ ├── .travis.yml │ │ │ ├── README.md │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ └── tests │ │ │ │ └── crc.test.js │ │ ├── commander │ │ │ ├── .npmignore │ │ │ ├── .travis.yml │ │ │ ├── History.md │ │ │ ├── Makefile │ │ │ ├── Readme.md │ │ │ ├── index.js │ │ │ ├── lib │ │ │ │ └── commander.js │ │ │ └── package.json │ │ ├── connect │ │ │ ├── .npmignore │ │ │ ├── .travis.yml │ │ │ ├── LICENSE │ │ │ ├── index.js │ │ │ ├── lib │ │ │ │ ├── cache.js │ │ │ │ ├── connect.js │ │ │ │ ├── index.js │ │ │ │ ├── middleware │ │ │ │ │ ├── basicAuth.js │ │ │ │ │ ├── bodyParser.js │ │ │ │ │ ├── compress.js │ │ │ │ │ ├── cookieParser.js │ │ │ │ │ ├── cookieSession.js │ │ │ │ │ ├── csrf.js │ │ │ │ │ ├── directory.js │ │ │ │ │ ├── errorHandler.js │ │ │ │ │ ├── favicon.js │ │ │ │ │ ├── json.js │ │ │ │ │ ├── limit.js │ │ │ │ │ ├── logger.js │ │ │ │ │ ├── methodOverride.js │ │ │ │ │ ├── multipart.js │ │ │ │ │ ├── query.js │ │ │ │ │ ├── responseTime.js │ │ │ │ │ ├── session.js │ │ │ │ │ ├── session │ │ │ │ │ │ ├── cookie.js │ │ │ │ │ │ ├── memory.js │ │ │ │ │ │ ├── session.js │ │ │ │ │ │ └── store.js │ │ │ │ │ ├── static.js │ │ │ │ │ ├── staticCache.js │ │ │ │ │ ├── timeout.js │ │ │ │ │ ├── urlencoded.js │ │ │ │ │ └── vhost.js │ │ │ │ ├── patch.js │ │ │ │ ├── proto.js │ │ │ │ ├── public │ │ │ │ │ ├── directory.html │ │ │ │ │ ├── error.html │ │ │ │ │ ├── favicon.ico │ │ │ │ │ ├── icons │ │ │ │ │ │ ├── page.png │ │ │ │ │ │ ├── page_add.png │ │ │ │ │ │ ├── page_attach.png │ │ │ │ │ │ ├── page_code.png │ │ │ │ │ │ ├── page_copy.png │ │ │ │ │ │ ├── page_delete.png │ │ │ │ │ │ ├── page_edit.png │ │ │ │ │ │ ├── page_error.png │ │ │ │ │ │ ├── page_excel.png │ │ │ │ │ │ ├── page_find.png │ │ │ │ │ │ ├── page_gear.png │ │ │ │ │ │ ├── page_go.png │ │ │ │ │ │ ├── page_green.png │ │ │ │ │ │ ├── page_key.png │ │ │ │ │ │ ├── page_lightning.png │ │ │ │ │ │ ├── page_link.png │ │ │ │ │ │ ├── page_paintbrush.png │ │ │ │ │ │ ├── page_paste.png │ │ │ │ │ │ ├── page_red.png │ │ │ │ │ │ ├── page_refresh.png │ │ │ │ │ │ ├── page_save.png │ │ │ │ │ │ ├── page_white.png │ │ │ │ │ │ ├── page_white_acrobat.png │ │ │ │ │ │ ├── page_white_actionscript.png │ │ │ │ │ │ ├── page_white_add.png │ │ │ │ │ │ ├── page_white_c.png │ │ │ │ │ │ ├── page_white_camera.png │ │ │ │ │ │ ├── page_white_cd.png │ │ │ │ │ │ ├── page_white_code.png │ │ │ │ │ │ ├── page_white_code_red.png │ │ │ │ │ │ ├── page_white_coldfusion.png │ │ │ │ │ │ ├── page_white_compressed.png │ │ │ │ │ │ ├── page_white_copy.png │ │ │ │ │ │ ├── page_white_cplusplus.png │ │ │ │ │ │ ├── page_white_csharp.png │ │ │ │ │ │ ├── page_white_cup.png │ │ │ │ │ │ ├── page_white_database.png │ │ │ │ │ │ ├── page_white_delete.png │ │ │ │ │ │ ├── page_white_dvd.png │ │ │ │ │ │ ├── page_white_edit.png │ │ │ │ │ │ ├── page_white_error.png │ │ │ │ │ │ ├── page_white_excel.png │ │ │ │ │ │ ├── page_white_find.png │ │ │ │ │ │ ├── page_white_flash.png │ │ │ │ │ │ ├── page_white_freehand.png │ │ │ │ │ │ ├── page_white_gear.png │ │ │ │ │ │ ├── page_white_get.png │ │ │ │ │ │ ├── page_white_go.png │ │ │ │ │ │ ├── page_white_h.png │ │ │ │ │ │ ├── page_white_horizontal.png │ │ │ │ │ │ ├── page_white_key.png │ │ │ │ │ │ ├── page_white_lightning.png │ │ │ │ │ │ ├── page_white_link.png │ │ │ │ │ │ ├── page_white_magnify.png │ │ │ │ │ │ ├── page_white_medal.png │ │ │ │ │ │ ├── page_white_office.png │ │ │ │ │ │ ├── page_white_paint.png │ │ │ │ │ │ ├── page_white_paintbrush.png │ │ │ │ │ │ ├── page_white_paste.png │ │ │ │ │ │ ├── page_white_php.png │ │ │ │ │ │ ├── page_white_picture.png │ │ │ │ │ │ ├── page_white_powerpoint.png │ │ │ │ │ │ ├── page_white_put.png │ │ │ │ │ │ ├── page_white_ruby.png │ │ │ │ │ │ ├── page_white_stack.png │ │ │ │ │ │ ├── page_white_star.png │ │ │ │ │ │ ├── page_white_swoosh.png │ │ │ │ │ │ ├── page_white_text.png │ │ │ │ │ │ ├── page_white_text_width.png │ │ │ │ │ │ ├── page_white_tux.png │ │ │ │ │ │ ├── page_white_vector.png │ │ │ │ │ │ ├── page_white_visualstudio.png │ │ │ │ │ │ ├── page_white_width.png │ │ │ │ │ │ ├── page_white_word.png │ │ │ │ │ │ ├── page_white_world.png │ │ │ │ │ │ ├── page_white_wrench.png │ │ │ │ │ │ ├── page_white_zip.png │ │ │ │ │ │ ├── page_word.png │ │ │ │ │ │ └── page_world.png │ │ │ │ │ └── style.css │ │ │ │ └── utils.js │ │ │ ├── node_modules │ │ │ │ ├── buffer-crc32 │ │ │ │ │ ├── .npmignore │ │ │ │ │ ├── .travis.yml │ │ │ │ │ ├── README.md │ │ │ │ │ ├── index.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── tests │ │ │ │ │ │ └── crc.test.js │ │ │ │ ├── bytes │ │ │ │ │ ├── .npmignore │ │ │ │ │ ├── History.md │ │ │ │ │ ├── Makefile │ │ │ │ │ ├── Readme.md │ │ │ │ │ ├── component.json │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ ├── formidable │ │ │ │ │ ├── .npmignore │ │ │ │ │ ├── .travis.yml │ │ │ │ │ ├── Makefile │ │ │ │ │ ├── Readme.md │ │ │ │ │ ├── TODO │ │ │ │ │ ├── benchmark │ │ │ │ │ │ └── bench-multipart-parser.js │ │ │ │ │ ├── example │ │ │ │ │ │ ├── post.js │ │ │ │ │ │ └── upload.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── lib │ │ │ │ │ │ ├── file.js │ │ │ │ │ │ ├── incoming_form.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── multipart_parser.js │ │ │ │ │ │ ├── querystring_parser.js │ │ │ │ │ │ └── util.js │ │ │ │ │ ├── node-gently │ │ │ │ │ │ ├── Makefile │ │ │ │ │ │ ├── Readme.md │ │ │ │ │ │ ├── example │ │ │ │ │ │ │ ├── dog.js │ │ │ │ │ │ │ └── event_emitter.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── lib │ │ │ │ │ │ │ └── gently │ │ │ │ │ │ │ │ ├── gently.js │ │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── test │ │ │ │ │ │ │ ├── common.js │ │ │ │ │ │ │ └── simple │ │ │ │ │ │ │ └── test-gently.js │ │ │ │ │ ├── package.json │ │ │ │ │ ├── test │ │ │ │ │ │ ├── common.js │ │ │ │ │ │ ├── fixture │ │ │ │ │ │ │ ├── file │ │ │ │ │ │ │ │ ├── funkyfilename.txt │ │ │ │ │ │ │ │ └── plain.txt │ │ │ │ │ │ │ ├── http │ │ │ │ │ │ │ │ └── special-chars-in-filename │ │ │ │ │ │ │ │ │ └── info.md │ │ │ │ │ │ │ ├── js │ │ │ │ │ │ │ │ ├── no-filename.js │ │ │ │ │ │ │ │ └── special-chars-in-filename.js │ │ │ │ │ │ │ └── multipart.js │ │ │ │ │ │ ├── integration │ │ │ │ │ │ │ └── test-fixtures.js │ │ │ │ │ │ ├── legacy │ │ │ │ │ │ │ ├── common.js │ │ │ │ │ │ │ ├── integration │ │ │ │ │ │ │ │ └── test-multipart-parser.js │ │ │ │ │ │ │ ├── simple │ │ │ │ │ │ │ │ ├── test-file.js │ │ │ │ │ │ │ │ ├── test-incoming-form.js │ │ │ │ │ │ │ │ ├── test-multipart-parser.js │ │ │ │ │ │ │ │ └── test-querystring-parser.js │ │ │ │ │ │ │ └── system │ │ │ │ │ │ │ │ └── test-multi-video-upload.js │ │ │ │ │ │ ├── run.js │ │ │ │ │ │ └── unit │ │ │ │ │ │ │ └── test-incoming-form.js │ │ │ │ │ └── tool │ │ │ │ │ │ └── record.js │ │ │ │ ├── pause │ │ │ │ │ ├── .npmignore │ │ │ │ │ ├── History.md │ │ │ │ │ ├── Makefile │ │ │ │ │ ├── Readme.md │ │ │ │ │ ├── index.js │ │ │ │ │ └── package.json │ │ │ │ └── qs │ │ │ │ │ ├── .gitmodules │ │ │ │ │ ├── .npmignore │ │ │ │ │ ├── .travis.yml │ │ │ │ │ ├── History.md │ │ │ │ │ ├── Makefile │ │ │ │ │ ├── Readme.md │ │ │ │ │ ├── benchmark.js │ │ │ │ │ ├── component.json │ │ │ │ │ ├── examples.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── lib │ │ │ │ │ ├── head.js │ │ │ │ │ ├── querystring.js │ │ │ │ │ └── tail.js │ │ │ │ │ ├── package.json │ │ │ │ │ ├── querystring.js │ │ │ │ │ └── test │ │ │ │ │ ├── browser │ │ │ │ │ ├── expect.js │ │ │ │ │ ├── index.html │ │ │ │ │ ├── jquery.js │ │ │ │ │ ├── mocha.css │ │ │ │ │ ├── mocha.js │ │ │ │ │ ├── qs.css │ │ │ │ │ └── qs.js │ │ │ │ │ ├── parse.js │ │ │ │ │ └── stringify.js │ │ │ ├── package.json │ │ │ └── test.js │ │ ├── cookie-signature │ │ │ ├── .npmignore │ │ │ ├── History.md │ │ │ ├── Makefile │ │ │ ├── Readme.md │ │ │ ├── index.js │ │ │ └── package.json │ │ ├── cookie │ │ │ ├── .npmignore │ │ │ ├── .travis.yml │ │ │ ├── README.md │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ └── test │ │ │ │ ├── mocha.opts │ │ │ │ ├── parse.js │ │ │ │ └── serialize.js │ │ ├── debug │ │ │ ├── .npmignore │ │ │ ├── History.md │ │ │ ├── Readme.md │ │ │ ├── component.json │ │ │ ├── debug.js │ │ │ ├── example │ │ │ │ ├── app.js │ │ │ │ ├── browser.html │ │ │ │ ├── wildcards.js │ │ │ │ └── worker.js │ │ │ ├── index.js │ │ │ ├── lib │ │ │ │ └── debug.js │ │ │ └── package.json │ │ ├── fresh │ │ │ ├── .npmignore │ │ │ ├── Makefile │ │ │ ├── Readme.md │ │ │ ├── index.js │ │ │ └── package.json │ │ ├── methods │ │ │ ├── index.js │ │ │ └── package.json │ │ ├── mkdirp │ │ │ ├── .npmignore │ │ │ ├── .travis.yml │ │ │ ├── LICENSE │ │ │ ├── examples │ │ │ │ └── pow.js │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ ├── readme.markdown │ │ │ └── test │ │ │ │ ├── chmod.js │ │ │ │ ├── clobber.js │ │ │ │ ├── mkdirp.js │ │ │ │ ├── perm.js │ │ │ │ ├── perm_sync.js │ │ │ │ ├── race.js │ │ │ │ ├── rel.js │ │ │ │ ├── return.js │ │ │ │ ├── return_sync.js │ │ │ │ ├── root.js │ │ │ │ ├── sync.js │ │ │ │ ├── umask.js │ │ │ │ └── umask_sync.js │ │ ├── range-parser │ │ │ ├── .npmignore │ │ │ ├── History.md │ │ │ ├── Makefile │ │ │ ├── Readme.md │ │ │ ├── index.js │ │ │ └── package.json │ │ └── send │ │ │ ├── .npmignore │ │ │ ├── History.md │ │ │ ├── Makefile │ │ │ ├── Readme.md │ │ │ ├── index.js │ │ │ ├── lib │ │ │ ├── send.js │ │ │ └── utils.js │ │ │ ├── node_modules │ │ │ └── mime │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── mime.js │ │ │ │ ├── package.json │ │ │ │ ├── test.js │ │ │ │ └── types │ │ │ │ ├── mime.types │ │ │ │ └── node.types │ │ │ └── package.json │ ├── package.json │ └── test.js ├── misc │ ├── index.js │ ├── package.json │ └── readme.md ├── omxcontrol │ ├── index.js │ ├── package.json │ └── readme.md └── pandora │ ├── .package.json.un~ │ ├── index.js │ ├── package.json │ └── readme.md ├── package.json ├── private.js.example ├── public ├── css │ ├── bootstrap-responsive.css │ ├── bootstrap-responsive.min.css │ ├── bootstrap.css │ ├── bootstrap.min.css │ ├── button.css │ ├── flat-ui.css │ └── style.css ├── font │ ├── OpenSans-Bold.ttf │ ├── OpenSans-Light.ttf │ ├── OpenSans-Regular.ttf │ ├── OpenSans-Semibold.ttf │ ├── fontawesome-webfont.ttf │ ├── sosa-regular-webfont.ttf │ └── weather.ttf ├── images │ ├── Microphone.png │ ├── Refresh.png │ ├── back15.png │ ├── back60.png │ ├── custom_icon.png │ ├── forward15.png │ ├── forward60.png │ ├── kill.png │ ├── off.png │ ├── on.png │ ├── pause.png │ ├── play.png │ ├── power.png │ ├── remote-hi.png │ ├── restart.png │ ├── startup.png │ ├── stop.png │ ├── subtitles.png │ ├── voldown.png │ └── volup.png ├── img │ ├── glyphicons-halflings-white.png │ └── glyphicons-halflings.png ├── index.html ├── js │ ├── bootstrap.js │ ├── bootstrap.min.js │ ├── controller.js │ ├── drinks.js │ ├── dynamicpage.js │ ├── jquery-2.0.1.min.js │ ├── jquery.flexslider.js │ ├── lights.js │ ├── main.js │ ├── music.js │ ├── mustache.js │ ├── private.js.example │ ├── quo.js │ ├── remote.js │ ├── require.js │ └── videos.js ├── main.html ├── sub-cameras.html ├── sub-control.html ├── sub-downloads.html ├── sub-drinks.html ├── sub-lights.html ├── sub-music.html ├── sub-remote.html ├── sub-videos.html └── sub-voice.html └── routes ├── index.js └── user.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/express 2 | *.un~ 3 | *.log 4 | nohup.out 5 | *.BAK 6 | private.js 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Steven Hickson (work originally from Donald Derek) 4 | There is a slight caveat, that if you enjoy my software and meet me, you can buy me a drink. 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /node_modules/.bin/express: -------------------------------------------------------------------------------- 1 | ../express/bin/express -------------------------------------------------------------------------------- /node_modules/express/.npmignore: -------------------------------------------------------------------------------- 1 | .git* 2 | docs/ 3 | examples/ 4 | support/ 5 | test/ 6 | testing.js 7 | .DS_Store 8 | coverage.html 9 | lib-cov 10 | -------------------------------------------------------------------------------- /node_modules/express/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.8 4 | - 0.10 5 | -------------------------------------------------------------------------------- /node_modules/express/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2009-2011 TJ Holowaychuk 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /node_modules/express/Makefile: -------------------------------------------------------------------------------- 1 | 2 | MOCHA_OPTS= 3 | REPORTER = dot 4 | 5 | check: test 6 | 7 | test: test-unit test-acceptance 8 | 9 | test-unit: 10 | @NODE_ENV=test ./node_modules/.bin/mocha \ 11 | --reporter $(REPORTER) \ 12 | $(MOCHA_OPTS) 13 | 14 | test-acceptance: 15 | @NODE_ENV=test ./node_modules/.bin/mocha \ 16 | --reporter $(REPORTER) \ 17 | --bail \ 18 | test/acceptance/*.js 19 | 20 | test-cov: lib-cov 21 | @EXPRESS_COV=1 $(MAKE) test REPORTER=html-cov > coverage.html 22 | 23 | lib-cov: 24 | @jscoverage lib lib-cov 25 | 26 | benchmark: 27 | @./support/bench 28 | 29 | clean: 30 | rm -f coverage.html 31 | rm -fr lib-cov 32 | 33 | .PHONY: test test-unit test-acceptance benchmark clean 34 | -------------------------------------------------------------------------------- /node_modules/express/client.js: -------------------------------------------------------------------------------- 1 | 2 | var http = require('http'); 3 | 4 | var times = 50; 5 | 6 | while (times--) { 7 | var req = http.request({ 8 | port: 3000 9 | , method: 'POST' 10 | , headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 11 | }); 12 | 13 | req.on('response', function(res){ 14 | console.log(res.statusCode); 15 | }); 16 | 17 | var n = 500000; 18 | while (n--) { 19 | req.write('foo=bar&bar=baz&'); 20 | } 21 | 22 | req.write('foo=bar&bar=baz'); 23 | 24 | req.end(); 25 | } -------------------------------------------------------------------------------- /node_modules/express/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = process.env.EXPRESS_COV 3 | ? require('./lib-cov/express') 4 | : require('./lib/express'); -------------------------------------------------------------------------------- /node_modules/express/lib/express.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Module dependencies. 3 | */ 4 | 5 | var connect = require('connect') 6 | , proto = require('./application') 7 | , Route = require('./router/route') 8 | , Router = require('./router') 9 | , req = require('./request') 10 | , res = require('./response') 11 | , utils = connect.utils; 12 | 13 | /** 14 | * Expose `createApplication()`. 15 | */ 16 | 17 | exports = module.exports = createApplication; 18 | 19 | /** 20 | * Framework version. 21 | */ 22 | 23 | exports.version = '3.1.1'; 24 | 25 | /** 26 | * Expose mime. 27 | */ 28 | 29 | exports.mime = connect.mime; 30 | 31 | /** 32 | * Create an express application. 33 | * 34 | * @return {Function} 35 | * @api public 36 | */ 37 | 38 | function createApplication() { 39 | var app = connect(); 40 | utils.merge(app, proto); 41 | app.request = { __proto__: req }; 42 | app.response = { __proto__: res }; 43 | app.init(); 44 | return app; 45 | } 46 | 47 | /** 48 | * Expose connect.middleware as express.* 49 | * for example `express.logger` etc. 50 | */ 51 | 52 | for (var key in connect.middleware) { 53 | Object.defineProperty( 54 | exports 55 | , key 56 | , Object.getOwnPropertyDescriptor(connect.middleware, key)); 57 | } 58 | 59 | /** 60 | * Error on createServer(). 61 | */ 62 | 63 | exports.createServer = function(){ 64 | console.warn('Warning: express.createServer() is deprecated, express'); 65 | console.warn('applications no longer inherit from http.Server,'); 66 | console.warn('please use:'); 67 | console.warn(''); 68 | console.warn(' var express = require("express");'); 69 | console.warn(' var app = express();'); 70 | console.warn(''); 71 | return createApplication(); 72 | }; 73 | 74 | /** 75 | * Expose the prototypes. 76 | */ 77 | 78 | exports.application = proto; 79 | exports.request = req; 80 | exports.response = res; 81 | 82 | /** 83 | * Expose constructors. 84 | */ 85 | 86 | exports.Route = Route; 87 | exports.Router = Router; 88 | 89 | // Error handler title 90 | 91 | exports.errorHandler.title = 'Express'; 92 | 93 | -------------------------------------------------------------------------------- /node_modules/express/lib/middleware.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var utils = require('./utils'); 7 | 8 | /** 9 | * Initialization middleware, exposing the 10 | * request and response to eachother, as well 11 | * as defaulting the X-Powered-By header field. 12 | * 13 | * @param {Function} app 14 | * @return {Function} 15 | * @api private 16 | */ 17 | 18 | exports.init = function(app){ 19 | return function expressInit(req, res, next){ 20 | req.app = res.app = app; 21 | if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express'); 22 | req.res = res; 23 | res.req = req; 24 | req.next = next; 25 | 26 | req.__proto__ = app.request; 27 | res.__proto__ = app.response; 28 | 29 | res.locals = res.locals || utils.locals(res); 30 | 31 | next(); 32 | } 33 | }; 34 | -------------------------------------------------------------------------------- /node_modules/express/lib/router/route.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var utils = require('../utils'); 7 | 8 | /** 9 | * Expose `Route`. 10 | */ 11 | 12 | module.exports = Route; 13 | 14 | /** 15 | * Initialize `Route` with the given HTTP `method`, `path`, 16 | * and an array of `callbacks` and `options`. 17 | * 18 | * Options: 19 | * 20 | * - `sensitive` enable case-sensitive routes 21 | * - `strict` enable strict matching for trailing slashes 22 | * 23 | * @param {String} method 24 | * @param {String} path 25 | * @param {Array} callbacks 26 | * @param {Object} options. 27 | * @api private 28 | */ 29 | 30 | function Route(method, path, callbacks, options) { 31 | options = options || {}; 32 | this.path = path; 33 | this.method = method; 34 | this.callbacks = callbacks; 35 | this.regexp = utils.pathRegexp(path 36 | , this.keys = [] 37 | , options.sensitive 38 | , options.strict); 39 | } 40 | 41 | /** 42 | * Check if this route matches `path`, if so 43 | * populate `.params`. 44 | * 45 | * @param {String} path 46 | * @return {Boolean} 47 | * @api private 48 | */ 49 | 50 | Route.prototype.match = function(path){ 51 | var keys = this.keys 52 | , params = this.params = [] 53 | , m = this.regexp.exec(path); 54 | 55 | if (!m) return false; 56 | 57 | for (var i = 1, len = m.length; i < len; ++i) { 58 | var key = keys[i - 1]; 59 | 60 | var val = 'string' == typeof m[i] 61 | ? decodeURIComponent(m[i]) 62 | : m[i]; 63 | 64 | if (key) { 65 | params[key.name] = val; 66 | } else { 67 | params.push(val); 68 | } 69 | } 70 | 71 | return true; 72 | }; 73 | -------------------------------------------------------------------------------- /node_modules/express/lib/view.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Module dependencies. 3 | */ 4 | 5 | var path = require('path') 6 | , fs = require('fs') 7 | , utils = require('./utils') 8 | , dirname = path.dirname 9 | , basename = path.basename 10 | , extname = path.extname 11 | , exists = fs.existsSync || path.existsSync 12 | , join = path.join; 13 | 14 | /** 15 | * Expose `View`. 16 | */ 17 | 18 | module.exports = View; 19 | 20 | /** 21 | * Initialize a new `View` with the given `name`. 22 | * 23 | * Options: 24 | * 25 | * - `defaultEngine` the default template engine name 26 | * - `engines` template engine require() cache 27 | * - `root` root path for view lookup 28 | * 29 | * @param {String} name 30 | * @param {Object} options 31 | * @api private 32 | */ 33 | 34 | function View(name, options) { 35 | options = options || {}; 36 | this.name = name; 37 | this.root = options.root; 38 | var engines = options.engines; 39 | this.defaultEngine = options.defaultEngine; 40 | var ext = this.ext = extname(name); 41 | if (!ext) name += (ext = this.ext = ('.' != this.defaultEngine[0] ? '.' : '') + this.defaultEngine); 42 | this.engine = engines[ext] || (engines[ext] = require(ext.slice(1)).__express); 43 | this.path = this.lookup(name); 44 | } 45 | 46 | /** 47 | * Lookup view by the given `path` 48 | * 49 | * @param {String} path 50 | * @return {String} 51 | * @api private 52 | */ 53 | 54 | View.prototype.lookup = function(path){ 55 | var ext = this.ext; 56 | 57 | // . 58 | if (!utils.isAbsolute(path)) path = join(this.root, path); 59 | if (exists(path)) return path; 60 | 61 | // /index. 62 | path = join(dirname(path), basename(path, ext), 'index' + ext); 63 | if (exists(path)) return path; 64 | }; 65 | 66 | /** 67 | * Render with the given `options` and callback `fn(err, str)`. 68 | * 69 | * @param {Object} options 70 | * @param {Function} fn 71 | * @api private 72 | */ 73 | 74 | View.prototype.render = function(options, fn){ 75 | this.engine(this.path, options, fn); 76 | }; 77 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/buffer-crc32/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /node_modules/express/node_modules/buffer-crc32/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.6 4 | - 0.8 5 | notifications: 6 | email: 7 | recipients: 8 | - brianloveswords@gmail.com -------------------------------------------------------------------------------- /node_modules/express/node_modules/buffer-crc32/README.md: -------------------------------------------------------------------------------- 1 | # buffer-crc32 2 | 3 | [![Build Status](https://secure.travis-ci.org/brianloveswords/buffer-crc32.png?branch=master)](http://travis-ci.org/brianloveswords/buffer-crc32) 4 | 5 | crc32 that works with binary data and fancy character sets, outputs 6 | buffer, signed or unsigned data and has tests. 7 | 8 | Derived from the sample CRC implementation in the PNG specification: http://www.w3.org/TR/PNG/#D-CRCAppendix 9 | 10 | # install 11 | ``` 12 | npm install buffer-crc32 13 | ``` 14 | 15 | # example 16 | ```js 17 | var crc32 = require('buffer-crc32'); 18 | // works with buffers 19 | var buf = Buffer([0x00, 0x73, 0x75, 0x70, 0x20, 0x62, 0x72, 0x6f, 0x00]) 20 | crc32(buf) // -> 21 | 22 | // has convenience methods for getting signed or unsigned ints 23 | crc32.signed(buf) // -> -1805997238 24 | crc32.unsigned(buf) // -> 2488970058 25 | 26 | // will cast to buffer if given a string, so you can 27 | // directly use foreign characters safely 28 | crc32('自動販売機') // -> 29 | 30 | // and works in append mode too 31 | var partialCrc = crc32('hey'); 32 | var partialCrc = crc32(' ', partialCrc); 33 | var partialCrc = crc32('sup', partialCrc); 34 | var partialCrc = crc32(' ', partialCrc); 35 | var finalCrc = crc32('bros', partialCrc); // -> 36 | ``` 37 | 38 | # tests 39 | This was tested against the output of zlib's crc32 method. You can run 40 | the tests with`npm test` (requires tap) 41 | 42 | # see also 43 | https://github.com/alexgorbatchev/node-crc, `crc.buffer.crc32` also 44 | supports buffer inputs and return unsigned ints (thanks @tjholowaychuk). 45 | 46 | # license 47 | MIT/X11 48 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/buffer-crc32/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": { 3 | "name": "Brian J. Brennan", 4 | "email": "brianloveswords@gmail.com", 5 | "url": "http://bjb.io" 6 | }, 7 | "name": "buffer-crc32", 8 | "description": "A pure javascript CRC32 algorithm that plays nice with binary data", 9 | "version": "0.2.1", 10 | "contributors": [ 11 | { 12 | "name": "Vladimir Kuznetsov" 13 | } 14 | ], 15 | "homepage": "https://github.com/brianloveswords/buffer-crc32", 16 | "repository": { 17 | "type": "git", 18 | "url": "git://github.com/brianloveswords/buffer-crc32.git" 19 | }, 20 | "main": "index.js", 21 | "scripts": { 22 | "test": "./node_modules/.bin/tap tests/*.test.js" 23 | }, 24 | "dependencies": {}, 25 | "devDependencies": { 26 | "tap": "~0.2.5" 27 | }, 28 | "optionalDependencies": {}, 29 | "engines": { 30 | "node": "*" 31 | }, 32 | "_id": "buffer-crc32@0.2.1", 33 | "_engineSupported": true, 34 | "_npmVersion": "1.1.4", 35 | "_nodeVersion": "v0.6.19", 36 | "_defaultsLoaded": true, 37 | "_from": "buffer-crc32@~0.2.1" 38 | } 39 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/commander/.npmignore: -------------------------------------------------------------------------------- 1 | support 2 | test 3 | examples 4 | *.sock 5 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/commander/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.4 4 | - 0.6 5 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/commander/Makefile: -------------------------------------------------------------------------------- 1 | 2 | TESTS = $(shell find test/test.*.js) 3 | 4 | test: 5 | @./test/run $(TESTS) 6 | 7 | .PHONY: test -------------------------------------------------------------------------------- /node_modules/express/node_modules/commander/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = require('./lib/commander'); -------------------------------------------------------------------------------- /node_modules/express/node_modules/commander/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "commander", 3 | "version": "0.6.1", 4 | "description": "the complete solution for node.js command-line programs", 5 | "keywords": [ 6 | "command", 7 | "option", 8 | "parser", 9 | "prompt", 10 | "stdin" 11 | ], 12 | "author": { 13 | "name": "TJ Holowaychuk", 14 | "email": "tj@vision-media.ca" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git://github.com/visionmedia/commander.js.git" 19 | }, 20 | "dependencies": {}, 21 | "devDependencies": { 22 | "should": ">= 0.0.1" 23 | }, 24 | "scripts": { 25 | "test": "make test" 26 | }, 27 | "main": "index", 28 | "engines": { 29 | "node": ">= 0.4.x" 30 | }, 31 | "_id": "commander@0.6.1", 32 | "optionalDependencies": {}, 33 | "_engineSupported": true, 34 | "_npmVersion": "1.1.4", 35 | "_nodeVersion": "v0.6.19", 36 | "_defaultsLoaded": true, 37 | "dist": { 38 | "shasum": "73a74d44f4524ffa0fa2afefc2c13e845c289647" 39 | }, 40 | "_from": "commander@0.6.1" 41 | } 42 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/.npmignore: -------------------------------------------------------------------------------- 1 | *.markdown 2 | *.md 3 | .git* 4 | Makefile 5 | benchmarks/ 6 | docs/ 7 | examples/ 8 | install.sh 9 | support/ 10 | test/ 11 | .DS_Store 12 | coverage.html 13 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.6 4 | - 0.8 5 | - 0.9 -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2010 Sencha Inc. 4 | Copyright (c) 2011 LearnBoost 5 | Copyright (c) 2011 TJ Holowaychuk 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining 8 | a copy of this software and associated documentation files (the 9 | 'Software'), to deal in the Software without restriction, including 10 | without limitation the rights to use, copy, modify, merge, publish, 11 | distribute, sublicense, and/or sell copies of the Software, and to 12 | permit persons to whom the Software is furnished to do so, subject to 13 | the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be 16 | included in all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 19 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = process.env.CONNECT_COV 3 | ? require('./lib-cov/connect') 4 | : require('./lib/connect'); -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/cache.js: -------------------------------------------------------------------------------- 1 | 2 | /*! 3 | * Connect - Cache 4 | * Copyright(c) 2011 Sencha Inc. 5 | * MIT Licensed 6 | */ 7 | 8 | /** 9 | * Expose `Cache`. 10 | */ 11 | 12 | module.exports = Cache; 13 | 14 | /** 15 | * LRU cache store. 16 | * 17 | * @param {Number} limit 18 | * @api private 19 | */ 20 | 21 | function Cache(limit) { 22 | this.store = {}; 23 | this.keys = []; 24 | this.limit = limit; 25 | } 26 | 27 | /** 28 | * Touch `key`, promoting the object. 29 | * 30 | * @param {String} key 31 | * @param {Number} i 32 | * @api private 33 | */ 34 | 35 | Cache.prototype.touch = function(key, i){ 36 | this.keys.splice(i,1); 37 | this.keys.push(key); 38 | }; 39 | 40 | /** 41 | * Remove `key`. 42 | * 43 | * @param {String} key 44 | * @api private 45 | */ 46 | 47 | Cache.prototype.remove = function(key){ 48 | delete this.store[key]; 49 | }; 50 | 51 | /** 52 | * Get the object stored for `key`. 53 | * 54 | * @param {String} key 55 | * @return {Array} 56 | * @api private 57 | */ 58 | 59 | Cache.prototype.get = function(key){ 60 | return this.store[key]; 61 | }; 62 | 63 | /** 64 | * Add a cache `key`. 65 | * 66 | * @param {String} key 67 | * @return {Array} 68 | * @api private 69 | */ 70 | 71 | Cache.prototype.add = function(key){ 72 | // initialize store 73 | var len = this.keys.push(key); 74 | 75 | // limit reached, invalidate LRU 76 | if (len > this.limit) this.remove(this.keys.shift()); 77 | 78 | var arr = this.store[key] = []; 79 | arr.createdAt = new Date; 80 | return arr; 81 | }; 82 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/connect.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Connect 3 | * Copyright(c) 2010 Sencha Inc. 4 | * Copyright(c) 2011 TJ Holowaychuk 5 | * MIT Licensed 6 | */ 7 | 8 | /** 9 | * Module dependencies. 10 | */ 11 | 12 | var EventEmitter = require('events').EventEmitter 13 | , proto = require('./proto') 14 | , utils = require('./utils') 15 | , path = require('path') 16 | , basename = path.basename 17 | , fs = require('fs'); 18 | 19 | // node patches 20 | 21 | require('./patch'); 22 | 23 | // expose createServer() as the module 24 | 25 | exports = module.exports = createServer; 26 | 27 | /** 28 | * Framework version. 29 | */ 30 | 31 | exports.version = '2.7.4'; 32 | 33 | /** 34 | * Expose mime module. 35 | */ 36 | 37 | exports.mime = require('./middleware/static').mime; 38 | 39 | /** 40 | * Expose the prototype. 41 | */ 42 | 43 | exports.proto = proto; 44 | 45 | /** 46 | * Auto-load middleware getters. 47 | */ 48 | 49 | exports.middleware = {}; 50 | 51 | /** 52 | * Expose utilities. 53 | */ 54 | 55 | exports.utils = utils; 56 | 57 | /** 58 | * Create a new connect server. 59 | * 60 | * @return {Function} 61 | * @api public 62 | */ 63 | 64 | function createServer() { 65 | function app(req, res, next){ app.handle(req, res, next); } 66 | utils.merge(app, proto); 67 | utils.merge(app, EventEmitter.prototype); 68 | app.route = '/'; 69 | app.stack = []; 70 | for (var i = 0; i < arguments.length; ++i) { 71 | app.use(arguments[i]); 72 | } 73 | return app; 74 | }; 75 | 76 | /** 77 | * Support old `.createServer()` method. 78 | */ 79 | 80 | createServer.createServer = createServer; 81 | 82 | /** 83 | * Auto-load bundled middleware with getters. 84 | */ 85 | 86 | fs.readdirSync(__dirname + '/middleware').forEach(function(filename){ 87 | if (!/\.js$/.test(filename)) return; 88 | var name = basename(filename, '.js'); 89 | function load(){ return require('./middleware/' + name); } 90 | exports.middleware.__defineGetter__(name, load); 91 | exports.__defineGetter__(name, load); 92 | }); 93 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/middleware/bodyParser.js: -------------------------------------------------------------------------------- 1 | 2 | /*! 3 | * Connect - bodyParser 4 | * Copyright(c) 2010 Sencha Inc. 5 | * Copyright(c) 2011 TJ Holowaychuk 6 | * MIT Licensed 7 | */ 8 | 9 | /** 10 | * Module dependencies. 11 | */ 12 | 13 | var multipart = require('./multipart') 14 | , urlencoded = require('./urlencoded') 15 | , json = require('./json'); 16 | 17 | /** 18 | * Body parser: 19 | * 20 | * Parse request bodies, supports _application/json_, 21 | * _application/x-www-form-urlencoded_, and _multipart/form-data_. 22 | * 23 | * This is equivalent to: 24 | * 25 | * app.use(connect.json()); 26 | * app.use(connect.urlencoded()); 27 | * app.use(connect.multipart()); 28 | * 29 | * Examples: 30 | * 31 | * connect() 32 | * .use(connect.bodyParser()) 33 | * .use(function(req, res) { 34 | * res.end('viewing user ' + req.body.user.name); 35 | * }); 36 | * 37 | * $ curl -d 'user[name]=tj' http://local/ 38 | * $ curl -d '{"user":{"name":"tj"}}' -H "Content-Type: application/json" http://local/ 39 | * 40 | * View [json](json.html), [urlencoded](urlencoded.html), and [multipart](multipart.html) for more info. 41 | * 42 | * @param {Object} options 43 | * @return {Function} 44 | * @api public 45 | */ 46 | 47 | exports = module.exports = function bodyParser(options){ 48 | var _urlencoded = urlencoded(options) 49 | , _multipart = multipart(options) 50 | , _json = json(options); 51 | 52 | return function bodyParser(req, res, next) { 53 | _json(req, res, function(err){ 54 | if (err) return next(err); 55 | _urlencoded(req, res, function(err){ 56 | if (err) return next(err); 57 | _multipart(req, res, next); 58 | }); 59 | }); 60 | } 61 | }; -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/middleware/cookieParser.js: -------------------------------------------------------------------------------- 1 | 2 | /*! 3 | * Connect - cookieParser 4 | * Copyright(c) 2010 Sencha Inc. 5 | * Copyright(c) 2011 TJ Holowaychuk 6 | * MIT Licensed 7 | */ 8 | 9 | /** 10 | * Module dependencies. 11 | */ 12 | 13 | var utils = require('./../utils') 14 | , cookie = require('cookie'); 15 | 16 | /** 17 | * Cookie parser: 18 | * 19 | * Parse _Cookie_ header and populate `req.cookies` 20 | * with an object keyed by the cookie names. Optionally 21 | * you may enabled signed cookie support by passing 22 | * a `secret` string, which assigns `req.secret` so 23 | * it may be used by other middleware. 24 | * 25 | * Examples: 26 | * 27 | * connect() 28 | * .use(connect.cookieParser('optional secret string')) 29 | * .use(function(req, res, next){ 30 | * res.end(JSON.stringify(req.cookies)); 31 | * }) 32 | * 33 | * @param {String} secret 34 | * @return {Function} 35 | * @api public 36 | */ 37 | 38 | module.exports = function cookieParser(secret){ 39 | return function cookieParser(req, res, next) { 40 | if (req.cookies) return next(); 41 | var cookies = req.headers.cookie; 42 | 43 | req.secret = secret; 44 | req.cookies = {}; 45 | req.signedCookies = {}; 46 | 47 | if (cookies) { 48 | try { 49 | req.cookies = cookie.parse(cookies); 50 | if (secret) { 51 | req.signedCookies = utils.parseSignedCookies(req.cookies, secret); 52 | req.signedCookies = utils.parseJSONCookies(req.signedCookies); 53 | } 54 | req.cookies = utils.parseJSONCookies(req.cookies); 55 | } catch (err) { 56 | err.status = 400; 57 | return next(err); 58 | } 59 | } 60 | next(); 61 | }; 62 | }; 63 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/middleware/csrf.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Connect - csrf 3 | * Copyright(c) 2011 Sencha Inc. 4 | * MIT Licensed 5 | */ 6 | 7 | /** 8 | * Module dependencies. 9 | */ 10 | 11 | var utils = require('../utils'); 12 | 13 | /** 14 | * Anti CSRF: 15 | * 16 | * CRSF protection middleware. 17 | * 18 | * By default this middleware generates a token named "_csrf" 19 | * which should be added to requests which mutate 20 | * state, within a hidden form field, query-string etc. This 21 | * token is validated against the visitor's `req.session._csrf` 22 | * property. 23 | * 24 | * The default `value` function checks `req.body` generated 25 | * by the `bodyParser()` middleware, `req.query` generated 26 | * by `query()`, and the "X-CSRF-Token" header field. 27 | * 28 | * This middleware requires session support, thus should be added 29 | * somewhere _below_ `session()` and `cookieParser()`. 30 | * 31 | * Options: 32 | * 33 | * - `value` a function accepting the request, returning the token 34 | * 35 | * @param {Object} options 36 | * @api public 37 | */ 38 | 39 | module.exports = function csrf(options) { 40 | options = options || {}; 41 | var value = options.value || defaultValue; 42 | 43 | return function(req, res, next){ 44 | // generate CSRF token 45 | var token = req.session._csrf || (req.session._csrf = utils.uid(24)); 46 | 47 | // ignore these methods 48 | if ('GET' == req.method || 'HEAD' == req.method || 'OPTIONS' == req.method) return next(); 49 | 50 | // determine value 51 | var val = value(req); 52 | 53 | // check 54 | if (val != token) return next(utils.error(403)); 55 | 56 | next(); 57 | } 58 | }; 59 | 60 | /** 61 | * Default value function, checking the `req.body` 62 | * and `req.query` for the CSRF token. 63 | * 64 | * @param {IncomingMessage} req 65 | * @return {String} 66 | * @api private 67 | */ 68 | 69 | function defaultValue(req) { 70 | return (req.body && req.body._csrf) 71 | || (req.query && req.query._csrf) 72 | || (req.headers['x-csrf-token']); 73 | } 74 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/middleware/favicon.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Connect - favicon 3 | * Copyright(c) 2010 Sencha Inc. 4 | * Copyright(c) 2011 TJ Holowaychuk 5 | * MIT Licensed 6 | */ 7 | 8 | /** 9 | * Module dependencies. 10 | */ 11 | 12 | var fs = require('fs') 13 | , utils = require('../utils'); 14 | 15 | /** 16 | * Favicon: 17 | * 18 | * By default serves the connect favicon, or the favicon 19 | * located by the given `path`. 20 | * 21 | * Options: 22 | * 23 | * - `maxAge` cache-control max-age directive, defaulting to 1 day 24 | * 25 | * Examples: 26 | * 27 | * Serve default favicon: 28 | * 29 | * connect() 30 | * .use(connect.favicon()) 31 | * 32 | * Serve favicon before logging for brevity: 33 | * 34 | * connect() 35 | * .use(connect.favicon()) 36 | * .use(connect.logger('dev')) 37 | * 38 | * Serve custom favicon: 39 | * 40 | * connect() 41 | * .use(connect.favicon('public/favicon.ico')) 42 | * 43 | * @param {String} path 44 | * @param {Object} options 45 | * @return {Function} 46 | * @api public 47 | */ 48 | 49 | module.exports = function favicon(path, options){ 50 | var options = options || {} 51 | , path = path || __dirname + '/../public/favicon.ico' 52 | , maxAge = options.maxAge || 86400000 53 | , icon; // favicon cache 54 | 55 | return function favicon(req, res, next){ 56 | if ('/favicon.ico' == req.url) { 57 | if (icon) { 58 | res.writeHead(200, icon.headers); 59 | res.end(icon.body); 60 | } else { 61 | fs.readFile(path, function(err, buf){ 62 | if (err) return next(err); 63 | icon = { 64 | headers: { 65 | 'Content-Type': 'image/x-icon' 66 | , 'Content-Length': buf.length 67 | , 'ETag': '"' + utils.md5(buf) + '"' 68 | , 'Cache-Control': 'public, max-age=' + (maxAge / 1000) 69 | }, 70 | body: buf 71 | }; 72 | res.writeHead(200, icon.headers); 73 | res.end(icon.body); 74 | }); 75 | } 76 | } else { 77 | next(); 78 | } 79 | }; 80 | }; 81 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/middleware/json.js: -------------------------------------------------------------------------------- 1 | 2 | /*! 3 | * Connect - json 4 | * Copyright(c) 2010 Sencha Inc. 5 | * Copyright(c) 2011 TJ Holowaychuk 6 | * MIT Licensed 7 | */ 8 | 9 | /** 10 | * Module dependencies. 11 | */ 12 | 13 | var utils = require('../utils') 14 | , _limit = require('./limit'); 15 | 16 | /** 17 | * noop middleware. 18 | */ 19 | 20 | function noop(req, res, next) { 21 | next(); 22 | } 23 | 24 | /** 25 | * JSON: 26 | * 27 | * Parse JSON request bodies, providing the 28 | * parsed object as `req.body`. 29 | * 30 | * Options: 31 | * 32 | * - `strict` when `false` anything `JSON.parse()` accepts will be parsed 33 | * - `reviver` used as the second "reviver" argument for JSON.parse 34 | * - `limit` byte limit disabled by default 35 | * 36 | * @param {Object} options 37 | * @return {Function} 38 | * @api public 39 | */ 40 | 41 | exports = module.exports = function(options){ 42 | var options = options || {} 43 | , strict = options.strict !== false; 44 | 45 | var limit = options.limit 46 | ? _limit(options.limit) 47 | : noop; 48 | 49 | return function json(req, res, next) { 50 | if (req._body) return next(); 51 | req.body = req.body || {}; 52 | 53 | if (!utils.hasBody(req)) return next(); 54 | 55 | // check Content-Type 56 | if ('application/json' != utils.mime(req)) return next(); 57 | 58 | // flag as parsed 59 | req._body = true; 60 | 61 | // parse 62 | limit(req, res, function(err){ 63 | if (err) return next(err); 64 | var buf = ''; 65 | req.setEncoding('utf8'); 66 | req.on('data', function(chunk){ buf += chunk }); 67 | req.on('end', function(){ 68 | var first = buf.trim()[0]; 69 | 70 | if (0 == buf.length) { 71 | return next(utils.error(400, 'invalid json, empty body')); 72 | } 73 | 74 | if (strict && '{' != first && '[' != first) return next(utils.error(400, 'invalid json')); 75 | try { 76 | req.body = JSON.parse(buf, options.reviver); 77 | } catch (err){ 78 | err.body = buf; 79 | err.status = 400; 80 | return next(err); 81 | } 82 | next(); 83 | }); 84 | }); 85 | }; 86 | }; 87 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/middleware/limit.js: -------------------------------------------------------------------------------- 1 | 2 | /*! 3 | * Connect - limit 4 | * Copyright(c) 2011 TJ Holowaychuk 5 | * MIT Licensed 6 | */ 7 | 8 | /** 9 | * Module dependencies. 10 | */ 11 | 12 | var utils = require('../utils'); 13 | 14 | /** 15 | * Limit: 16 | * 17 | * Limit request bodies to the given size in `bytes`. 18 | * 19 | * A string representation of the bytesize may also be passed, 20 | * for example "5mb", "200kb", "1gb", etc. 21 | * 22 | * connect() 23 | * .use(connect.limit('5.5mb')) 24 | * .use(handleImageUpload) 25 | * 26 | * @param {Number|String} bytes 27 | * @return {Function} 28 | * @api public 29 | */ 30 | 31 | module.exports = function limit(bytes){ 32 | if ('string' == typeof bytes) bytes = utils.parseBytes(bytes); 33 | if ('number' != typeof bytes) throw new Error('limit() bytes required'); 34 | return function limit(req, res, next){ 35 | var received = 0 36 | , len = req.headers['content-length'] 37 | ? parseInt(req.headers['content-length'], 10) 38 | : null; 39 | 40 | // self-awareness 41 | if (req._limit) return next(); 42 | req._limit = true; 43 | 44 | // limit by content-length 45 | if (len && len > bytes) return next(utils.error(413)); 46 | 47 | // limit 48 | req.on('data', function(chunk){ 49 | received += chunk.length; 50 | if (received > bytes) req.destroy(); 51 | }); 52 | 53 | next(); 54 | }; 55 | }; 56 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/middleware/methodOverride.js: -------------------------------------------------------------------------------- 1 | 2 | /*! 3 | * Connect - methodOverride 4 | * Copyright(c) 2010 Sencha Inc. 5 | * Copyright(c) 2011 TJ Holowaychuk 6 | * MIT Licensed 7 | */ 8 | 9 | /** 10 | * Method Override: 11 | * 12 | * Provides faux HTTP method support. 13 | * 14 | * Pass an optional `key` to use when checking for 15 | * a method override, othewise defaults to _\_method_. 16 | * The original method is available via `req.originalMethod`. 17 | * 18 | * @param {String} key 19 | * @return {Function} 20 | * @api public 21 | */ 22 | 23 | module.exports = function methodOverride(key){ 24 | key = key || "_method"; 25 | return function methodOverride(req, res, next) { 26 | req.originalMethod = req.originalMethod || req.method; 27 | 28 | // req.body 29 | if (req.body && key in req.body) { 30 | req.method = req.body[key].toUpperCase(); 31 | delete req.body[key]; 32 | // check X-HTTP-Method-Override 33 | } else if (req.headers['x-http-method-override']) { 34 | req.method = req.headers['x-http-method-override'].toUpperCase(); 35 | } 36 | 37 | next(); 38 | }; 39 | }; 40 | 41 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/middleware/query.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Connect - query 3 | * Copyright(c) 2011 TJ Holowaychuk 4 | * Copyright(c) 2011 Sencha Inc. 5 | * MIT Licensed 6 | */ 7 | 8 | /** 9 | * Module dependencies. 10 | */ 11 | 12 | var qs = require('qs') 13 | , parse = require('../utils').parseUrl; 14 | 15 | /** 16 | * Query: 17 | * 18 | * Automatically parse the query-string when available, 19 | * populating the `req.query` object. 20 | * 21 | * Examples: 22 | * 23 | * connect() 24 | * .use(connect.query()) 25 | * .use(function(req, res){ 26 | * res.end(JSON.stringify(req.query)); 27 | * }); 28 | * 29 | * The `options` passed are provided to qs.parse function. 30 | * 31 | * @param {Object} options 32 | * @return {Function} 33 | * @api public 34 | */ 35 | 36 | module.exports = function query(options){ 37 | return function query(req, res, next){ 38 | if (!req.query) { 39 | req.query = ~req.url.indexOf('?') 40 | ? qs.parse(parse(req).query, options) 41 | : {}; 42 | } 43 | 44 | next(); 45 | }; 46 | }; 47 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/middleware/responseTime.js: -------------------------------------------------------------------------------- 1 | 2 | /*! 3 | * Connect - responseTime 4 | * Copyright(c) 2011 TJ Holowaychuk 5 | * MIT Licensed 6 | */ 7 | 8 | /** 9 | * Reponse time: 10 | * 11 | * Adds the `X-Response-Time` header displaying the response 12 | * duration in milliseconds. 13 | * 14 | * @return {Function} 15 | * @api public 16 | */ 17 | 18 | module.exports = function responseTime(){ 19 | return function(req, res, next){ 20 | var start = new Date; 21 | 22 | if (res._responseTime) return next(); 23 | res._responseTime = true; 24 | 25 | res.on('header', function(){ 26 | var duration = new Date - start; 27 | res.setHeader('X-Response-Time', duration + 'ms'); 28 | }); 29 | 30 | next(); 31 | }; 32 | }; 33 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/middleware/session/store.js: -------------------------------------------------------------------------------- 1 | 2 | /*! 3 | * Connect - session - Store 4 | * Copyright(c) 2010 Sencha Inc. 5 | * Copyright(c) 2011 TJ Holowaychuk 6 | * MIT Licensed 7 | */ 8 | 9 | /** 10 | * Module dependencies. 11 | */ 12 | 13 | var EventEmitter = require('events').EventEmitter 14 | , Session = require('./session') 15 | , Cookie = require('./cookie'); 16 | 17 | /** 18 | * Initialize abstract `Store`. 19 | * 20 | * @api private 21 | */ 22 | 23 | var Store = module.exports = function Store(options){}; 24 | 25 | /** 26 | * Inherit from `EventEmitter.prototype`. 27 | */ 28 | 29 | Store.prototype.__proto__ = EventEmitter.prototype; 30 | 31 | /** 32 | * Re-generate the given requests's session. 33 | * 34 | * @param {IncomingRequest} req 35 | * @return {Function} fn 36 | * @api public 37 | */ 38 | 39 | Store.prototype.regenerate = function(req, fn){ 40 | var self = this; 41 | this.destroy(req.sessionID, function(err){ 42 | self.generate(req); 43 | fn(err); 44 | }); 45 | }; 46 | 47 | /** 48 | * Load a `Session` instance via the given `sid` 49 | * and invoke the callback `fn(err, sess)`. 50 | * 51 | * @param {String} sid 52 | * @param {Function} fn 53 | * @api public 54 | */ 55 | 56 | Store.prototype.load = function(sid, fn){ 57 | var self = this; 58 | this.get(sid, function(err, sess){ 59 | if (err) return fn(err); 60 | if (!sess) return fn(); 61 | var req = { sessionID: sid, sessionStore: self }; 62 | sess = self.createSession(req, sess); 63 | fn(null, sess); 64 | }); 65 | }; 66 | 67 | /** 68 | * Create session from JSON `sess` data. 69 | * 70 | * @param {IncomingRequest} req 71 | * @param {Object} sess 72 | * @return {Session} 73 | * @api private 74 | */ 75 | 76 | Store.prototype.createSession = function(req, sess){ 77 | var expires = sess.cookie.expires 78 | , orig = sess.cookie.originalMaxAge; 79 | sess.cookie = new Cookie(sess.cookie); 80 | if ('string' == typeof expires) sess.cookie.expires = new Date(expires); 81 | sess.cookie.originalMaxAge = orig; 82 | req.session = new Session(req, sess); 83 | return req.session; 84 | }; 85 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/middleware/timeout.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Connect - timeout 3 | * Ported from https://github.com/LearnBoost/connect-timeout 4 | * MIT Licensed 5 | */ 6 | 7 | /** 8 | * Module dependencies. 9 | */ 10 | 11 | var debug = require('debug')('connect:timeout'); 12 | 13 | /** 14 | * Timeout: 15 | * 16 | * Times out the request in `ms`, defaulting to `5000`. The 17 | * method `req.clearTimeout()` is added to revert this behaviour 18 | * programmatically within your application's middleware, routes, etc. 19 | * 20 | * The timeout error is passed to `next()` so that you may customize 21 | * the response behaviour. This error has the `.timeout` property as 22 | * well as `.status == 408`. 23 | * 24 | * @param {Number} ms 25 | * @return {Function} 26 | * @api public 27 | */ 28 | 29 | module.exports = function timeout(ms) { 30 | ms = ms || 5000; 31 | 32 | return function(req, res, next) { 33 | var id = setTimeout(function(){ 34 | req.emit('timeout', ms); 35 | }, ms); 36 | 37 | req.on('timeout', function(){ 38 | if (res.headerSent) return debug('response started, cannot timeout'); 39 | var err = new Error('Response timeout'); 40 | err.timeout = ms; 41 | err.status = 503; 42 | next(err); 43 | }); 44 | 45 | req.clearTimeout = function(){ 46 | clearTimeout(id); 47 | }; 48 | 49 | res.on('header', function(){ 50 | clearTimeout(id); 51 | }); 52 | 53 | next(); 54 | }; 55 | }; 56 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/middleware/urlencoded.js: -------------------------------------------------------------------------------- 1 | 2 | /*! 3 | * Connect - urlencoded 4 | * Copyright(c) 2010 Sencha Inc. 5 | * Copyright(c) 2011 TJ Holowaychuk 6 | * MIT Licensed 7 | */ 8 | 9 | /** 10 | * Module dependencies. 11 | */ 12 | 13 | var utils = require('../utils') 14 | , _limit = require('./limit') 15 | , qs = require('qs'); 16 | 17 | /** 18 | * noop middleware. 19 | */ 20 | 21 | function noop(req, res, next) { 22 | next(); 23 | } 24 | 25 | /** 26 | * Urlencoded: 27 | * 28 | * Parse x-ww-form-urlencoded request bodies, 29 | * providing the parsed object as `req.body`. 30 | * 31 | * Options: 32 | * 33 | * - `limit` byte limit disabled by default 34 | * 35 | * @param {Object} options 36 | * @return {Function} 37 | * @api public 38 | */ 39 | 40 | exports = module.exports = function(options){ 41 | options = options || {}; 42 | 43 | var limit = options.limit 44 | ? _limit(options.limit) 45 | : noop; 46 | 47 | return function urlencoded(req, res, next) { 48 | if (req._body) return next(); 49 | req.body = req.body || {}; 50 | 51 | if (!utils.hasBody(req)) return next(); 52 | 53 | // check Content-Type 54 | if ('application/x-www-form-urlencoded' != utils.mime(req)) return next(); 55 | 56 | // flag as parsed 57 | req._body = true; 58 | 59 | // parse 60 | limit(req, res, function(err){ 61 | if (err) return next(err); 62 | var buf = ''; 63 | req.setEncoding('utf8'); 64 | req.on('data', function(chunk){ buf += chunk }); 65 | req.on('end', function(){ 66 | try { 67 | req.body = buf.length 68 | ? qs.parse(buf, options) 69 | : {}; 70 | next(); 71 | } catch (err){ 72 | err.body = buf; 73 | next(err); 74 | } 75 | }); 76 | }); 77 | } 78 | }; 79 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/middleware/vhost.js: -------------------------------------------------------------------------------- 1 | 2 | /*! 3 | * Connect - vhost 4 | * Copyright(c) 2010 Sencha Inc. 5 | * Copyright(c) 2011 TJ Holowaychuk 6 | * MIT Licensed 7 | */ 8 | 9 | /** 10 | * Vhost: 11 | * 12 | * Setup vhost for the given `hostname` and `server`. 13 | * 14 | * connect() 15 | * .use(connect.vhost('foo.com', fooApp)) 16 | * .use(connect.vhost('bar.com', barApp)) 17 | * .use(connect.vhost('*.com', mainApp)) 18 | * 19 | * The `server` may be a Connect server or 20 | * a regular Node `http.Server`. 21 | * 22 | * @param {String} hostname 23 | * @param {Server} server 24 | * @return {Function} 25 | * @api public 26 | */ 27 | 28 | module.exports = function vhost(hostname, server){ 29 | if (!hostname) throw new Error('vhost hostname required'); 30 | if (!server) throw new Error('vhost server required'); 31 | var regexp = new RegExp('^' + hostname.replace(/[^*\w]/g, '\\$&').replace(/[*]/g, '(?:.*?)') + '$', 'i'); 32 | if (server.onvhost) server.onvhost(hostname); 33 | return function vhost(req, res, next){ 34 | if (!req.headers.host) return next(); 35 | var host = req.headers.host.split(':')[0]; 36 | if (!regexp.test(host)) return next(); 37 | if ('function' == typeof server) return server(req, res, next); 38 | server.emit('request', req, res); 39 | }; 40 | }; 41 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/patch.js: -------------------------------------------------------------------------------- 1 | 2 | /*! 3 | * Connect 4 | * Copyright(c) 2011 TJ Holowaychuk 5 | * MIT Licensed 6 | */ 7 | 8 | /** 9 | * Module dependencies. 10 | */ 11 | 12 | var http = require('http') 13 | , res = http.ServerResponse.prototype 14 | , setHeader = res.setHeader 15 | , _renderHeaders = res._renderHeaders 16 | , writeHead = res.writeHead; 17 | 18 | // apply only once 19 | 20 | if (!res._hasConnectPatch) { 21 | 22 | /** 23 | * Provide a public "header sent" flag 24 | * until node does. 25 | * 26 | * @return {Boolean} 27 | * @api public 28 | */ 29 | 30 | res.__defineGetter__('headerSent', function(){ 31 | return this._header; 32 | }); 33 | 34 | /** 35 | * Set header `field` to `val`, special-casing 36 | * the `Set-Cookie` field for multiple support. 37 | * 38 | * @param {String} field 39 | * @param {String} val 40 | * @api public 41 | */ 42 | 43 | res.setHeader = function(field, val){ 44 | var key = field.toLowerCase() 45 | , prev; 46 | 47 | // special-case Set-Cookie 48 | if (this._headers && 'set-cookie' == key) { 49 | if (prev = this.getHeader(field)) { 50 | val = Array.isArray(prev) 51 | ? prev.concat(val) 52 | : [prev, val]; 53 | } 54 | // charset 55 | } else if ('content-type' == key && this.charset) { 56 | val += '; charset=' + this.charset; 57 | } 58 | 59 | return setHeader.call(this, field, val); 60 | }; 61 | 62 | /** 63 | * Proxy to emit "header" event. 64 | */ 65 | 66 | res._renderHeaders = function(){ 67 | if (!this._emittedHeader) this.emit('header'); 68 | this._emittedHeader = true; 69 | return _renderHeaders.call(this); 70 | }; 71 | 72 | res.writeHead = function(){ 73 | if (!this._emittedHeader) this.emit('header'); 74 | this._emittedHeader = true; 75 | return writeHead.apply(this, arguments); 76 | }; 77 | 78 | res._hasConnectPatch = true; 79 | } 80 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {error} 5 | 6 | 7 | 8 |
9 |

{title}

10 |

{statusCode} {error}

11 |
    {stack}
12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/favicon.ico -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_add.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_attach.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_attach.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_code.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_copy.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_delete.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_edit.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_error.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_excel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_excel.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_find.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_find.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_gear.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_go.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_go.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_green.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_key.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_lightning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_lightning.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_link.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_paintbrush.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_paintbrush.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_paste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_paste.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_red.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_refresh.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_save.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_acrobat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_acrobat.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_actionscript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_actionscript.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_add.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_c.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_camera.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_cd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_cd.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_code.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_code_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_code_red.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_coldfusion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_coldfusion.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_compressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_compressed.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_copy.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_cplusplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_cplusplus.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_csharp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_csharp.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_cup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_cup.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_database.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_database.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_delete.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_dvd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_dvd.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_edit.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_error.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_excel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_excel.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_find.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_find.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_flash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_flash.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_freehand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_freehand.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_gear.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_get.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_get.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_go.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_go.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_h.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_horizontal.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_key.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_lightning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_lightning.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_link.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_magnify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_magnify.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_medal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_medal.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_office.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_office.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_paint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_paint.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_paintbrush.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_paintbrush.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_paste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_paste.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_php.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_php.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_picture.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_powerpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_powerpoint.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_put.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_put.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_ruby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_ruby.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_stack.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_star.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_swoosh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_swoosh.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_text.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_text_width.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_text_width.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_tux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_tux.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_vector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_vector.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_visualstudio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_visualstudio.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_width.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_width.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_word.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_word.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_world.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_world.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_wrench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_wrench.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_white_zip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_white_zip.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_word.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_word.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/lib/public/icons/page_world.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/lib/public/icons/page_world.png -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/buffer-crc32/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/buffer-crc32/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.6 4 | - 0.8 5 | notifications: 6 | email: 7 | recipients: 8 | - brianloveswords@gmail.com -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/buffer-crc32/README.md: -------------------------------------------------------------------------------- 1 | # buffer-crc32 2 | 3 | [![Build Status](https://secure.travis-ci.org/brianloveswords/buffer-crc32.png?branch=master)](http://travis-ci.org/brianloveswords/buffer-crc32) 4 | 5 | crc32 that works with binary data and fancy character sets, outputs 6 | buffer, signed or unsigned data and has tests. 7 | 8 | Derived from the sample CRC implementation in the PNG specification: http://www.w3.org/TR/PNG/#D-CRCAppendix 9 | 10 | # install 11 | ``` 12 | npm install buffer-crc32 13 | ``` 14 | 15 | # example 16 | ```js 17 | var crc32 = require('buffer-crc32'); 18 | // works with buffers 19 | var buf = Buffer([[0x00, 0x73, 0x75, 0x70, 0x20, 0x62, 0x72, 0x6f, 0x00]) 20 | crc32(buf) // -> 21 | 22 | // has convenience methods for getting signed or unsigned ints 23 | crc32.signed(buf) // -> -1805997238 24 | crc32.unsigned(buf) // -> 2488970058 25 | 26 | // will cast to buffer if given a string, so you can 27 | // directly use foreign characters safely 28 | crc32('自動販売機') // -> 29 | ``` 30 | 31 | # tests 32 | This was tested against the output of zlib's crc32 method. You can run 33 | the tests with`npm test` (requires tap) 34 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/buffer-crc32/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": { 3 | "name": "Brian J. Brennan", 4 | "email": "brianloveswords@gmail.com", 5 | "url": "http://bjb.io" 6 | }, 7 | "name": "buffer-crc32", 8 | "description": "A pure javascript CRC32 algorithm that plays nice with binary data", 9 | "version": "0.1.1", 10 | "homepage": "https://github.com/brianloveswords/buffer-crc32", 11 | "repository": { 12 | "type": "git", 13 | "url": "git://github.com/brianloveswords/buffer-crc32.git" 14 | }, 15 | "main": "index.js", 16 | "scripts": { 17 | "test": "./node_modules/.bin/tap tests/*.test.js" 18 | }, 19 | "dependencies": {}, 20 | "devDependencies": { 21 | "tap": "~0.2.5" 22 | }, 23 | "optionalDependencies": {}, 24 | "engines": { 25 | "node": "*" 26 | }, 27 | "_id": "buffer-crc32@0.1.1", 28 | "_engineSupported": true, 29 | "_npmVersion": "1.1.4", 30 | "_nodeVersion": "v0.6.19", 31 | "_defaultsLoaded": true, 32 | "dist": { 33 | "shasum": "1f770126dd9593e89509434e8c59528b2e030a27" 34 | }, 35 | "_from": "buffer-crc32@0.1.1" 36 | } 37 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/buffer-crc32/tests/crc.test.js: -------------------------------------------------------------------------------- 1 | var crc32 = require('..'); 2 | var test = require('tap').test; 3 | 4 | test('simple crc32 is no problem', function (t) { 5 | var input = Buffer('hey sup bros'); 6 | var expected = Buffer([0x47, 0xfa, 0x55, 0x70]); 7 | t.same(crc32(input), expected); 8 | t.end(); 9 | }); 10 | 11 | test('another simple one', function (t) { 12 | var input = Buffer('IEND'); 13 | var expected = Buffer([0xae, 0x42, 0x60, 0x82]); 14 | t.same(crc32(input), expected); 15 | t.end(); 16 | }); 17 | 18 | test('slightly more complex', function (t) { 19 | var input = Buffer([0x00, 0x00, 0x00]); 20 | var expected = Buffer([0xff, 0x41, 0xd9, 0x12]); 21 | t.same(crc32(input), expected); 22 | t.end(); 23 | }); 24 | 25 | test('complex crc32 gets calculated like a champ', function (t) { 26 | var input = Buffer('शीर्षक'); 27 | var expected = Buffer([0x17, 0xb8, 0xaf, 0xf1]); 28 | t.same(crc32(input), expected); 29 | t.end(); 30 | }); 31 | 32 | test('casts to buffer if necessary', function (t) { 33 | var input = 'शीर्षक'; 34 | var expected = Buffer([0x17, 0xb8, 0xaf, 0xf1]); 35 | t.same(crc32(input), expected); 36 | t.end(); 37 | }); 38 | 39 | test('can do unsigned', function (t) { 40 | var input = 'ham sandwich'; 41 | var expected = -1891873021; 42 | t.same(crc32.signed(input), expected); 43 | t.end(); 44 | }); 45 | 46 | test('can do signed', function (t) { 47 | var input = 'bear sandwich'; 48 | var expected = 3711466352; 49 | t.same(crc32.unsigned(input), expected); 50 | t.end(); 51 | }); 52 | 53 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/bytes/.npmignore: -------------------------------------------------------------------------------- 1 | test 2 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/bytes/History.md: -------------------------------------------------------------------------------- 1 | 2 | 0.2.0 / 2012-10-28 3 | ================== 4 | 5 | * bytes(200).should.eql('200b') 6 | 7 | 0.1.0 / 2012-07-04 8 | ================== 9 | 10 | * add bytes to string conversion [yields] 11 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/bytes/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha \ 4 | --reporter spec \ 5 | --require should 6 | 7 | .PHONY: test -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/bytes/Readme.md: -------------------------------------------------------------------------------- 1 | # node-bytes 2 | 3 | Byte string parser / formatter. 4 | 5 | ## Example: 6 | 7 | ```js 8 | bytes('1kb') 9 | // => 1024 10 | 11 | bytes('2mb') 12 | // => 2097152 13 | 14 | bytes('1gb') 15 | // => 1073741824 16 | 17 | bytes(1073741824) 18 | // => 1gb 19 | ``` 20 | 21 | ## Installation 22 | 23 | ``` 24 | $ npm install bytes 25 | $ component install visionmedia/bytes.js 26 | ``` 27 | 28 | ## License 29 | 30 | (The MIT License) 31 | 32 | Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> 33 | 34 | Permission is hereby granted, free of charge, to any person obtaining 35 | a copy of this software and associated documentation files (the 36 | 'Software'), to deal in the Software without restriction, including 37 | without limitation the rights to use, copy, modify, merge, publish, 38 | distribute, sublicense, and/or sell copies of the Software, and to 39 | permit persons to whom the Software is furnished to do so, subject to 40 | the following conditions: 41 | 42 | The above copyright notice and this permission notice shall be 43 | included in all copies or substantial portions of the Software. 44 | 45 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 46 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 47 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 48 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 49 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 50 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 51 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 52 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/bytes/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bytes", 3 | "description": "byte size string parser / serializer", 4 | "keywords": ["bytes", "utility"], 5 | "version": "0.1.0", 6 | "scripts": ["index.js"] 7 | } 8 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/bytes/index.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Parse byte `size` string. 4 | * 5 | * @param {String} size 6 | * @return {Number} 7 | * @api public 8 | */ 9 | 10 | module.exports = function(size) { 11 | if ('number' == typeof size) return convert(size); 12 | var parts = size.match(/^(\d+(?:\.\d+)?) *(kb|mb|gb)$/) 13 | , n = parseFloat(parts[1]) 14 | , type = parts[2]; 15 | 16 | var map = { 17 | kb: 1 << 10 18 | , mb: 1 << 20 19 | , gb: 1 << 30 20 | }; 21 | 22 | return map[type] * n; 23 | }; 24 | 25 | /** 26 | * convert bytes into string. 27 | * 28 | * @param {Number} b - bytes to convert 29 | * @return {String} 30 | * @api public 31 | */ 32 | 33 | function convert (b) { 34 | var gb = 1 << 30, mb = 1 << 20, kb = 1 << 10; 35 | if (b >= gb) return (Math.round(b / gb * 100) / 100) + 'gb'; 36 | if (b >= mb) return (Math.round(b / mb * 100) / 100) + 'mb'; 37 | if (b >= kb) return (Math.round(b / kb * 100) / 100) + 'kb'; 38 | return b + 'b'; 39 | } 40 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/bytes/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bytes", 3 | "author": { 4 | "name": "TJ Holowaychuk", 5 | "email": "tj@vision-media.ca", 6 | "url": "http://tjholowaychuk.com" 7 | }, 8 | "description": "byte size string parser / serializer", 9 | "version": "0.2.0", 10 | "main": "index.js", 11 | "dependencies": {}, 12 | "devDependencies": { 13 | "mocha": "*", 14 | "should": "*" 15 | }, 16 | "_id": "bytes@0.2.0", 17 | "optionalDependencies": {}, 18 | "engines": { 19 | "node": "*" 20 | }, 21 | "_engineSupported": true, 22 | "_npmVersion": "1.1.4", 23 | "_nodeVersion": "v0.6.19", 24 | "_defaultsLoaded": true, 25 | "dist": { 26 | "shasum": "2b515c7e1a7dc92746363f7366ae1646ce666d22" 27 | }, 28 | "_from": "bytes@0.2.0" 29 | } 30 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/.npmignore: -------------------------------------------------------------------------------- 1 | /test/tmp/ 2 | *.upload 3 | *.un~ 4 | *.http 5 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.4 4 | - 0.6 5 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/Makefile: -------------------------------------------------------------------------------- 1 | SHELL := /bin/bash 2 | 3 | test: 4 | @./test/run.js 5 | 6 | build: npm test 7 | 8 | npm: 9 | npm install . 10 | 11 | clean: 12 | rm test/tmp/* 13 | 14 | .PHONY: test clean build 15 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/TODO: -------------------------------------------------------------------------------- 1 | - Better bufferMaxSize handling approach 2 | - Add tests for JSON parser pull request and merge it 3 | - Implement QuerystringParser the same way as MultipartParser 4 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/benchmark/bench-multipart-parser.js: -------------------------------------------------------------------------------- 1 | require('../test/common'); 2 | var multipartParser = require('../lib/multipart_parser'), 3 | MultipartParser = multipartParser.MultipartParser, 4 | parser = new MultipartParser(), 5 | Buffer = require('buffer').Buffer, 6 | boundary = '-----------------------------168072824752491622650073', 7 | mb = 100, 8 | buffer = createMultipartBuffer(boundary, mb * 1024 * 1024), 9 | callbacks = 10 | { partBegin: -1, 11 | partEnd: -1, 12 | headerField: -1, 13 | headerValue: -1, 14 | partData: -1, 15 | end: -1, 16 | }; 17 | 18 | 19 | parser.initWithBoundary(boundary); 20 | parser.onHeaderField = function() { 21 | callbacks.headerField++; 22 | }; 23 | 24 | parser.onHeaderValue = function() { 25 | callbacks.headerValue++; 26 | }; 27 | 28 | parser.onPartBegin = function() { 29 | callbacks.partBegin++; 30 | }; 31 | 32 | parser.onPartData = function() { 33 | callbacks.partData++; 34 | }; 35 | 36 | parser.onPartEnd = function() { 37 | callbacks.partEnd++; 38 | }; 39 | 40 | parser.onEnd = function() { 41 | callbacks.end++; 42 | }; 43 | 44 | var start = +new Date(), 45 | nparsed = parser.write(buffer), 46 | duration = +new Date - start, 47 | mbPerSec = (mb / (duration / 1000)).toFixed(2); 48 | 49 | console.log(mbPerSec+' mb/sec'); 50 | 51 | assert.equal(nparsed, buffer.length); 52 | 53 | function createMultipartBuffer(boundary, size) { 54 | var head = 55 | '--'+boundary+'\r\n' 56 | + 'content-disposition: form-data; name="field1"\r\n' 57 | + '\r\n' 58 | , tail = '\r\n--'+boundary+'--\r\n' 59 | , buffer = new Buffer(size); 60 | 61 | buffer.write(head, 'ascii', 0); 62 | buffer.write(tail, 'ascii', buffer.length - tail.length); 63 | return buffer; 64 | } 65 | 66 | process.on('exit', function() { 67 | for (var k in callbacks) { 68 | assert.equal(0, callbacks[k], k+' count off by '+callbacks[k]); 69 | } 70 | }); 71 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/example/post.js: -------------------------------------------------------------------------------- 1 | require('../test/common'); 2 | var http = require('http'), 3 | util = require('util'), 4 | formidable = require('formidable'), 5 | server; 6 | 7 | server = http.createServer(function(req, res) { 8 | if (req.url == '/') { 9 | res.writeHead(200, {'content-type': 'text/html'}); 10 | res.end( 11 | '
'+ 12 | '
'+ 13 | '
'+ 14 | ''+ 15 | '
' 16 | ); 17 | } else if (req.url == '/post') { 18 | var form = new formidable.IncomingForm(), 19 | fields = []; 20 | 21 | form 22 | .on('error', function(err) { 23 | res.writeHead(200, {'content-type': 'text/plain'}); 24 | res.end('error:\n\n'+util.inspect(err)); 25 | }) 26 | .on('field', function(field, value) { 27 | console.log(field, value); 28 | fields.push([field, value]); 29 | }) 30 | .on('end', function() { 31 | console.log('-> post done'); 32 | res.writeHead(200, {'content-type': 'text/plain'}); 33 | res.end('received fields:\n\n '+util.inspect(fields)); 34 | }); 35 | form.parse(req); 36 | } else { 37 | res.writeHead(404, {'content-type': 'text/plain'}); 38 | res.end('404'); 39 | } 40 | }); 41 | server.listen(TEST_PORT); 42 | 43 | console.log('listening on http://localhost:'+TEST_PORT+'/'); 44 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/example/upload.js: -------------------------------------------------------------------------------- 1 | require('../test/common'); 2 | var http = require('http'), 3 | util = require('util'), 4 | formidable = require('formidable'), 5 | server; 6 | 7 | server = http.createServer(function(req, res) { 8 | if (req.url == '/') { 9 | res.writeHead(200, {'content-type': 'text/html'}); 10 | res.end( 11 | '
'+ 12 | '
'+ 13 | '
'+ 14 | ''+ 15 | '
' 16 | ); 17 | } else if (req.url == '/upload') { 18 | var form = new formidable.IncomingForm(), 19 | files = [], 20 | fields = []; 21 | 22 | form.uploadDir = TEST_TMP; 23 | 24 | form 25 | .on('field', function(field, value) { 26 | console.log(field, value); 27 | fields.push([field, value]); 28 | }) 29 | .on('file', function(field, file) { 30 | console.log(field, file); 31 | files.push([field, file]); 32 | }) 33 | .on('end', function() { 34 | console.log('-> upload done'); 35 | res.writeHead(200, {'content-type': 'text/plain'}); 36 | res.write('received fields:\n\n '+util.inspect(fields)); 37 | res.write('\n\n'); 38 | res.end('received files:\n\n '+util.inspect(files)); 39 | }); 40 | form.parse(req); 41 | } else { 42 | res.writeHead(404, {'content-type': 'text/plain'}); 43 | res.end('404'); 44 | } 45 | }); 46 | server.listen(TEST_PORT); 47 | 48 | console.log('listening on http://localhost:'+TEST_PORT+'/'); 49 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./lib/formidable'); -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/lib/file.js: -------------------------------------------------------------------------------- 1 | if (global.GENTLY) require = GENTLY.hijack(require); 2 | 3 | var util = require('./util'), 4 | WriteStream = require('fs').WriteStream, 5 | EventEmitter = require('events').EventEmitter, 6 | crypto = require('crypto'); 7 | 8 | function File(properties) { 9 | EventEmitter.call(this); 10 | 11 | this.size = 0; 12 | this.path = null; 13 | this.name = null; 14 | this.type = null; 15 | this.hash = null; 16 | this.lastModifiedDate = null; 17 | 18 | this._writeStream = null; 19 | 20 | for (var key in properties) { 21 | this[key] = properties[key]; 22 | } 23 | 24 | if(typeof this.hash === 'string') { 25 | this.hash = crypto.createHash(properties.hash); 26 | } 27 | 28 | this._backwardsCompatibility(); 29 | } 30 | module.exports = File; 31 | util.inherits(File, EventEmitter); 32 | 33 | // @todo Next release: Show error messages when accessing these 34 | File.prototype._backwardsCompatibility = function() { 35 | var self = this; 36 | this.__defineGetter__('length', function() { 37 | return self.size; 38 | }); 39 | this.__defineGetter__('filename', function() { 40 | return self.name; 41 | }); 42 | this.__defineGetter__('mime', function() { 43 | return self.type; 44 | }); 45 | }; 46 | 47 | File.prototype.open = function() { 48 | this._writeStream = new WriteStream(this.path); 49 | }; 50 | 51 | File.prototype.write = function(buffer, cb) { 52 | var self = this; 53 | this._writeStream.write(buffer, function() { 54 | if(self.hash) { 55 | self.hash.update(buffer); 56 | } 57 | self.lastModifiedDate = new Date(); 58 | self.size += buffer.length; 59 | self.emit('progress', self.size); 60 | cb(); 61 | }); 62 | }; 63 | 64 | File.prototype.end = function(cb) { 65 | var self = this; 66 | this._writeStream.end(function() { 67 | if(self.hash) { 68 | self.hash = self.hash.digest('hex'); 69 | } 70 | self.emit('end'); 71 | cb(); 72 | }); 73 | }; 74 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/lib/index.js: -------------------------------------------------------------------------------- 1 | var IncomingForm = require('./incoming_form').IncomingForm; 2 | IncomingForm.IncomingForm = IncomingForm; 3 | module.exports = IncomingForm; 4 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/lib/querystring_parser.js: -------------------------------------------------------------------------------- 1 | if (global.GENTLY) require = GENTLY.hijack(require); 2 | 3 | // This is a buffering parser, not quite as nice as the multipart one. 4 | // If I find time I'll rewrite this to be fully streaming as well 5 | var querystring = require('querystring'); 6 | 7 | function QuerystringParser() { 8 | this.buffer = ''; 9 | }; 10 | exports.QuerystringParser = QuerystringParser; 11 | 12 | QuerystringParser.prototype.write = function(buffer) { 13 | this.buffer += buffer.toString('ascii'); 14 | return buffer.length; 15 | }; 16 | 17 | QuerystringParser.prototype.end = function() { 18 | var fields = querystring.parse(this.buffer); 19 | for (var field in fields) { 20 | this.onField(field, fields[field]); 21 | } 22 | this.buffer = ''; 23 | 24 | this.onEnd(); 25 | }; -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/lib/util.js: -------------------------------------------------------------------------------- 1 | // Backwards compatibility ... 2 | try { 3 | module.exports = require('util'); 4 | } catch (e) { 5 | module.exports = require('sys'); 6 | } 7 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/node-gently/Makefile: -------------------------------------------------------------------------------- 1 | test: 2 | @find test/simple/test-*.js | xargs -n 1 -t node 3 | 4 | .PHONY: test -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/dog.js: -------------------------------------------------------------------------------- 1 | require('../test/common'); 2 | function Dog() {} 3 | 4 | Dog.prototype.seeCat = function() { 5 | this.bark('whuf, whuf'); 6 | this.run(); 7 | } 8 | 9 | Dog.prototype.bark = function(bark) { 10 | require('sys').puts(bark); 11 | } 12 | 13 | var gently = new (require('gently')) 14 | , assert = require('assert') 15 | , dog = new Dog(); 16 | 17 | gently.expect(dog, 'bark', function(bark) { 18 | assert.equal(bark, 'whuf, whuf'); 19 | }); 20 | gently.expect(dog, 'run'); 21 | 22 | dog.seeCat(); -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/event_emitter.js: -------------------------------------------------------------------------------- 1 | require('../test/common'); 2 | var gently = new (require('gently')) 3 | , stream = new (require('fs').WriteStream)('my_file.txt'); 4 | 5 | gently.expect(stream, 'emit', function(event) { 6 | assert.equal(event, 'open'); 7 | }); 8 | 9 | gently.expect(stream, 'emit', function(event) { 10 | assert.equal(event, 'drain'); 11 | }); -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/node-gently/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./lib/gently'); -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/node-gently/lib/gently/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./gently'); -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/node-gently/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gently", 3 | "version": "0.9.2", 4 | "directories": { 5 | "lib": "./lib/gently" 6 | }, 7 | "main": "./lib/gently/index", 8 | "dependencies": {}, 9 | "devDependencies": {}, 10 | "engines": { 11 | "node": "*" 12 | }, 13 | "optionalDependencies": {} 14 | } 15 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/node-gently/test/common.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | , sys = require('sys'); 3 | 4 | require.paths.unshift(path.dirname(__dirname)+'/lib'); 5 | 6 | global.puts = sys.puts; 7 | global.p = function() {sys.error(sys.inspect.apply(null, arguments))};; 8 | global.assert = require('assert'); -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "formidable", 3 | "version": "1.0.11", 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 | "optionalDependencies": {}, 23 | "_id": "formidable@1.0.11", 24 | "_engineSupported": true, 25 | "_npmVersion": "1.1.4", 26 | "_nodeVersion": "v0.6.19", 27 | "_defaultsLoaded": true, 28 | "dist": { 29 | "shasum": "277fc6f83c378539bf55c91898613defee93e34c" 30 | }, 31 | "_from": "formidable@1.0.11" 32 | } 33 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/test/common.js: -------------------------------------------------------------------------------- 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 | }; 20 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/funkyfilename.txt: -------------------------------------------------------------------------------- 1 | I am a text file with a funky name! 2 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/plain.txt: -------------------------------------------------------------------------------- 1 | I am a plain text file 2 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/info.md: -------------------------------------------------------------------------------- 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). 4 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/no-filename.js: -------------------------------------------------------------------------------- 1 | module.exports['generic.http'] = [ 2 | {type: 'file', name: 'upload', filename: '', fixture: 'plain.txt'}, 3 | ]; 4 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/special-chars-in-filename.js: -------------------------------------------------------------------------------- 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 | }; 22 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/common.js: -------------------------------------------------------------------------------- 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 | } 25 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-multipart-parser.js: -------------------------------------------------------------------------------- 1 | var common = require('../common'); 2 | var multipartParser = require(common.lib + '/multipart_parser'), 3 | MultipartParser = multipartParser.MultipartParser, 4 | events = require('events'), 5 | Buffer = require('buffer').Buffer, 6 | parser; 7 | 8 | function test(test) { 9 | parser = new MultipartParser(); 10 | test(); 11 | } 12 | 13 | test(function constructor() { 14 | assert.equal(parser.boundary, null); 15 | assert.equal(parser.state, 0); 16 | assert.equal(parser.flags, 0); 17 | assert.equal(parser.boundaryChars, null); 18 | assert.equal(parser.index, null); 19 | assert.equal(parser.lookbehind, null); 20 | assert.equal(parser.constructor.name, 'MultipartParser'); 21 | }); 22 | 23 | test(function initWithBoundary() { 24 | var boundary = 'abc'; 25 | parser.initWithBoundary(boundary); 26 | assert.deepEqual(Array.prototype.slice.call(parser.boundary), [13, 10, 45, 45, 97, 98, 99]); 27 | assert.equal(parser.state, multipartParser.START); 28 | 29 | assert.deepEqual(parser.boundaryChars, {10: true, 13: true, 45: true, 97: true, 98: true, 99: true}); 30 | }); 31 | 32 | test(function parserError() { 33 | var boundary = 'abc', 34 | buffer = new Buffer(5); 35 | 36 | parser.initWithBoundary(boundary); 37 | buffer.write('--ad', 'ascii', 0); 38 | assert.equal(parser.write(buffer), 3); 39 | }); 40 | 41 | test(function end() { 42 | (function testError() { 43 | assert.equal(parser.end().message, 'MultipartParser.end(): stream ended unexpectedly: ' + parser.explain()); 44 | })(); 45 | 46 | (function testRegular() { 47 | parser.state = multipartParser.END; 48 | assert.strictEqual(parser.end(), undefined); 49 | })(); 50 | }); 51 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-querystring-parser.js: -------------------------------------------------------------------------------- 1 | var common = require('../common'); 2 | var QuerystringParser = require(common.lib + '/querystring_parser').QuerystringParser, 3 | Buffer = require('buffer').Buffer, 4 | gently, 5 | parser; 6 | 7 | function test(test) { 8 | gently = new Gently(); 9 | parser = new QuerystringParser(); 10 | test(); 11 | gently.verify(test.name); 12 | } 13 | 14 | test(function constructor() { 15 | assert.equal(parser.buffer, ''); 16 | assert.equal(parser.constructor.name, 'QuerystringParser'); 17 | }); 18 | 19 | test(function write() { 20 | var a = new Buffer('a=1'); 21 | assert.equal(parser.write(a), a.length); 22 | 23 | var b = new Buffer('&b=2'); 24 | parser.write(b); 25 | assert.equal(parser.buffer, a + b); 26 | }); 27 | 28 | test(function end() { 29 | var FIELDS = {a: ['b', {c: 'd'}], e: 'f'}; 30 | 31 | gently.expect(GENTLY.hijacked.querystring, 'parse', function(str) { 32 | assert.equal(str, parser.buffer); 33 | return FIELDS; 34 | }); 35 | 36 | gently.expect(parser, 'onField', Object.keys(FIELDS).length, function(key, val) { 37 | assert.deepEqual(FIELDS[key], val); 38 | }); 39 | 40 | gently.expect(parser, 'onEnd'); 41 | 42 | parser.buffer = 'my buffer'; 43 | parser.end(); 44 | assert.equal(parser.buffer, ''); 45 | }); 46 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/test/run.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | require('urun')(__dirname) 3 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/test/unit/test-incoming-form.js: -------------------------------------------------------------------------------- 1 | var common = require('../common'); 2 | var test = require('utest'); 3 | var assert = common.assert; 4 | var IncomingForm = common.require('incoming_form').IncomingForm; 5 | var path = require('path'); 6 | 7 | var form; 8 | test('IncomingForm', { 9 | before: function() { 10 | form = new IncomingForm(); 11 | }, 12 | 13 | '#_fileName with regular characters': function() { 14 | var filename = 'foo.txt'; 15 | assert.equal(form._fileName(makeHeader(filename)), 'foo.txt'); 16 | }, 17 | 18 | '#_fileName with unescaped quote': function() { 19 | var filename = 'my".txt'; 20 | assert.equal(form._fileName(makeHeader(filename)), 'my".txt'); 21 | }, 22 | 23 | '#_fileName with escaped quote': function() { 24 | var filename = 'my%22.txt'; 25 | assert.equal(form._fileName(makeHeader(filename)), 'my".txt'); 26 | }, 27 | 28 | '#_fileName with bad quote and additional sub-header': function() { 29 | var filename = 'my".txt'; 30 | var header = makeHeader(filename) + '; foo="bar"'; 31 | assert.equal(form._fileName(header), filename); 32 | }, 33 | 34 | '#_fileName with semicolon': function() { 35 | var filename = 'my;.txt'; 36 | assert.equal(form._fileName(makeHeader(filename)), 'my;.txt'); 37 | }, 38 | 39 | '#_fileName with utf8 character': function() { 40 | var filename = 'my☃.txt'; 41 | assert.equal(form._fileName(makeHeader(filename)), 'my☃.txt'); 42 | }, 43 | 44 | '#_uploadPath strips harmful characters from extension when keepExtensions': function() { 45 | form.keepExtensions = true; 46 | 47 | var ext = path.extname(form._uploadPath('fine.jpg?foo=bar')); 48 | assert.equal(ext, '.jpg'); 49 | 50 | var ext = path.extname(form._uploadPath('fine?foo=bar')); 51 | assert.equal(ext, ''); 52 | 53 | var ext = path.extname(form._uploadPath('super.cr2+dsad')); 54 | assert.equal(ext, '.cr2'); 55 | 56 | var ext = path.extname(form._uploadPath('super.bar')); 57 | assert.equal(ext, '.bar'); 58 | }, 59 | }); 60 | 61 | function makeHeader(filename) { 62 | return 'Content-Disposition: form-data; name="upload"; filename="' + filename + '"'; 63 | } 64 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/formidable/tool/record.js: -------------------------------------------------------------------------------- 1 | var http = require('http'); 2 | var fs = require('fs'); 3 | var connections = 0; 4 | 5 | var server = http.createServer(function(req, res) { 6 | var socket = req.socket; 7 | console.log('Request: %s %s -> %s', req.method, req.url, socket.filename); 8 | 9 | req.on('end', function() { 10 | if (req.url !== '/') { 11 | res.end(JSON.stringify({ 12 | method: req.method, 13 | url: req.url, 14 | filename: socket.filename, 15 | })); 16 | return; 17 | } 18 | 19 | res.writeHead(200, {'content-type': 'text/html'}); 20 | res.end( 21 | '
'+ 22 | '
'+ 23 | '
'+ 24 | ''+ 25 | '
' 26 | ); 27 | }); 28 | }); 29 | 30 | server.on('connection', function(socket) { 31 | connections++; 32 | 33 | socket.id = connections; 34 | socket.filename = 'connection-' + socket.id + '.http'; 35 | socket.file = fs.createWriteStream(socket.filename); 36 | socket.pipe(socket.file); 37 | 38 | console.log('--> %s', socket.filename); 39 | socket.on('close', function() { 40 | console.log('<-- %s', socket.filename); 41 | }); 42 | }); 43 | 44 | var port = process.env.PORT || 8080; 45 | server.listen(port, function() { 46 | console.log('Recording connections on port %s', port); 47 | }); 48 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/pause/.npmignore: -------------------------------------------------------------------------------- 1 | support 2 | test 3 | examples 4 | *.sock 5 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/pause/History.md: -------------------------------------------------------------------------------- 1 | 2 | 0.0.1 / 2010-01-03 3 | ================== 4 | 5 | * Initial release 6 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/pause/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha \ 4 | --require should \ 5 | --reporter spec 6 | 7 | .PHONY: test -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/pause/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | # pause 3 | 4 | Pause streams... 5 | 6 | ## License 7 | 8 | (The MIT License) 9 | 10 | Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> 11 | 12 | Permission is hereby granted, free of charge, to any person obtaining 13 | a copy of this software and associated documentation files (the 14 | 'Software'), to deal in the Software without restriction, including 15 | without limitation the rights to use, copy, modify, merge, publish, 16 | distribute, sublicense, and/or sell copies of the Software, and to 17 | permit persons to whom the Software is furnished to do so, subject to 18 | the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be 21 | included in all copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 24 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 26 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 27 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 28 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 29 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/pause/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = function(obj){ 3 | var onData 4 | , onEnd 5 | , events = []; 6 | 7 | // buffer data 8 | obj.on('data', onData = function(data, encoding){ 9 | events.push(['data', data, encoding]); 10 | }); 11 | 12 | // buffer end 13 | obj.on('end', onEnd = function(data, encoding){ 14 | events.push(['end', data, encoding]); 15 | }); 16 | 17 | return { 18 | end: function(){ 19 | obj.removeListener('data', onData); 20 | obj.removeListener('end', onEnd); 21 | }, 22 | resume: function(){ 23 | this.end(); 24 | for (var i = 0, len = events.length; i < len; ++i) { 25 | obj.emit.apply(obj, events[i]); 26 | } 27 | } 28 | }; 29 | }; -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/pause/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pause", 3 | "version": "0.0.1", 4 | "description": "Pause streams...", 5 | "keywords": [], 6 | "author": { 7 | "name": "TJ Holowaychuk", 8 | "email": "tj@vision-media.ca" 9 | }, 10 | "dependencies": {}, 11 | "devDependencies": { 12 | "mocha": "*", 13 | "should": "*" 14 | }, 15 | "main": "index", 16 | "_id": "pause@0.0.1", 17 | "optionalDependencies": {}, 18 | "engines": { 19 | "node": "*" 20 | }, 21 | "_engineSupported": true, 22 | "_npmVersion": "1.1.4", 23 | "_nodeVersion": "v0.6.19", 24 | "_defaultsLoaded": true, 25 | "dist": { 26 | "shasum": "f6b32f9fc1e106013a4bc9728080afc88dc21d2f" 27 | }, 28 | "_from": "pause@0.0.1" 29 | } 30 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/qs/.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "support/expresso"] 2 | path = support/expresso 3 | url = git://github.com/visionmedia/expresso.git 4 | [submodule "support/should"] 5 | path = support/should 6 | url = git://github.com/visionmedia/should.js.git 7 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/qs/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/qs/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.6 4 | - 0.4 -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/qs/History.md: -------------------------------------------------------------------------------- 1 | 2 | 0.5.1 / 2012-09-18 3 | ================== 4 | 5 | * fix encoded `=`. Closes #43 6 | 7 | 0.5.0 / 2012-05-04 8 | ================== 9 | 10 | * Added component support 11 | 12 | 0.4.2 / 2012-02-08 13 | ================== 14 | 15 | * Fixed: ensure objects are created when appropriate not arrays [aheckmann] 16 | 17 | 0.4.1 / 2012-01-26 18 | ================== 19 | 20 | * Fixed stringify()ing numbers. Closes #23 21 | 22 | 0.4.0 / 2011-11-21 23 | ================== 24 | 25 | * Allow parsing of an existing object (for `bodyParser()`) [jackyz] 26 | * Replaced expresso with mocha 27 | 28 | 0.3.2 / 2011-11-08 29 | ================== 30 | 31 | * Fixed global variable leak 32 | 33 | 0.3.1 / 2011-08-17 34 | ================== 35 | 36 | * Added `try/catch` around malformed uri components 37 | * Add test coverage for Array native method bleed-though 38 | 39 | 0.3.0 / 2011-07-19 40 | ================== 41 | 42 | * Allow `array[index]` and `object[property]` syntaxes [Aria Stewart] 43 | 44 | 0.2.0 / 2011-06-29 45 | ================== 46 | 47 | * Added `qs.stringify()` [Cory Forsyth] 48 | 49 | 0.1.0 / 2011-04-13 50 | ================== 51 | 52 | * Added jQuery-ish array support 53 | 54 | 0.0.7 / 2011-03-13 55 | ================== 56 | 57 | * Fixed; handle empty string and `== null` in `qs.parse()` [dmit] 58 | allows for convenient `qs.parse(url.parse(str).query)` 59 | 60 | 0.0.6 / 2011-02-14 61 | ================== 62 | 63 | * Fixed; support for implicit arrays 64 | 65 | 0.0.4 / 2011-02-09 66 | ================== 67 | 68 | * Fixed `+` as a space 69 | 70 | 0.0.3 / 2011-02-08 71 | ================== 72 | 73 | * Fixed case when right-hand value contains "]" 74 | 75 | 0.0.2 / 2011-02-07 76 | ================== 77 | 78 | * Fixed "=" presence in key 79 | 80 | 0.0.1 / 2011-02-07 81 | ================== 82 | 83 | * Initial release -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/qs/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test/browser/qs.js: querystring.js 3 | component build package.json test/browser/qs 4 | 5 | querystring.js: lib/head.js lib/querystring.js lib/tail.js 6 | cat $^ > $@ 7 | 8 | test: 9 | @./node_modules/.bin/mocha \ 10 | --ui bdd 11 | 12 | .PHONY: test -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/qs/Readme.md: -------------------------------------------------------------------------------- 1 | # node-querystring 2 | 3 | query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others. 4 | 5 | ## Installation 6 | 7 | $ npm install qs 8 | 9 | ## Examples 10 | 11 | ```js 12 | var qs = require('qs'); 13 | 14 | qs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com'); 15 | // => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } } 16 | 17 | qs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }}) 18 | // => user[name]=Tobi&user[email]=tobi%40learnboost.com 19 | ``` 20 | 21 | ## Testing 22 | 23 | Install dev dependencies: 24 | 25 | $ npm install -d 26 | 27 | and execute: 28 | 29 | $ make test 30 | 31 | browser: 32 | 33 | $ open test/browser/index.html 34 | 35 | ## License 36 | 37 | (The MIT License) 38 | 39 | Copyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca> 40 | 41 | Permission is hereby granted, free of charge, to any person obtaining 42 | a copy of this software and associated documentation files (the 43 | 'Software'), to deal in the Software without restriction, including 44 | without limitation the rights to use, copy, modify, merge, publish, 45 | distribute, sublicense, and/or sell copies of the Software, and to 46 | permit persons to whom the Software is furnished to do so, subject to 47 | the following conditions: 48 | 49 | The above copyright notice and this permission notice shall be 50 | included in all copies or substantial portions of the Software. 51 | 52 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 53 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 54 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 55 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 56 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 57 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 58 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/qs/benchmark.js: -------------------------------------------------------------------------------- 1 | 2 | var qs = require('./'); 3 | 4 | var times = 100000 5 | , start = new Date 6 | , n = times; 7 | 8 | console.log('times: %d', times); 9 | 10 | while (n--) qs.parse('foo=bar'); 11 | console.log('simple: %dms', new Date - start); 12 | 13 | var start = new Date 14 | , n = times; 15 | 16 | while (n--) qs.parse('user[name][first]=tj&user[name][last]=holowaychuk'); 17 | console.log('nested: %dms', new Date - start); -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/qs/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "querystring", 3 | "description": "Querystring parser / stringifier with nesting support", 4 | "keywords": ["querystring", "query", "parser"], 5 | "main": "lib/querystring.js" 6 | } -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/qs/examples.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var qs = require('./'); 7 | 8 | var obj = qs.parse('foo'); 9 | console.log(obj) 10 | 11 | var obj = qs.parse('foo=bar=baz'); 12 | console.log(obj) 13 | 14 | var obj = qs.parse('users[]'); 15 | console.log(obj) 16 | 17 | var obj = qs.parse('name=tj&email=tj@vision-media.ca'); 18 | console.log(obj) 19 | 20 | var obj = qs.parse('users[]=tj&users[]=tobi&users[]=jane'); 21 | console.log(obj) 22 | 23 | var obj = qs.parse('user[name][first]=tj&user[name][last]=holowaychuk'); 24 | console.log(obj) 25 | 26 | var obj = qs.parse('users[][name][first]=tj&users[][name][last]=holowaychuk'); 27 | console.log(obj) 28 | 29 | var obj = qs.parse('a=a&a=b&a=c'); 30 | console.log(obj) 31 | 32 | var obj = qs.parse('user[tj]=tj&user[tj]=TJ'); 33 | console.log(obj) 34 | 35 | var obj = qs.parse('user[names]=tj&user[names]=TJ&user[names]=Tyler'); 36 | console.log(obj) 37 | 38 | var obj = qs.parse('user[name][first]=tj&user[name][first]=TJ'); 39 | console.log(obj) 40 | 41 | var obj = qs.parse('user[0]=tj&user[1]=TJ'); 42 | console.log(obj) 43 | 44 | var obj = qs.parse('user[0]=tj&user[]=TJ'); 45 | console.log(obj) 46 | 47 | var obj = qs.parse('user[0]=tj&user[foo]=TJ'); 48 | console.log(obj) 49 | 50 | var str = qs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }}); 51 | console.log(str); -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/qs/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = require('./lib/querystring'); -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/qs/lib/head.js: -------------------------------------------------------------------------------- 1 | ;(function(){ 2 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/qs/lib/tail.js: -------------------------------------------------------------------------------- 1 | })(); -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/qs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "qs", 3 | "description": "querystring parser", 4 | "version": "0.5.1", 5 | "keywords": [ 6 | "query string", 7 | "parser", 8 | "component" 9 | ], 10 | "repository": { 11 | "type": "git", 12 | "url": "git://github.com/visionmedia/node-querystring.git" 13 | }, 14 | "devDependencies": { 15 | "mocha": "*", 16 | "expect.js": "*" 17 | }, 18 | "component": { 19 | "scripts": { 20 | "querystring": "querystring.js" 21 | } 22 | }, 23 | "author": { 24 | "name": "TJ Holowaychuk", 25 | "email": "tj@vision-media.ca", 26 | "url": "http://tjholowaychuk.com" 27 | }, 28 | "main": "index", 29 | "engines": { 30 | "node": "*" 31 | }, 32 | "_id": "qs@0.5.1", 33 | "dependencies": {}, 34 | "optionalDependencies": {}, 35 | "_engineSupported": true, 36 | "_npmVersion": "1.1.4", 37 | "_nodeVersion": "v0.6.19", 38 | "_defaultsLoaded": true, 39 | "dist": { 40 | "shasum": "9d59fdadd6f4a8e2fe56cf26118b5b2c6569de3f" 41 | }, 42 | "_from": "qs@0.5.1" 43 | } 44 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/qs/test/browser/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Mocha 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/node_modules/qs/test/browser/qs.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/express/node_modules/connect/node_modules/qs/test/browser/qs.css -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "connect", 3 | "version": "2.7.4", 4 | "description": "High performance middleware framework", 5 | "keywords": [ 6 | "framework", 7 | "web", 8 | "middleware", 9 | "connect", 10 | "rack" 11 | ], 12 | "repository": { 13 | "type": "git", 14 | "url": "git://github.com/senchalabs/connect.git" 15 | }, 16 | "author": { 17 | "name": "TJ Holowaychuk", 18 | "email": "tj@vision-media.ca", 19 | "url": "http://tjholowaychuk.com" 20 | }, 21 | "dependencies": { 22 | "qs": "0.5.1", 23 | "formidable": "1.0.11", 24 | "cookie-signature": "0.0.1", 25 | "buffer-crc32": "0.1.1", 26 | "cookie": "0.0.5", 27 | "send": "0.1.0", 28 | "bytes": "0.2.0", 29 | "fresh": "0.1.0", 30 | "pause": "0.0.1", 31 | "debug": "*" 32 | }, 33 | "devDependencies": { 34 | "should": "*", 35 | "mocha": "*", 36 | "jade": "*", 37 | "dox": "*" 38 | }, 39 | "main": "index", 40 | "engines": { 41 | "node": ">= 0.5.0" 42 | }, 43 | "scripts": { 44 | "test": "make" 45 | }, 46 | "_id": "connect@2.7.4", 47 | "optionalDependencies": {}, 48 | "_engineSupported": true, 49 | "_npmVersion": "1.1.4", 50 | "_nodeVersion": "v0.6.19", 51 | "_defaultsLoaded": true, 52 | "dist": { 53 | "shasum": "fc342a0f00996bfdd6603d17f0c91e425156bae5" 54 | }, 55 | "_from": "connect@2.7.4" 56 | } 57 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/connect/test.js: -------------------------------------------------------------------------------- 1 | 2 | var connect = require('./'); 3 | var app = connect(); 4 | 5 | app.use(connect.logger('dev')); 6 | app.use(connect.bodyParser()); 7 | 8 | app.use(function(req, res, next){ 9 | if (req.checkContinue) { 10 | res.writeContinue(); 11 | } 12 | res.end('hello'); 13 | }); 14 | 15 | var server = app.listen(3000); 16 | 17 | server.on('checkContinue', function(req, res){ 18 | req.checkContinue = true; 19 | app(req, res); 20 | }); 21 | 22 | 23 | // var http = require('http'); 24 | 25 | // var app = http.createServer(function(req, res){ 26 | // console.log(req.headers); 27 | // }); 28 | 29 | // app.on('checkContinue', function(req, res){ 30 | // if ('application/json' == req.headers['content-type']) { 31 | // res.writeContinue(); 32 | // console.log('ok'); 33 | // res.end('thanks') 34 | // } else { 35 | // res.writeHead(400); 36 | // res.end('bad request, json only'); 37 | // } 38 | // }); 39 | 40 | // app.listen(3000); 41 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/cookie-signature/.npmignore: -------------------------------------------------------------------------------- 1 | support 2 | test 3 | examples 4 | *.sock 5 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/cookie-signature/History.md: -------------------------------------------------------------------------------- 1 | 2 | 0.0.1 / 2010-01-03 3 | ================== 4 | 5 | * Initial release 6 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/cookie-signature/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha \ 4 | --require should \ 5 | --reporter spec 6 | 7 | .PHONY: test -------------------------------------------------------------------------------- /node_modules/express/node_modules/cookie-signature/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | # cookie-signature 3 | 4 | Sign and unsign cookies. 5 | 6 | ## Example 7 | 8 | ```js 9 | var cookie = require('cookie-signature'); 10 | 11 | var val = cookie.sign('hello', 'tobiiscool'); 12 | val.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI'); 13 | 14 | var val = cookie.sign('hello', 'tobiiscool'); 15 | cookie.unsign(val, 'tobiiscool').should.equal('hello'); 16 | cookie.unsign(val, 'luna').should.be.false; 17 | ``` 18 | 19 | ## License 20 | 21 | (The MIT License) 22 | 23 | Copyright (c) 2012 LearnBoost <tj@learnboost.com> 24 | 25 | Permission is hereby granted, free of charge, to any person obtaining 26 | a copy of this software and associated documentation files (the 27 | 'Software'), to deal in the Software without restriction, including 28 | without limitation the rights to use, copy, modify, merge, publish, 29 | distribute, sublicense, and/or sell copies of the Software, and to 30 | permit persons to whom the Software is furnished to do so, subject to 31 | the following conditions: 32 | 33 | The above copyright notice and this permission notice shall be 34 | included in all copies or substantial portions of the Software. 35 | 36 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 37 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 38 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 39 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 40 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 41 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 42 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /node_modules/express/node_modules/cookie-signature/index.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var crypto = require('crypto'); 7 | 8 | /** 9 | * Sign the given `val` with `secret`. 10 | * 11 | * @param {String} val 12 | * @param {String} secret 13 | * @return {String} 14 | * @api private 15 | */ 16 | 17 | exports.sign = function(val, secret){ 18 | if ('string' != typeof val) throw new TypeError('cookie required'); 19 | if ('string' != typeof secret) throw new TypeError('secret required'); 20 | return val + '.' + crypto 21 | .createHmac('sha256', secret) 22 | .update(val) 23 | .digest('base64') 24 | .replace(/\=+$/, ''); 25 | }; 26 | 27 | /** 28 | * Unsign and decode the given `val` with `secret`, 29 | * returning `false` if the signature is invalid. 30 | * 31 | * @param {String} val 32 | * @param {String} secret 33 | * @return {String|Boolean} 34 | * @api private 35 | */ 36 | 37 | exports.unsign = function(val, secret){ 38 | if ('string' != typeof val) throw new TypeError('cookie required'); 39 | if ('string' != typeof secret) throw new TypeError('secret required'); 40 | var str = val.slice(0, val.lastIndexOf('.')); 41 | return exports.sign(str, secret) == val ? str : false; 42 | }; -------------------------------------------------------------------------------- /node_modules/express/node_modules/cookie-signature/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cookie-signature", 3 | "version": "0.0.1", 4 | "description": "Sign and unsign cookies", 5 | "keywords": [ 6 | "cookie", 7 | "sign", 8 | "unsign" 9 | ], 10 | "author": { 11 | "name": "TJ Holowaychuk", 12 | "email": "tj@learnboost.com" 13 | }, 14 | "dependencies": {}, 15 | "devDependencies": { 16 | "mocha": "*", 17 | "should": "*" 18 | }, 19 | "main": "index", 20 | "_id": "cookie-signature@0.0.1", 21 | "optionalDependencies": {}, 22 | "engines": { 23 | "node": "*" 24 | }, 25 | "_engineSupported": true, 26 | "_npmVersion": "1.1.4", 27 | "_nodeVersion": "v0.6.19", 28 | "_defaultsLoaded": true, 29 | "dist": { 30 | "shasum": "27e0db75fee6cb085070a4c65dac616ec17bb51a" 31 | }, 32 | "_from": "cookie-signature@0.0.1" 33 | } 34 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/cookie/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/cookie/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.6 4 | - 0.8 5 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/cookie/README.md: -------------------------------------------------------------------------------- 1 | # cookie [![Build Status](https://secure.travis-ci.org/shtylman/node-cookie.png?branch=master)](http://travis-ci.org/shtylman/node-cookie) # 2 | 3 | cookie is a basic cookie parser and serializer. It doesn't make assumptions about how you are going to deal with your cookies. It basically just provides a way to read and write the HTTP cookie headers. 4 | 5 | See [RFC6265](http://tools.ietf.org/html/rfc6265) for details about the http header for cookies. 6 | 7 | ## how? 8 | 9 | ``` 10 | npm install cookie 11 | ``` 12 | 13 | ```javascript 14 | var cookie = require('cookie'); 15 | 16 | var hdr = cookie.serialize('foo', 'bar'); 17 | // hdr = 'foo=bar'; 18 | 19 | var cookies = cookie.parse('foo=bar; cat=meow; dog=ruff'); 20 | // cookies = { foo: 'bar', cat: 'meow', dog: 'ruff' }; 21 | ``` 22 | 23 | ## more 24 | 25 | The serialize function takes a third parameter, an object, to set cookie options. See the RFC for valid values. 26 | 27 | ### path 28 | > cookie path 29 | 30 | ### expires 31 | > absolute expiration date for the cookie (Date object) 32 | 33 | ### maxAge 34 | > relative max age of the cookie from when the client receives it (seconds) 35 | 36 | ### domain 37 | > domain for the cookie 38 | 39 | ### secure 40 | > true or false 41 | 42 | ### httpOnly 43 | > true or false 44 | 45 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/cookie/index.js: -------------------------------------------------------------------------------- 1 | 2 | /// Serialize the a name value pair into a cookie string suitable for 3 | /// http headers. An optional options object specified cookie parameters 4 | /// 5 | /// serialize('foo', 'bar', { httpOnly: true }) 6 | /// => "foo=bar; httpOnly" 7 | /// 8 | /// @param {String} name 9 | /// @param {String} val 10 | /// @param {Object} options 11 | /// @return {String} 12 | var serialize = function(name, val, opt){ 13 | var pairs = [name + '=' + encode(val)]; 14 | opt = opt || {}; 15 | 16 | if (opt.maxAge) pairs.push('Max-Age=' + opt.maxAge); 17 | if (opt.domain) pairs.push('Domain=' + opt.domain); 18 | if (opt.path) pairs.push('Path=' + opt.path); 19 | if (opt.expires) pairs.push('Expires=' + opt.expires.toUTCString()); 20 | if (opt.httpOnly) pairs.push('HttpOnly'); 21 | if (opt.secure) pairs.push('Secure'); 22 | 23 | return pairs.join('; '); 24 | }; 25 | 26 | /// Parse the given cookie header string into an object 27 | /// The object has the various cookies as keys(names) => values 28 | /// @param {String} str 29 | /// @return {Object} 30 | var parse = function(str) { 31 | var obj = {} 32 | var pairs = str.split(/[;,] */); 33 | 34 | pairs.forEach(function(pair) { 35 | var eq_idx = pair.indexOf('=') 36 | var key = pair.substr(0, eq_idx).trim() 37 | var val = pair.substr(++eq_idx, pair.length).trim(); 38 | 39 | // quoted values 40 | if ('"' == val[0]) { 41 | val = val.slice(1, -1); 42 | } 43 | 44 | // only assign once 45 | if (undefined == obj[key]) { 46 | try { 47 | obj[key] = decode(val); 48 | } catch (e) { 49 | obj[key] = val; 50 | } 51 | } 52 | }); 53 | 54 | return obj; 55 | }; 56 | 57 | var encode = encodeURIComponent; 58 | var decode = decodeURIComponent; 59 | 60 | module.exports.serialize = serialize; 61 | module.exports.parse = parse; 62 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/cookie/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": { 3 | "name": "Roman Shtylman", 4 | "email": "shtylman@gmail.com" 5 | }, 6 | "name": "cookie", 7 | "description": "cookie parsing and serialization", 8 | "version": "0.0.5", 9 | "repository": { 10 | "type": "git", 11 | "url": "git://github.com/shtylman/node-cookie.git" 12 | }, 13 | "keywords": [ 14 | "cookie", 15 | "cookies" 16 | ], 17 | "main": "index.js", 18 | "scripts": { 19 | "test": "mocha" 20 | }, 21 | "dependencies": {}, 22 | "devDependencies": { 23 | "mocha": "1.x.x" 24 | }, 25 | "optionalDependencies": {}, 26 | "engines": { 27 | "node": "*" 28 | }, 29 | "_id": "cookie@0.0.5", 30 | "_engineSupported": true, 31 | "_npmVersion": "1.1.4", 32 | "_nodeVersion": "v0.6.19", 33 | "_defaultsLoaded": true, 34 | "dist": { 35 | "shasum": "73915c1612c701c8a6015c07d64a0f07cb6a898e" 36 | }, 37 | "_from": "cookie@0.0.5" 38 | } 39 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/cookie/test/mocha.opts: -------------------------------------------------------------------------------- 1 | --ui qunit 2 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/cookie/test/parse.js: -------------------------------------------------------------------------------- 1 | 2 | var assert = require('assert'); 3 | 4 | var cookie = require('..'); 5 | 6 | suite('parse'); 7 | 8 | test('basic', function() { 9 | assert.deepEqual({ foo: 'bar' }, cookie.parse('foo=bar')); 10 | assert.deepEqual({ foo: '123' }, cookie.parse('foo=123')); 11 | }); 12 | 13 | test('ignore spaces', function() { 14 | assert.deepEqual({ FOO: 'bar', baz: 'raz' }, 15 | cookie.parse('FOO = bar; baz = raz')); 16 | }); 17 | 18 | test('escaping', function() { 19 | assert.deepEqual({ foo: 'bar=123456789&name=Magic+Mouse' }, 20 | cookie.parse('foo="bar=123456789&name=Magic+Mouse"')); 21 | 22 | assert.deepEqual({ email: ' ",;/' }, 23 | cookie.parse('email=%20%22%2c%3b%2f')); 24 | }); 25 | 26 | test('ignore escaping error and return original value', function() { 27 | assert.deepEqual({ foo: '%1', bar: 'bar' }, cookie.parse('foo=%1;bar=bar')); 28 | }); 29 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/cookie/test/serialize.js: -------------------------------------------------------------------------------- 1 | // builtin 2 | var assert = require('assert'); 3 | 4 | var cookie = require('..'); 5 | 6 | suite('serialize'); 7 | 8 | test('basic', function() { 9 | assert.equal('foo=bar', cookie.serialize('foo', 'bar')); 10 | assert.equal('foo=bar%20baz', cookie.serialize('foo', 'bar baz')); 11 | }); 12 | 13 | test('path', function() { 14 | assert.equal('foo=bar; Path=/', cookie.serialize('foo', 'bar', { 15 | path: '/' 16 | })); 17 | }); 18 | 19 | test('secure', function() { 20 | assert.equal('foo=bar; Secure', cookie.serialize('foo', 'bar', { 21 | secure: true 22 | })); 23 | 24 | assert.equal('foo=bar', cookie.serialize('foo', 'bar', { 25 | secure: false 26 | })); 27 | }); 28 | 29 | test('domain', function() { 30 | assert.equal('foo=bar; Domain=example.com', cookie.serialize('foo', 'bar', { 31 | domain: 'example.com' 32 | })); 33 | }); 34 | 35 | test('httpOnly', function() { 36 | assert.equal('foo=bar; HttpOnly', cookie.serialize('foo', 'bar', { 37 | httpOnly: true 38 | })); 39 | }); 40 | 41 | test('maxAge', function() { 42 | assert.equal('foo=bar; Max-Age=1000', cookie.serialize('foo', 'bar', { 43 | maxAge: 1000 44 | })); 45 | }); 46 | 47 | test('escaping', function() { 48 | assert.deepEqual('cat=%2B%20', cookie.serialize('cat', '+ ')); 49 | }); 50 | 51 | test('parse->serialize', function() { 52 | 53 | assert.deepEqual({ cat: 'foo=123&name=baz five' }, cookie.parse( 54 | cookie.serialize('cat', 'foo=123&name=baz five'))); 55 | 56 | assert.deepEqual({ cat: ' ";/' }, cookie.parse( 57 | cookie.serialize('cat', ' ";/'))); 58 | }); 59 | 60 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/debug/.npmignore: -------------------------------------------------------------------------------- 1 | support 2 | test 3 | examples 4 | *.sock 5 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/debug/History.md: -------------------------------------------------------------------------------- 1 | 2 | 0.7.2 / 2013-02-06 3 | ================== 4 | 5 | * fix package.json 6 | * fix: Mobile Safari (private mode) is broken with debug 7 | * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript 8 | 9 | 0.7.1 / 2013-02-05 10 | ================== 11 | 12 | * add repository URL to package.json 13 | * add DEBUG_COLORED to force colored output 14 | * add browserify support 15 | * fix component. Closes #24 16 | 17 | 0.7.0 / 2012-05-04 18 | ================== 19 | 20 | * Added .component to package.json 21 | * Added debug.component.js build 22 | 23 | 0.6.0 / 2012-03-16 24 | ================== 25 | 26 | * Added support for "-" prefix in DEBUG [Vinay Pulim] 27 | * Added `.enabled` flag to the node version [TooTallNate] 28 | 29 | 0.5.0 / 2012-02-02 30 | ================== 31 | 32 | * Added: humanize diffs. Closes #8 33 | * Added `debug.disable()` to the CS variant 34 | * Removed padding. Closes #10 35 | * Fixed: persist client-side variant again. Closes #9 36 | 37 | 0.4.0 / 2012-02-01 38 | ================== 39 | 40 | * Added browser variant support for older browsers [TooTallNate] 41 | * Added `debug.enable('project:*')` to browser variant [TooTallNate] 42 | * Added padding to diff (moved it to the right) 43 | 44 | 0.3.0 / 2012-01-26 45 | ================== 46 | 47 | * Added millisecond diff when isatty, otherwise UTC string 48 | 49 | 0.2.0 / 2012-01-22 50 | ================== 51 | 52 | * Added wildcard support 53 | 54 | 0.1.0 / 2011-12-02 55 | ================== 56 | 57 | * Added: remove colors unless stderr isatty [TooTallNate] 58 | 59 | 0.0.1 / 2010-01-03 60 | ================== 61 | 62 | * Initial release 63 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/debug/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "debug", 3 | "repo": "visionmedia/debug", 4 | "description": "small debugging utility", 5 | "version": "0.7.2", 6 | "keywords": ["debug", "log", "debugger"], 7 | "scripts": ["index.js", "debug.js"], 8 | "dependencies": {} 9 | } 10 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/debug/example/app.js: -------------------------------------------------------------------------------- 1 | 2 | var debug = require('../')('http') 3 | , http = require('http') 4 | , name = 'My App'; 5 | 6 | // fake app 7 | 8 | debug('booting %s', name); 9 | 10 | http.createServer(function(req, res){ 11 | debug(req.method + ' ' + req.url); 12 | res.end('hello\n'); 13 | }).listen(3000, function(){ 14 | debug('listening'); 15 | }); 16 | 17 | // fake worker of some kind 18 | 19 | require('./worker'); -------------------------------------------------------------------------------- /node_modules/express/node_modules/debug/example/browser.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | debug() 4 | 5 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/debug/example/wildcards.js: -------------------------------------------------------------------------------- 1 | 2 | var debug = { 3 | foo: require('../')('test:foo'), 4 | bar: require('../')('test:bar'), 5 | baz: require('../')('test:baz') 6 | }; 7 | 8 | debug.foo('foo') 9 | debug.bar('bar') 10 | debug.baz('baz') -------------------------------------------------------------------------------- /node_modules/express/node_modules/debug/example/worker.js: -------------------------------------------------------------------------------- 1 | 2 | // DEBUG=* node example/worker 3 | // DEBUG=worker:* node example/worker 4 | // DEBUG=worker:a node example/worker 5 | // DEBUG=worker:b node example/worker 6 | 7 | var a = require('../')('worker:a') 8 | , b = require('../')('worker:b'); 9 | 10 | function work() { 11 | a('doing lots of uninteresting work'); 12 | setTimeout(work, Math.random() * 1000); 13 | } 14 | 15 | work(); 16 | 17 | function workb() { 18 | b('doing some work'); 19 | setTimeout(workb, Math.random() * 2000); 20 | } 21 | 22 | workb(); -------------------------------------------------------------------------------- /node_modules/express/node_modules/debug/index.js: -------------------------------------------------------------------------------- 1 | if ('undefined' == typeof window) { 2 | module.exports = require('./lib/debug'); 3 | } else { 4 | module.exports = require('./debug'); 5 | } 6 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/debug/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "debug", 3 | "version": "0.7.2", 4 | "repository": { 5 | "type": "git", 6 | "url": "git://github.com/visionmedia/debug.git" 7 | }, 8 | "description": "small debugging utility", 9 | "keywords": [ 10 | "debug", 11 | "log", 12 | "debugger" 13 | ], 14 | "author": { 15 | "name": "TJ Holowaychuk", 16 | "email": "tj@vision-media.ca" 17 | }, 18 | "dependencies": {}, 19 | "devDependencies": { 20 | "mocha": "*" 21 | }, 22 | "main": "lib/debug.js", 23 | "browserify": "debug.js", 24 | "engines": { 25 | "node": "*" 26 | }, 27 | "component": { 28 | "scripts": { 29 | "debug/index.js": "index.js", 30 | "debug/debug.js": "debug.js" 31 | } 32 | }, 33 | "_id": "debug@0.7.2", 34 | "optionalDependencies": {}, 35 | "_engineSupported": true, 36 | "_npmVersion": "1.1.4", 37 | "_nodeVersion": "v0.6.19", 38 | "_defaultsLoaded": true, 39 | "_from": "debug@*" 40 | } 41 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/fresh/.npmignore: -------------------------------------------------------------------------------- 1 | test 2 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/fresh/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha \ 4 | --reporter spec \ 5 | --require should 6 | 7 | .PHONY: test -------------------------------------------------------------------------------- /node_modules/express/node_modules/fresh/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | # node-fresh 3 | 4 | HTTP response freshness testing 5 | 6 | ## fresh(req, res) 7 | 8 | Check freshness of `req` and `res` headers. 9 | 10 | When the cache is "fresh" __true__ is returned, 11 | otherwise __false__ is returned to indicate that 12 | the cache is now stale. 13 | 14 | ## Example: 15 | 16 | ```js 17 | var req = { 'if-none-match': 'tobi' }; 18 | var res = { 'etag': 'luna' }; 19 | fresh(req, res); 20 | // => false 21 | 22 | var req = { 'if-none-match': 'tobi' }; 23 | var res = { 'etag': 'tobi' }; 24 | fresh(req, res); 25 | // => true 26 | ``` 27 | 28 | ## Installation 29 | 30 | ``` 31 | $ npm install fresh 32 | ``` -------------------------------------------------------------------------------- /node_modules/express/node_modules/fresh/index.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Expose `fresh()`. 4 | */ 5 | 6 | module.exports = fresh; 7 | 8 | /** 9 | * Check freshness of `req` and `res` headers. 10 | * 11 | * When the cache is "fresh" __true__ is returned, 12 | * otherwise __false__ is returned to indicate that 13 | * the cache is now stale. 14 | * 15 | * @param {Object} req 16 | * @param {Object} res 17 | * @return {Boolean} 18 | * @api public 19 | */ 20 | 21 | function fresh(req, res) { 22 | // defaults 23 | var etagMatches = true; 24 | var notModified = true; 25 | 26 | // fields 27 | var modifiedSince = req['if-modified-since']; 28 | var noneMatch = req['if-none-match']; 29 | var lastModified = res['last-modified']; 30 | var etag = res['etag']; 31 | 32 | // unconditional request 33 | if (!modifiedSince && !noneMatch) return false; 34 | 35 | // parse if-none-match 36 | if (noneMatch) noneMatch = noneMatch.split(/ *, */); 37 | 38 | // if-none-match 39 | if (noneMatch) etagMatches = ~noneMatch.indexOf(etag) || '*' == noneMatch[0]; 40 | 41 | // if-modified-since 42 | if (modifiedSince) { 43 | modifiedSince = new Date(modifiedSince); 44 | lastModified = new Date(lastModified); 45 | notModified = lastModified <= modifiedSince; 46 | } 47 | 48 | return !! (etagMatches && notModified); 49 | } -------------------------------------------------------------------------------- /node_modules/express/node_modules/fresh/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fresh", 3 | "author": { 4 | "name": "TJ Holowaychuk", 5 | "email": "tj@vision-media.ca", 6 | "url": "http://tjholowaychuk.com" 7 | }, 8 | "description": "HTTP response freshness testing", 9 | "version": "0.1.0", 10 | "main": "index.js", 11 | "dependencies": {}, 12 | "devDependencies": { 13 | "mocha": "*", 14 | "should": "*" 15 | }, 16 | "_id": "fresh@0.1.0", 17 | "optionalDependencies": {}, 18 | "engines": { 19 | "node": "*" 20 | }, 21 | "_engineSupported": true, 22 | "_npmVersion": "1.1.4", 23 | "_nodeVersion": "v0.6.19", 24 | "_defaultsLoaded": true, 25 | "dist": { 26 | "shasum": "e1cca82411b3d7167c251965b5c9ba924e8f0820" 27 | }, 28 | "_from": "fresh@0.1.0" 29 | } 30 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/methods/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = [ 3 | 'get' 4 | , 'post' 5 | , 'put' 6 | , 'head' 7 | , 'delete' 8 | , 'options' 9 | , 'trace' 10 | , 'copy' 11 | , 'lock' 12 | , 'mkcol' 13 | , 'move' 14 | , 'propfind' 15 | , 'proppatch' 16 | , 'unlock' 17 | , 'report' 18 | , 'mkactivity' 19 | , 'checkout' 20 | , 'merge' 21 | , 'm-search' 22 | , 'notify' 23 | , 'subscribe' 24 | , 'unsubscribe' 25 | , 'patch' 26 | ]; -------------------------------------------------------------------------------- /node_modules/express/node_modules/methods/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "methods", 3 | "version": "0.0.1", 4 | "description": "HTTP methods that node supports", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "http", 11 | "methods" 12 | ], 13 | "author": { 14 | "name": "TJ Holowaychuk" 15 | }, 16 | "license": "MIT", 17 | "_id": "methods@0.0.1", 18 | "dependencies": {}, 19 | "devDependencies": {}, 20 | "optionalDependencies": {}, 21 | "engines": { 22 | "node": "*" 23 | }, 24 | "_engineSupported": true, 25 | "_npmVersion": "1.1.4", 26 | "_nodeVersion": "v0.6.19", 27 | "_defaultsLoaded": true, 28 | "dist": { 29 | "shasum": "8003ef9e9e78422291bbcff716c4456042d38fdc" 30 | }, 31 | "_from": "methods@0.0.1" 32 | } 33 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | npm-debug.log -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.6 4 | - 0.8 5 | - 0.9 6 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2010 James Halliday (mail@substack.net) 2 | 3 | This project is free software released under the MIT/X11 license: 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/examples/pow.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('mkdirp'); 2 | 3 | mkdirp('/tmp/foo/bar/baz', function (err) { 4 | if (err) console.error(err) 5 | else console.log('pow!') 6 | }); 7 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mkdirp", 3 | "description": "Recursively mkdir, like `mkdir -p`", 4 | "version": "0.3.5", 5 | "author": { 6 | "name": "James Halliday", 7 | "email": "mail@substack.net", 8 | "url": "http://substack.net" 9 | }, 10 | "main": "./index", 11 | "keywords": [ 12 | "mkdir", 13 | "directory" 14 | ], 15 | "repository": { 16 | "type": "git", 17 | "url": "git://github.com/substack/node-mkdirp.git" 18 | }, 19 | "scripts": { 20 | "test": "tap test/*.js" 21 | }, 22 | "devDependencies": { 23 | "tap": "~0.4.0" 24 | }, 25 | "license": "MIT", 26 | "_id": "mkdirp@0.3.5", 27 | "dependencies": {}, 28 | "optionalDependencies": {}, 29 | "engines": { 30 | "node": "*" 31 | }, 32 | "_engineSupported": true, 33 | "_npmVersion": "1.1.4", 34 | "_nodeVersion": "v0.6.19", 35 | "_defaultsLoaded": true, 36 | "dist": { 37 | "shasum": "4875cc963835ea96398c6e340852d23cbd391862" 38 | }, 39 | "_from": "mkdirp@~0.3.4" 40 | } 41 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/readme.markdown: -------------------------------------------------------------------------------- 1 | # mkdirp 2 | 3 | Like `mkdir -p`, but in node.js! 4 | 5 | [![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp) 6 | 7 | # example 8 | 9 | ## pow.js 10 | 11 | ```js 12 | var mkdirp = require('mkdirp'); 13 | 14 | mkdirp('/tmp/foo/bar/baz', function (err) { 15 | if (err) console.error(err) 16 | else console.log('pow!') 17 | }); 18 | ``` 19 | 20 | Output 21 | 22 | ``` 23 | pow! 24 | ``` 25 | 26 | And now /tmp/foo/bar/baz exists, huzzah! 27 | 28 | # methods 29 | 30 | ```js 31 | var mkdirp = require('mkdirp'); 32 | ``` 33 | 34 | ## mkdirp(dir, mode, cb) 35 | 36 | Create a new directory and any necessary subdirectories at `dir` with octal 37 | permission string `mode`. 38 | 39 | If `mode` isn't specified, it defaults to `0777 & (~process.umask())`. 40 | 41 | `cb(err, made)` fires with the error or the first directory `made` 42 | that had to be created, if any. 43 | 44 | ## mkdirp.sync(dir, mode) 45 | 46 | Synchronously create a new directory and any necessary subdirectories at `dir` 47 | with octal permission string `mode`. 48 | 49 | If `mode` isn't specified, it defaults to `0777 & (~process.umask())`. 50 | 51 | Returns the first directory that had to be created, if any. 52 | 53 | # install 54 | 55 | With [npm](http://npmjs.org) do: 56 | 57 | ``` 58 | npm install mkdirp 59 | ``` 60 | 61 | # license 62 | 63 | MIT 64 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/test/chmod.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../').mkdirp; 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | var ps = [ '', 'tmp' ]; 7 | 8 | for (var i = 0; i < 25; i++) { 9 | var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | ps.push(dir); 11 | } 12 | 13 | var file = ps.join('/'); 14 | 15 | test('chmod-pre', function (t) { 16 | var mode = 0744 17 | mkdirp(file, mode, function (er) { 18 | t.ifError(er, 'should not error'); 19 | fs.stat(file, function (er, stat) { 20 | t.ifError(er, 'should exist'); 21 | t.ok(stat && stat.isDirectory(), 'should be directory'); 22 | t.equal(stat && stat.mode & 0777, mode, 'should be 0744'); 23 | t.end(); 24 | }); 25 | }); 26 | }); 27 | 28 | test('chmod', function (t) { 29 | var mode = 0755 30 | mkdirp(file, mode, function (er) { 31 | t.ifError(er, 'should not error'); 32 | fs.stat(file, function (er, stat) { 33 | t.ifError(er, 'should exist'); 34 | t.ok(stat && stat.isDirectory(), 'should be directory'); 35 | t.end(); 36 | }); 37 | }); 38 | }); 39 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/test/clobber.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../').mkdirp; 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | var ps = [ '', 'tmp' ]; 7 | 8 | for (var i = 0; i < 25; i++) { 9 | var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | ps.push(dir); 11 | } 12 | 13 | var file = ps.join('/'); 14 | 15 | // a file in the way 16 | var itw = ps.slice(0, 3).join('/'); 17 | 18 | 19 | test('clobber-pre', function (t) { 20 | console.error("about to write to "+itw) 21 | fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.'); 22 | 23 | fs.stat(itw, function (er, stat) { 24 | t.ifError(er) 25 | t.ok(stat && stat.isFile(), 'should be file') 26 | t.end() 27 | }) 28 | }) 29 | 30 | test('clobber', function (t) { 31 | t.plan(2); 32 | mkdirp(file, 0755, function (err) { 33 | t.ok(err); 34 | t.equal(err.code, 'ENOTDIR'); 35 | t.end(); 36 | }); 37 | }); 38 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/test/mkdirp.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('woo', function (t) { 7 | t.plan(2); 8 | var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 9 | var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 11 | 12 | var file = '/tmp/' + [x,y,z].join('/'); 13 | 14 | mkdirp(file, 0755, function (err) { 15 | if (err) t.fail(err); 16 | else path.exists(file, function (ex) { 17 | if (!ex) t.fail('file not created') 18 | else fs.stat(file, function (err, stat) { 19 | if (err) t.fail(err) 20 | else { 21 | t.equal(stat.mode & 0777, 0755); 22 | t.ok(stat.isDirectory(), 'target not a directory'); 23 | t.end(); 24 | } 25 | }) 26 | }) 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/test/perm.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('async perm', function (t) { 7 | t.plan(2); 8 | var file = '/tmp/' + (Math.random() * (1<<30)).toString(16); 9 | 10 | mkdirp(file, 0755, function (err) { 11 | if (err) t.fail(err); 12 | else path.exists(file, function (ex) { 13 | if (!ex) t.fail('file not created') 14 | else fs.stat(file, function (err, stat) { 15 | if (err) t.fail(err) 16 | else { 17 | t.equal(stat.mode & 0777, 0755); 18 | t.ok(stat.isDirectory(), 'target not a directory'); 19 | t.end(); 20 | } 21 | }) 22 | }) 23 | }); 24 | }); 25 | 26 | test('async root perm', function (t) { 27 | mkdirp('/tmp', 0755, function (err) { 28 | if (err) t.fail(err); 29 | t.end(); 30 | }); 31 | t.end(); 32 | }); 33 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/test/perm_sync.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('sync perm', function (t) { 7 | t.plan(2); 8 | var file = '/tmp/' + (Math.random() * (1<<30)).toString(16) + '.json'; 9 | 10 | mkdirp.sync(file, 0755); 11 | path.exists(file, function (ex) { 12 | if (!ex) t.fail('file not created') 13 | else fs.stat(file, function (err, stat) { 14 | if (err) t.fail(err) 15 | else { 16 | t.equal(stat.mode & 0777, 0755); 17 | t.ok(stat.isDirectory(), 'target not a directory'); 18 | t.end(); 19 | } 20 | }) 21 | }); 22 | }); 23 | 24 | test('sync root perm', function (t) { 25 | t.plan(1); 26 | 27 | var file = '/tmp'; 28 | mkdirp.sync(file, 0755); 29 | path.exists(file, function (ex) { 30 | if (!ex) t.fail('file not created') 31 | else fs.stat(file, function (err, stat) { 32 | if (err) t.fail(err) 33 | else { 34 | t.ok(stat.isDirectory(), 'target not a directory'); 35 | t.end(); 36 | } 37 | }) 38 | }); 39 | }); 40 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/test/race.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../').mkdirp; 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('race', function (t) { 7 | t.plan(4); 8 | var ps = [ '', 'tmp' ]; 9 | 10 | for (var i = 0; i < 25; i++) { 11 | var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 12 | ps.push(dir); 13 | } 14 | var file = ps.join('/'); 15 | 16 | var res = 2; 17 | mk(file, function () { 18 | if (--res === 0) t.end(); 19 | }); 20 | 21 | mk(file, function () { 22 | if (--res === 0) t.end(); 23 | }); 24 | 25 | function mk (file, cb) { 26 | mkdirp(file, 0755, function (err) { 27 | if (err) t.fail(err); 28 | else path.exists(file, function (ex) { 29 | if (!ex) t.fail('file not created') 30 | else fs.stat(file, function (err, stat) { 31 | if (err) t.fail(err) 32 | else { 33 | t.equal(stat.mode & 0777, 0755); 34 | t.ok(stat.isDirectory(), 'target not a directory'); 35 | if (cb) cb(); 36 | } 37 | }) 38 | }) 39 | }); 40 | } 41 | }); 42 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/test/rel.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('rel', function (t) { 7 | t.plan(2); 8 | var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 9 | var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 11 | 12 | var cwd = process.cwd(); 13 | process.chdir('/tmp'); 14 | 15 | var file = [x,y,z].join('/'); 16 | 17 | mkdirp(file, 0755, function (err) { 18 | if (err) t.fail(err); 19 | else path.exists(file, function (ex) { 20 | if (!ex) t.fail('file not created') 21 | else fs.stat(file, function (err, stat) { 22 | if (err) t.fail(err) 23 | else { 24 | process.chdir(cwd); 25 | t.equal(stat.mode & 0777, 0755); 26 | t.ok(stat.isDirectory(), 'target not a directory'); 27 | t.end(); 28 | } 29 | }) 30 | }) 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/test/return.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('return value', function (t) { 7 | t.plan(4); 8 | var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 9 | var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 11 | 12 | var file = '/tmp/' + [x,y,z].join('/'); 13 | 14 | // should return the first dir created. 15 | // By this point, it would be profoundly surprising if /tmp didn't 16 | // already exist, since every other test makes things in there. 17 | mkdirp(file, function (err, made) { 18 | t.ifError(err); 19 | t.equal(made, '/tmp/' + x); 20 | mkdirp(file, function (err, made) { 21 | t.ifError(err); 22 | t.equal(made, null); 23 | }); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/test/return_sync.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('return value', function (t) { 7 | t.plan(2); 8 | var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 9 | var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 11 | 12 | var file = '/tmp/' + [x,y,z].join('/'); 13 | 14 | // should return the first dir created. 15 | // By this point, it would be profoundly surprising if /tmp didn't 16 | // already exist, since every other test makes things in there. 17 | // Note that this will throw on failure, which will fail the test. 18 | var made = mkdirp.sync(file); 19 | t.equal(made, '/tmp/' + x); 20 | 21 | // making the same file again should have no effect. 22 | made = mkdirp.sync(file); 23 | t.equal(made, null); 24 | }); 25 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/test/root.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('root', function (t) { 7 | // '/' on unix, 'c:/' on windows. 8 | var file = path.resolve('/'); 9 | 10 | mkdirp(file, 0755, function (err) { 11 | if (err) throw err 12 | fs.stat(file, function (er, stat) { 13 | if (er) throw er 14 | t.ok(stat.isDirectory(), 'target is a directory'); 15 | t.end(); 16 | }) 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/test/sync.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('sync', function (t) { 7 | t.plan(2); 8 | var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 9 | var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 11 | 12 | var file = '/tmp/' + [x,y,z].join('/'); 13 | 14 | try { 15 | mkdirp.sync(file, 0755); 16 | } catch (err) { 17 | t.fail(err); 18 | return t.end(); 19 | } 20 | 21 | path.exists(file, function (ex) { 22 | if (!ex) t.fail('file not created') 23 | else fs.stat(file, function (err, stat) { 24 | if (err) t.fail(err) 25 | else { 26 | t.equal(stat.mode & 0777, 0755); 27 | t.ok(stat.isDirectory(), 'target not a directory'); 28 | t.end(); 29 | } 30 | }); 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/test/umask.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('implicit mode from umask', function (t) { 7 | t.plan(2); 8 | var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 9 | var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 11 | 12 | var file = '/tmp/' + [x,y,z].join('/'); 13 | 14 | mkdirp(file, function (err) { 15 | if (err) t.fail(err); 16 | else path.exists(file, function (ex) { 17 | if (!ex) t.fail('file not created') 18 | else fs.stat(file, function (err, stat) { 19 | if (err) t.fail(err) 20 | else { 21 | t.equal(stat.mode & 0777, 0777 & (~process.umask())); 22 | t.ok(stat.isDirectory(), 'target not a directory'); 23 | t.end(); 24 | } 25 | }) 26 | }) 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/mkdirp/test/umask_sync.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('umask sync modes', function (t) { 7 | t.plan(2); 8 | var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 9 | var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 11 | 12 | var file = '/tmp/' + [x,y,z].join('/'); 13 | 14 | try { 15 | mkdirp.sync(file); 16 | } catch (err) { 17 | t.fail(err); 18 | return t.end(); 19 | } 20 | 21 | path.exists(file, function (ex) { 22 | if (!ex) t.fail('file not created') 23 | else fs.stat(file, function (err, stat) { 24 | if (err) t.fail(err) 25 | else { 26 | t.equal(stat.mode & 0777, (0777 & (~process.umask()))); 27 | t.ok(stat.isDirectory(), 'target not a directory'); 28 | t.end(); 29 | } 30 | }); 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/range-parser/.npmignore: -------------------------------------------------------------------------------- 1 | test 2 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/range-parser/History.md: -------------------------------------------------------------------------------- 1 | 2 | 0.0.4 / 2012-06-17 3 | ================== 4 | 5 | * changed: ret -1 for unsatisfiable and -2 when invalid 6 | 7 | 0.0.3 / 2012-06-17 8 | ================== 9 | 10 | * fix last-byte-pos default to len - 1 11 | 12 | 0.0.2 / 2012-06-14 13 | ================== 14 | 15 | * add `.type` 16 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/range-parser/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha \ 4 | --reporter spec \ 5 | --require should 6 | 7 | .PHONY: test -------------------------------------------------------------------------------- /node_modules/express/node_modules/range-parser/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | # node-range-parser 3 | 4 | Range header field parser. 5 | 6 | ## Example: 7 | 8 | ```js 9 | assert(-1 == parse(200, 'bytes=500-20')); 10 | assert(-2 == parse(200, 'bytes=malformed')); 11 | parse(200, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 199 }])); 12 | parse(1000, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 499 }])); 13 | parse(1000, 'bytes=40-80').should.eql(arr('bytes', [{ start: 40, end: 80 }])); 14 | parse(1000, 'bytes=-500').should.eql(arr('bytes', [{ start: 500, end: 999 }])); 15 | parse(1000, 'bytes=-400').should.eql(arr('bytes', [{ start: 600, end: 999 }])); 16 | parse(1000, 'bytes=500-').should.eql(arr('bytes', [{ start: 500, end: 999 }])); 17 | parse(1000, 'bytes=400-').should.eql(arr('bytes', [{ start: 400, end: 999 }])); 18 | parse(1000, 'bytes=0-0').should.eql(arr('bytes', [{ start: 0, end: 0 }])); 19 | parse(1000, 'bytes=-1').should.eql(arr('bytes', [{ start: 999, end: 999 }])); 20 | parse(1000, 'items=0-5').should.eql(arr('items', [{ start: 0, end: 5 }])); 21 | parse(1000, 'bytes=40-80,-1').should.eql(arr('bytes', [{ start: 40, end: 80 }, { start: 999, end: 999 }])); 22 | ``` 23 | 24 | ## Installation 25 | 26 | ``` 27 | $ npm install range-parser 28 | ``` -------------------------------------------------------------------------------- /node_modules/express/node_modules/range-parser/index.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Parse "Range" header `str` relative to the given file `size`. 4 | * 5 | * @param {Number} size 6 | * @param {String} str 7 | * @return {Array} 8 | * @api public 9 | */ 10 | 11 | module.exports = function(size, str){ 12 | var valid = true; 13 | var i = str.indexOf('='); 14 | 15 | if (-1 == i) return -2; 16 | 17 | var arr = str.slice(i + 1).split(',').map(function(range){ 18 | var range = range.split('-') 19 | , start = parseInt(range[0], 10) 20 | , end = parseInt(range[1], 10); 21 | 22 | // -nnn 23 | if (isNaN(start)) { 24 | start = size - end; 25 | end = size - 1; 26 | // nnn- 27 | } else if (isNaN(end)) { 28 | end = size - 1; 29 | } 30 | 31 | // limit last-byte-pos to current length 32 | if (end > size - 1) end = size - 1; 33 | 34 | // invalid 35 | if (isNaN(start) 36 | || isNaN(end) 37 | || start > end 38 | || start < 0) valid = false; 39 | 40 | return { 41 | start: start, 42 | end: end 43 | }; 44 | }); 45 | 46 | arr.type = str.slice(0, i); 47 | 48 | return valid ? arr : -1; 49 | }; -------------------------------------------------------------------------------- /node_modules/express/node_modules/range-parser/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "range-parser", 3 | "author": { 4 | "name": "TJ Holowaychuk", 5 | "email": "tj@vision-media.ca", 6 | "url": "http://tjholowaychuk.com" 7 | }, 8 | "description": "Range header field string parser", 9 | "version": "0.0.4", 10 | "main": "index.js", 11 | "dependencies": {}, 12 | "devDependencies": { 13 | "mocha": "*", 14 | "should": "*" 15 | }, 16 | "_id": "range-parser@0.0.4", 17 | "optionalDependencies": {}, 18 | "engines": { 19 | "node": "*" 20 | }, 21 | "_engineSupported": true, 22 | "_npmVersion": "1.1.4", 23 | "_nodeVersion": "v0.6.19", 24 | "_defaultsLoaded": true, 25 | "dist": { 26 | "shasum": "44e7850a3e998699460129acc91f48386f5d28e6" 27 | }, 28 | "_from": "range-parser@0.0.4" 29 | } 30 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/send/.npmignore: -------------------------------------------------------------------------------- 1 | support 2 | test 3 | examples 4 | *.sock 5 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/send/History.md: -------------------------------------------------------------------------------- 1 | 2 | 0.1.0 / 2012-08-25 3 | ================== 4 | 5 | * add options parameter to send() that is passed to fs.createReadStream() [kanongil] 6 | 7 | 0.0.4 / 2012-08-16 8 | ================== 9 | 10 | * allow custom "Accept-Ranges" definition 11 | 12 | 0.0.3 / 2012-07-16 13 | ================== 14 | 15 | * fix normalization of the root directory. Closes #3 16 | 17 | 0.0.2 / 2012-07-09 18 | ================== 19 | 20 | * add passing of req explicitly for now (YUCK) 21 | 22 | 0.0.1 / 2010-01-03 23 | ================== 24 | 25 | * Initial release 26 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/send/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha \ 4 | --require should \ 5 | --reporter spec \ 6 | --bail 7 | 8 | .PHONY: test -------------------------------------------------------------------------------- /node_modules/express/node_modules/send/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = require('./lib/send'); -------------------------------------------------------------------------------- /node_modules/express/node_modules/send/lib/utils.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Return an ETag in the form of `"-"` 4 | * from the given `stat`. 5 | * 6 | * @param {Object} stat 7 | * @return {String} 8 | * @api private 9 | */ 10 | 11 | exports.etag = function(stat) { 12 | return '"' + stat.size + '-' + Number(stat.mtime) + '"'; 13 | }; 14 | 15 | /** 16 | * decodeURIComponent. 17 | * 18 | * Allows V8 to only deoptimize this fn instead of all 19 | * of send(). 20 | * 21 | * @param {String} path 22 | * @api private 23 | */ 24 | 25 | exports.decode = function(path){ 26 | try { 27 | return decodeURIComponent(path); 28 | } catch (err) { 29 | return -1; 30 | } 31 | }; 32 | 33 | /** 34 | * Escape the given string of `html`. 35 | * 36 | * @param {String} html 37 | * @return {String} 38 | * @api private 39 | */ 40 | 41 | exports.escape = function(html){ 42 | return String(html) 43 | .replace(/&(?!\w+;)/g, '&') 44 | .replace(//g, '>') 46 | .replace(/"/g, '"'); 47 | }; -------------------------------------------------------------------------------- /node_modules/express/node_modules/send/node_modules/mime/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010 Benjamin Thomas, Robert Kieffer 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/send/node_modules/mime/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": { 3 | "name": "Robert Kieffer", 4 | "email": "robert@broofa.com", 5 | "url": "http://github.com/broofa" 6 | }, 7 | "contributors": [ 8 | { 9 | "name": "Benjamin Thomas", 10 | "email": "benjamin@benjaminthomas.org", 11 | "url": "http://github.com/bentomas" 12 | } 13 | ], 14 | "dependencies": {}, 15 | "description": "A comprehensive library for mime-type mapping", 16 | "devDependencies": {}, 17 | "keywords": [ 18 | "util", 19 | "mime" 20 | ], 21 | "main": "mime.js", 22 | "name": "mime", 23 | "repository": { 24 | "url": "git://github.com/broofa/node-mime.git", 25 | "type": "git" 26 | }, 27 | "version": "1.2.6", 28 | "_id": "mime@1.2.6", 29 | "optionalDependencies": {}, 30 | "engines": { 31 | "node": "*" 32 | }, 33 | "_engineSupported": true, 34 | "_npmVersion": "1.1.4", 35 | "_nodeVersion": "v0.6.19", 36 | "_defaultsLoaded": true, 37 | "dist": { 38 | "shasum": "6d148ca0f20dcfd02be85a2e217aadcb1f1b8ce8" 39 | }, 40 | "_from": "mime@1.2.6" 41 | } 42 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/send/node_modules/mime/test.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Usage: node test.js 3 | */ 4 | 5 | var mime = require('./mime'); 6 | var assert = require('assert'); 7 | 8 | function eq(a, b) { 9 | console.log('Test: ' + a + ' === ' + b); 10 | assert.strictEqual.apply(null, arguments); 11 | } 12 | 13 | console.log(Object.keys(mime.extensions).length + ' types'); 14 | console.log(Object.keys(mime.types).length + ' extensions\n'); 15 | 16 | // 17 | // Test mime lookups 18 | // 19 | 20 | eq('text/plain', mime.lookup('text.txt')); 21 | eq('text/plain', mime.lookup('.text.txt')); 22 | eq('text/plain', mime.lookup('.txt')); 23 | eq('text/plain', mime.lookup('txt')); 24 | eq('application/octet-stream', mime.lookup('text.nope')); 25 | eq('fallback', mime.lookup('text.fallback', 'fallback')); 26 | eq('application/octet-stream', mime.lookup('constructor')); 27 | eq('text/plain', mime.lookup('TEXT.TXT')); 28 | eq('text/event-stream', mime.lookup('text/event-stream')); 29 | eq('application/x-web-app-manifest+json', mime.lookup('text.webapp')); 30 | 31 | // 32 | // Test extensions 33 | // 34 | 35 | eq('txt', mime.extension(mime.types.text)); 36 | eq('html', mime.extension(mime.types.htm)); 37 | eq('bin', mime.extension('application/octet-stream')); 38 | eq(undefined, mime.extension('constructor')); 39 | 40 | // 41 | // Test node types 42 | // 43 | 44 | eq('application/octet-stream', mime.lookup('file.buffer')); 45 | eq('audio/mp4', mime.lookup('file.m4a')); 46 | 47 | // 48 | // Test charsets 49 | // 50 | 51 | eq('UTF-8', mime.charsets.lookup('text/plain')); 52 | eq(undefined, mime.charsets.lookup(mime.types.js)); 53 | eq('fallback', mime.charsets.lookup('application/octet-stream', 'fallback')); 54 | 55 | console.log('\nOK'); 56 | -------------------------------------------------------------------------------- /node_modules/express/node_modules/send/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "send", 3 | "version": "0.1.0", 4 | "description": "Better streaming static file server with Range and conditional-GET support", 5 | "keywords": [ 6 | "static", 7 | "file", 8 | "server" 9 | ], 10 | "author": { 11 | "name": "TJ Holowaychuk", 12 | "email": "tj@vision-media.ca" 13 | }, 14 | "dependencies": { 15 | "debug": "*", 16 | "mime": "1.2.6", 17 | "fresh": "0.1.0", 18 | "range-parser": "0.0.4" 19 | }, 20 | "devDependencies": { 21 | "mocha": "*", 22 | "should": "*", 23 | "supertest": "0.0.1", 24 | "connect": "2.x" 25 | }, 26 | "scripts": { 27 | "test": "make test" 28 | }, 29 | "main": "index", 30 | "_id": "send@0.1.0", 31 | "optionalDependencies": {}, 32 | "engines": { 33 | "node": "*" 34 | }, 35 | "_engineSupported": true, 36 | "_npmVersion": "1.1.4", 37 | "_nodeVersion": "v0.6.19", 38 | "_defaultsLoaded": true, 39 | "dist": { 40 | "shasum": "8660912e2c1ddee5ed0b3b384616eae9c7f9d1d6" 41 | }, 42 | "_from": "send@0.1.0" 43 | } 44 | -------------------------------------------------------------------------------- /node_modules/express/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "express", 3 | "description": "Sinatra inspired web development framework", 4 | "version": "3.1.1", 5 | "author": { 6 | "name": "TJ Holowaychuk", 7 | "email": "tj@vision-media.ca" 8 | }, 9 | "contributors": [ 10 | { 11 | "name": "TJ Holowaychuk", 12 | "email": "tj@vision-media.ca" 13 | }, 14 | { 15 | "name": "Aaron Heckmann", 16 | "email": "aaron.heckmann+github@gmail.com" 17 | }, 18 | { 19 | "name": "Ciaran Jessup", 20 | "email": "ciaranj@gmail.com" 21 | }, 22 | { 23 | "name": "Guillermo Rauch", 24 | "email": "rauchg@gmail.com" 25 | } 26 | ], 27 | "dependencies": { 28 | "connect": "2.7.4", 29 | "commander": "0.6.1", 30 | "range-parser": "0.0.4", 31 | "mkdirp": "~0.3.4", 32 | "cookie": "0.0.5", 33 | "buffer-crc32": "~0.2.1", 34 | "fresh": "0.1.0", 35 | "methods": "0.0.1", 36 | "send": "0.1.0", 37 | "cookie-signature": "0.0.1", 38 | "debug": "*" 39 | }, 40 | "devDependencies": { 41 | "ejs": "*", 42 | "mocha": "*", 43 | "jade": "*", 44 | "hjs": "*", 45 | "stylus": "*", 46 | "should": "*", 47 | "connect-redis": "*", 48 | "github-flavored-markdown": "*", 49 | "supertest": "0.0.1" 50 | }, 51 | "keywords": [ 52 | "express", 53 | "framework", 54 | "sinatra", 55 | "web", 56 | "rest", 57 | "restful", 58 | "router", 59 | "app", 60 | "api" 61 | ], 62 | "repository": { 63 | "type": "git", 64 | "url": "git://github.com/visionmedia/express.git" 65 | }, 66 | "main": "index", 67 | "bin": { 68 | "express": "./bin/express" 69 | }, 70 | "scripts": { 71 | "prepublish": "npm prune", 72 | "test": "make test" 73 | }, 74 | "engines": { 75 | "node": "*" 76 | }, 77 | "_id": "express@3.1.1", 78 | "optionalDependencies": {}, 79 | "_engineSupported": true, 80 | "_npmVersion": "1.1.4", 81 | "_nodeVersion": "v0.6.19", 82 | "_defaultsLoaded": true, 83 | "dist": { 84 | "shasum": "e9b1cd9153f246fc8042545206a6ae171c1c7faa" 85 | }, 86 | "_from": "express@3.1.1" 87 | } 88 | -------------------------------------------------------------------------------- /node_modules/express/test.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var express = require('./') 7 | , app = express() 8 | 9 | var users = ['foo', 'bar', 'baz']; 10 | 11 | app.use(express.bodyParser()); 12 | 13 | app.get('/api/users', function(req, res){ 14 | res.send(users); 15 | }); 16 | 17 | app.del('/api/users', function(req, res){ 18 | users = []; 19 | res.send(200); 20 | }); 21 | 22 | app.post('/api/users', function(req, res){ 23 | users.push(req.body.name); 24 | res.send(201); 25 | }); 26 | 27 | app.get('/api/user/:id', function(req, res){ 28 | var id = req.params.id; 29 | res.send(users[id]); 30 | }); 31 | 32 | app.use('/api', function(req, res, next){ 33 | var err = new Error('Method Not Allowed'); 34 | err.status = 405; 35 | }); 36 | 37 | app.listen(5555); 38 | console.log('listening on 5555'); 39 | -------------------------------------------------------------------------------- /node_modules/misc/index.js: -------------------------------------------------------------------------------- 1 | var exec = require('child_process').exec; 2 | var parseurl = require('url'); 3 | 4 | var DEFAULT_PATH = '/misc'; 5 | var map = false; 6 | 7 | function misc(mapper) { 8 | map = mapper; 9 | return misc.express; 10 | } 11 | 12 | misc.express = function(req,res,next) { 13 | if (req.path.indexOf(DEFAULT_PATH) === 0) { 14 | //replace + and decode 15 | path = decodeURIComponent(req.path.replace(/\+/g, ' ')); 16 | //remove leading and trailing / 17 | path = path.replace(/^\/|\/$/g,''); 18 | //split and remove leading path 19 | var parts = path.split('/'); 20 | parts.shift(); 21 | var command = parts.shift(); 22 | console.log('executing',command,parts); 23 | if (misc[command]) { 24 | if (command === 'start') { 25 | misc.start(); 26 | } else { 27 | misc[command].apply(this,parts); 28 | } 29 | //prevent anything else from being served from this subpath 30 | res.end('executed '+command); 31 | return; 32 | } 33 | } 34 | next(); 35 | }; 36 | 37 | misc.start = function() { 38 | cb(); 39 | 40 | function cb() { 41 | } 42 | }; 43 | 44 | misc.sendKey = function(key) { 45 | if ( key == 'textme' ) { 46 | exec('gvapi -n 17047371123 -m CodeFinished!'); 47 | } else { 48 | exec('misc_control.sh ' + key); 49 | } 50 | }; 51 | 52 | misc.mapKey = function(command,key,then) { 53 | misc[command] = function() { 54 | misc.sendKey(key); 55 | if (then) { 56 | then(); 57 | } 58 | }; 59 | }; 60 | 61 | misc.mapKey('rumcoke','rumcoke'); 62 | misc.mapKey('gintonic','gintonic'); 63 | misc.mapKey('textme','textme'); 64 | misc.mapKey('kill','kill'); 65 | misc.mapKey('garage','garage'); 66 | module.exports = misc; 67 | -------------------------------------------------------------------------------- /node_modules/misc/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "misc", 3 | "version": "0.0.1", 4 | "description": "Nodejs module to control omxplayer. Specifically written for the raspberry pi", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "Raspberry", 11 | "pi", 12 | "misc", 13 | "express", 14 | "middleware" 15 | ], 16 | "author": { 17 | "name": "me@stevenhickson.com" 18 | }, 19 | "license": "BSD", 20 | "_id": "misc@0.0.1", 21 | "dependencies": {}, 22 | "devDependencies": {}, 23 | "optionalDependencies": {}, 24 | "engines": { 25 | "node": "*" 26 | }, 27 | "_engineSupported": true, 28 | "_npmVersion": "1.1.4", 29 | "_nodeVersion": "v0.6.19", 30 | "_defaultsLoaded": true, 31 | "_from": "misc@*" 32 | } 33 | -------------------------------------------------------------------------------- /node_modules/misc/readme.md: -------------------------------------------------------------------------------- 1 | omxcontrol 2 | ========== 3 | 4 | Nodejs module to control omxplayer. Specifically written for the raspberry pi 5 | 6 | Requirements 7 | ------------ 8 | 9 | * omxplayer (installed by default on the raspberry pi raspian image) 10 | * nodejs (`apt-get install nodejs`) 11 | * express (optional) 12 | 13 | Usage 14 | ----- 15 | 16 | Basic usage 17 | 18 | omx = require('omxcontrol'); 19 | 20 | omx.start(filename); 21 | 22 | omx.pause(); 23 | 24 | omx.quit(); 25 | 26 | Use with express as middleware. This type of usage exposes the above methods as an http api: 27 | 28 | omx = require('omxcontrol'); 29 | express.use(omx()); 30 | 31 | http://localhost/omx/start/:filename 32 | http://localhost/omx/pause 33 | http://localhost/omx/quit 34 | 35 | You actually might not want to pass the real file name to the http api, probably to simplify things, but in my case, omxplayer needs a specific url to play youtube video. For this usecase, `omx()` can be passed a mapping function to map the filename to something else. Calling the provided start method is required to actually start the video. Your logic can be async and even choose not to start things: 36 | 37 | omx = require('omxcontrol'); 38 | express.use(omx(function(fn,start) { 39 | //do something special 40 | start(fn); 41 | })); -------------------------------------------------------------------------------- /node_modules/omxcontrol/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "omxcontrol", 3 | "version": "0.0.1", 4 | "description": "Nodejs module to control omxplayer. Specifically written for the raspberry pi", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git://github.com/rikkertkoppes/omxcontrol.git" 12 | }, 13 | "keywords": [ 14 | "Raspberry", 15 | "pi", 16 | "omxplayer", 17 | "express", 18 | "middleware" 19 | ], 20 | "author": { 21 | "name": "rikkert@rikkertkoppes.com" 22 | }, 23 | "license": "BSD", 24 | "_id": "omxcontrol@0.0.1", 25 | "dependencies": {}, 26 | "devDependencies": {}, 27 | "optionalDependencies": {}, 28 | "engines": { 29 | "node": "*" 30 | }, 31 | "_engineSupported": true, 32 | "_npmVersion": "1.1.4", 33 | "_nodeVersion": "v0.6.19", 34 | "_defaultsLoaded": true, 35 | "_from": "omxcontrol@*" 36 | } 37 | -------------------------------------------------------------------------------- /node_modules/omxcontrol/readme.md: -------------------------------------------------------------------------------- 1 | omxcontrol 2 | ========== 3 | 4 | Nodejs module to control omxplayer. Specifically written for the raspberry pi 5 | 6 | Requirements 7 | ------------ 8 | 9 | * omxplayer (installed by default on the raspberry pi raspian image) 10 | * nodejs (`apt-get install nodejs`) 11 | * express (optional) 12 | 13 | Usage 14 | ----- 15 | 16 | Basic usage 17 | 18 | omx = require('omxcontrol'); 19 | 20 | omx.start(filename); 21 | 22 | omx.pause(); 23 | 24 | omx.quit(); 25 | 26 | Use with express as middleware. This type of usage exposes the above methods as an http api: 27 | 28 | omx = require('omxcontrol'); 29 | express.use(omx()); 30 | 31 | http://localhost/omx/start/:filename 32 | http://localhost/omx/pause 33 | http://localhost/omx/quit 34 | 35 | You actually might not want to pass the real file name to the http api, probably to simplify things, but in my case, omxplayer needs a specific url to play youtube video. For this usecase, `omx()` can be passed a mapping function to map the filename to something else. Calling the provided start method is required to actually start the video. Your logic can be async and even choose not to start things: 36 | 37 | omx = require('omxcontrol'); 38 | express.use(omx(function(fn,start) { 39 | //do something special 40 | start(fn); 41 | })); -------------------------------------------------------------------------------- /node_modules/pandora/.package.json.un~: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/node_modules/pandora/.package.json.un~ -------------------------------------------------------------------------------- /node_modules/pandora/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pandora", 3 | "version": "0.0.1", 4 | "description": "Nodejs module to control omxplayer. Specifically written for the raspberry pi", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "Raspberry", 11 | "pi", 12 | "pandora", 13 | "express", 14 | "middleware" 15 | ], 16 | "author": { 17 | "name": "me@stevenhickson.com" 18 | }, 19 | "license": "BSD", 20 | "_id": "pandora@0.0.1", 21 | "dependencies": {}, 22 | "devDependencies": {}, 23 | "optionalDependencies": {}, 24 | "engines": { 25 | "node": "*" 26 | }, 27 | "_engineSupported": true, 28 | "_npmVersion": "1.1.4", 29 | "_nodeVersion": "v0.6.19", 30 | "_defaultsLoaded": true, 31 | "_from": "pandora@*" 32 | } 33 | -------------------------------------------------------------------------------- /node_modules/pandora/readme.md: -------------------------------------------------------------------------------- 1 | omxcontrol 2 | ========== 3 | 4 | Nodejs module to control omxplayer. Specifically written for the raspberry pi 5 | 6 | Requirements 7 | ------------ 8 | 9 | * omxplayer (installed by default on the raspberry pi raspian image) 10 | * nodejs (`apt-get install nodejs`) 11 | * express (optional) 12 | 13 | Usage 14 | ----- 15 | 16 | Basic usage 17 | 18 | omx = require('omxcontrol'); 19 | 20 | omx.start(filename); 21 | 22 | omx.pause(); 23 | 24 | omx.quit(); 25 | 26 | Use with express as middleware. This type of usage exposes the above methods as an http api: 27 | 28 | omx = require('omxcontrol'); 29 | express.use(omx()); 30 | 31 | http://localhost/omx/start/:filename 32 | http://localhost/omx/pause 33 | http://localhost/omx/quit 34 | 35 | You actually might not want to pass the real file name to the http api, probably to simplify things, but in my case, omxplayer needs a specific url to play youtube video. For this usecase, `omx()` can be passed a mapping function to map the filename to something else. Calling the provided start method is required to actually start the video. Your logic can be async and even choose not to start things: 36 | 37 | omx = require('omxcontrol'); 38 | express.use(omx(function(fn,start) { 39 | //do something special 40 | start(fn); 41 | })); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GoogleTV-rPi", 3 | "version": "0.0.1", 4 | "private": false, 5 | "scripts": { 6 | "start": "node app.js" 7 | }, 8 | "dependencies": { 9 | "express": "3.1.1", 10 | "jade": "*", 11 | "socket.io":"0.9.14", 12 | "omxcontrol":"*" 13 | } 14 | } -------------------------------------------------------------------------------- /private.js.example: -------------------------------------------------------------------------------- 1 | var ssl_password = "Your Password Here" 2 | exports.ssl_password = ssl_password 3 | var secret_token = "Secret Token Here" 4 | exports.secret_token = secret_token 5 | -------------------------------------------------------------------------------- /public/css/button.css: -------------------------------------------------------------------------------- 1 | button{width:75px;height:75px;} -------------------------------------------------------------------------------- /public/font/OpenSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/font/OpenSans-Bold.ttf -------------------------------------------------------------------------------- /public/font/OpenSans-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/font/OpenSans-Light.ttf -------------------------------------------------------------------------------- /public/font/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/font/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /public/font/OpenSans-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/font/OpenSans-Semibold.ttf -------------------------------------------------------------------------------- /public/font/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/font/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /public/font/sosa-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/font/sosa-regular-webfont.ttf -------------------------------------------------------------------------------- /public/font/weather.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/font/weather.ttf -------------------------------------------------------------------------------- /public/images/Microphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/Microphone.png -------------------------------------------------------------------------------- /public/images/Refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/Refresh.png -------------------------------------------------------------------------------- /public/images/back15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/back15.png -------------------------------------------------------------------------------- /public/images/back60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/back60.png -------------------------------------------------------------------------------- /public/images/custom_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/custom_icon.png -------------------------------------------------------------------------------- /public/images/forward15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/forward15.png -------------------------------------------------------------------------------- /public/images/forward60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/forward60.png -------------------------------------------------------------------------------- /public/images/kill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/kill.png -------------------------------------------------------------------------------- /public/images/off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/off.png -------------------------------------------------------------------------------- /public/images/on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/on.png -------------------------------------------------------------------------------- /public/images/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/pause.png -------------------------------------------------------------------------------- /public/images/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/play.png -------------------------------------------------------------------------------- /public/images/power.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/power.png -------------------------------------------------------------------------------- /public/images/remote-hi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/remote-hi.png -------------------------------------------------------------------------------- /public/images/restart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/restart.png -------------------------------------------------------------------------------- /public/images/startup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/startup.png -------------------------------------------------------------------------------- /public/images/stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/stop.png -------------------------------------------------------------------------------- /public/images/subtitles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/subtitles.png -------------------------------------------------------------------------------- /public/images/voldown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/voldown.png -------------------------------------------------------------------------------- /public/images/volup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/images/volup.png -------------------------------------------------------------------------------- /public/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /public/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StevenHickson/RaspberryPiTV/a9720370a59d0402023c843e7111586124d99b52/public/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /public/js/controller.js: -------------------------------------------------------------------------------- 1 | var host = document.location.origin; 2 | function player_pause() 3 | { 4 | $.get(host + '/omx/pause',function(data){ 5 | console.log(data); 6 | }); 7 | } 8 | 9 | function player_quit() 10 | { 11 | $.get(host + '/omx/quit',function(data){ 12 | console.log(data); 13 | }); 14 | } 15 | 16 | function player_kill() 17 | { 18 | $.get(host + '/omx/kill',function(data){ 19 | console.log(data); 20 | }); 21 | } 22 | 23 | function player_play() 24 | { 25 | $.get(host + '/omx/play',function(data){ 26 | console.log(data); 27 | }); 28 | } 29 | 30 | function player_back15() 31 | { 32 | $.get(host + '/omx/back15',function(data){ 33 | console.log(data); 34 | }); 35 | } 36 | 37 | function player_forward15() 38 | { 39 | $.get(host + '/omx/forward15',function(data){ 40 | console.log(data); 41 | }); 42 | } 43 | 44 | function player_back60() 45 | { 46 | $.get(host + '/omx/back60',function(data){ 47 | console.log(data); 48 | }); 49 | } 50 | 51 | function player_forward60() 52 | { 53 | $.get(host + '/omx/forward60',function(data){ 54 | console.log(data); 55 | }); 56 | } 57 | 58 | function player_volup() 59 | { 60 | $.get(host + '/omx/volup',function(data){ 61 | console.log(data); 62 | }); 63 | } 64 | 65 | function player_voldown() 66 | { 67 | $.get(host + '/omx/voldown',function(data){ 68 | console.log(data); 69 | }); 70 | } 71 | 72 | function player_update() 73 | { 74 | $.get(host + '/omx/update',function(data){ 75 | console.log(data); 76 | }); 77 | } 78 | 79 | function player_restart() 80 | { 81 | $.get(host + '/omx/restart',function(data){ 82 | console.log(data); 83 | }); 84 | } 85 | 86 | function player_subtitles() 87 | { 88 | $.get(host + '/omx/subtitles',function(data){ 89 | console.log(data); 90 | }); 91 | } 92 | 93 | -------------------------------------------------------------------------------- /public/js/drinks.js: -------------------------------------------------------------------------------- 1 | var host = document.location.origin; 2 | function rumcoke() 3 | { 4 | $.get(host + '/drinks/rumcoke',function(data){ 5 | console.log(data); 6 | }); 7 | } 8 | 9 | function gintonic() 10 | { 11 | $.get(host + '/drinks/gintonic',function(data){ 12 | console.log(data); 13 | }); 14 | } 15 | 16 | function drinks( valve, time) 17 | { 18 | var exec = require('child_process').exec; 19 | exec('drink_control.sh ' + valve + ' ' + time); 20 | } 21 | 22 | function kill() 23 | { 24 | $.get(host + '/drinks/kill',function(data){ 25 | console.log(data); 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /public/js/dynamicpage.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | 3 | var newHash = "", 4 | $mainContent = $("#main-content"), 5 | $pageWrap = $("#page-wrap"), 6 | baseHeight = 0, 7 | $el; 8 | 9 | $pageWrap.height($pageWrap.height()); 10 | baseHeight = $pageWrap.height() - $mainContent.height(); 11 | 12 | $("nav").delegate("a", "click", function() { 13 | window.location.hash = $(this).attr("href"); 14 | return false; 15 | }); 16 | 17 | $(window).bind('hashchange', function(){ 18 | 19 | newHash = window.location.hash.substring(1); 20 | 21 | if (newHash) { 22 | $mainContent 23 | .find("#guts") 24 | .fadeOut(200, function() { 25 | $mainContent.hide().load(newHash + " #guts", function() { 26 | $mainContent.fadeIn(200, function() { 27 | $pageWrap.animate({ 28 | height: baseHeight + $mainContent.height() + "px" 29 | }); 30 | }); 31 | $("nav a").removeClass("current"); 32 | $("nav a[href="+newHash+"]").addClass("current"); 33 | }); 34 | }); 35 | }; 36 | 37 | }); 38 | 39 | $(window).trigger('hashchange'); 40 | 41 | }); -------------------------------------------------------------------------------- /public/js/music.js: -------------------------------------------------------------------------------- 1 | var host = 'http://192.168.1.9:9000'; 2 | function player_pause() 3 | { 4 | $.get(host + '/pandora/pause',function(data){ 5 | console.log(data); 6 | }); 7 | } 8 | 9 | function player_quit() 10 | { 11 | $.get(host + '/pandora/quit',function(data){ 12 | console.log(data); 13 | }); 14 | } 15 | 16 | function player_play() 17 | { 18 | $.get(host + '/pandora/play',function(data){ 19 | console.log(data); 20 | }); 21 | } 22 | 23 | function player_next() 24 | { 25 | $.get(host + '/pandora/next',function(data){ 26 | console.log(data); 27 | }); 28 | } 29 | 30 | function player_volup() 31 | { 32 | $.get(host + '/pandora/volumeup',function(data){ 33 | console.log(data); 34 | }); 35 | } 36 | function player_voldown() 37 | { 38 | $.get(host + '/pandora/volumedown',function(data){ 39 | console.log(data); 40 | }); 41 | } 42 | 43 | function power() 44 | { 45 | $.get(host + '/pandora/power',function(data){ 46 | console.log(data); 47 | }); 48 | } 49 | -------------------------------------------------------------------------------- /public/js/private.js.example: -------------------------------------------------------------------------------- 1 | var youtube_api_key = "Your Password Here" 2 | -------------------------------------------------------------------------------- /public/sub-cameras.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /public/sub-control.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | -------------------------------------------------------------------------------- /public/sub-downloads.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /public/sub-drinks.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /public/sub-music.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | -------------------------------------------------------------------------------- /public/sub-remote.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 |
9 |
10 | 11 |
    12 | 13 |
14 |
15 |
16 | 17 | 18 | 19 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /public/sub-videos.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 |
9 |
10 | 11 |
    12 | 13 |
14 |
15 |
16 | 17 | 18 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /public/sub-voice.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 |
9 | 10 | 11 | -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * GET home page. 4 | */ 5 | 6 | exports.index = function(req, res){ 7 | res.render('index', { title: 'Express' }); 8 | }; -------------------------------------------------------------------------------- /routes/user.js: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * GET users listing. 4 | */ 5 | 6 | exports.list = function(req, res){ 7 | res.send("respond with a resource"); 8 | }; --------------------------------------------------------------------------------