From 41a7f7e20dd18c03765417e0a5692e6e85981507 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Tue, 23 Sep 2014 14:54:05 -0400 Subject: [PATCH] Add bcrypt and session modules --- app.js | 39 +- node_modules/bcrypt-nodejs/.gitattributes | 22 + node_modules/bcrypt-nodejs/.npmignore | 163 ++++ node_modules/bcrypt-nodejs/LICENSE | 25 + node_modules/bcrypt-nodejs/README.md | 90 +++ node_modules/bcrypt-nodejs/bCrypt.js | 707 ++++++++++++++++++ node_modules/bcrypt-nodejs/package.json | 65 ++ node_modules/bcrypt-nodejs/test-async.js | 71 ++ node_modules/bcrypt-nodejs/test-sync.js | 98 +++ node_modules/express-myconnection/.npmignore | 20 + node_modules/express-myconnection/LICENSE | 191 +++++ node_modules/express-myconnection/README.md | 51 ++ .../examples/single/app.js | 35 + .../examples/single/package.json | 14 + .../examples/single/routes/index.js | 18 + .../examples/single/views/index.ejs | 15 + node_modules/express-myconnection/index.js | 1 + .../lib/express-myconnection.js | 125 ++++ .../express-myconnection/package.json | 50 ++ node_modules/express-session/HISTORY.md | 183 +++++ node_modules/express-session/LICENSE | 24 + node_modules/express-session/README.md | 222 ++++++ node_modules/express-session/index.js | 525 +++++++++++++ .../node_modules/cookie-signature/.npmignore | 4 + .../node_modules/cookie-signature/History.md | 27 + .../node_modules/cookie-signature/Makefile | 7 + .../node_modules/cookie-signature/Readme.md | 42 ++ .../node_modules/cookie-signature/index.js | 51 ++ .../cookie-signature/package.json | 56 ++ .../node_modules/cookie/.npmignore | 2 + .../node_modules/cookie/LICENSE | 9 + .../node_modules/cookie/README.md | 44 ++ .../node_modules/cookie/index.js | 75 ++ .../node_modules/cookie/package.json | 54 ++ .../node_modules/crc/.npmignore | 4 + .../express-session/node_modules/crc/LICENSE | 22 + .../node_modules/crc/README.md | 89 +++ .../node_modules/crc/lib/crc.js | 71 ++ .../node_modules/crc/lib/crc1.js | 21 + .../node_modules/crc/lib/crc16.js | 25 + .../node_modules/crc/lib/crc16_ccitt.js | 25 + .../node_modules/crc/lib/crc16_modbus.js | 25 + .../node_modules/crc/lib/crc24.js | 25 + .../node_modules/crc/lib/crc32.js | 25 + .../node_modules/crc/lib/crc8.js | 25 + .../node_modules/crc/lib/crc8_1wire.js | 25 + .../node_modules/crc/lib/create.js | 10 + .../node_modules/crc/lib/hex.js | 9 + .../node_modules/crc/lib/index.js | 11 + .../node_modules/crc/package.json | 58 ++ .../node_modules/depd/History.md | 62 ++ .../express-session/node_modules/depd/LICENSE | 22 + .../node_modules/depd/Readme.md | 266 +++++++ .../node_modules/depd/index.js | 522 +++++++++++++ .../depd/lib/compat/buffer-concat.js | 33 + .../depd/lib/compat/callsite-tostring.js | 101 +++ .../node_modules/depd/lib/compat/index.js | 69 ++ .../node_modules/depd/package.json | 67 ++ .../node_modules/on-headers/.npmignore | 3 + .../node_modules/on-headers/History.md | 11 + .../node_modules/on-headers/LICENSE | 22 + .../node_modules/on-headers/README.md | 59 ++ .../node_modules/on-headers/index.js | 91 +++ .../node_modules/on-headers/package.json | 59 ++ .../node_modules/parseurl/.npmignore | 4 + .../node_modules/parseurl/HISTORY.md | 42 ++ .../node_modules/parseurl/LICENSE | 24 + .../node_modules/parseurl/README.md | 107 +++ .../node_modules/parseurl/index.js | 136 ++++ .../node_modules/parseurl/package.json | 80 ++ .../node_modules/uid-safe/.npmignore | 2 + .../node_modules/uid-safe/LICENSE | 22 + .../node_modules/uid-safe/README.md | 44 ++ .../node_modules/uid-safe/index.js | 27 + .../node_modules/base64-url/.npmignore | 12 + .../node_modules/base64-url/.travis.yml | 12 + .../uid-safe/node_modules/base64-url/LICENSE | 15 + .../node_modules/base64-url/README.md | 27 + .../uid-safe/node_modules/base64-url/index.js | 17 + .../node_modules/base64-url/package.json | 50 ++ .../node_modules/base64-url/test/index.js | 24 + .../uid-safe/node_modules/mz/.npmignore | 1 + .../uid-safe/node_modules/mz/.travis.yml | 7 + .../uid-safe/node_modules/mz/HISTORY.md | 6 + .../uid-safe/node_modules/mz/LICENSE | 22 + .../uid-safe/node_modules/mz/README.md | 114 +++ .../uid-safe/node_modules/mz/_promisify.js | 34 + .../node_modules/mz/_promisify_all.js | 24 + .../uid-safe/node_modules/mz/child_process.js | 8 + .../node_modules/mz/coverage/coverage.json | 1 + .../mz/coverage/lcov-report/index.html | 350 +++++++++ .../lcov-report/mz/_promisify.js.html | 424 +++++++++++ .../lcov-report/mz/_promisify_all.js.html | 394 ++++++++++ .../lcov-report/mz/child_process.js.html | 346 +++++++++ .../mz/coverage/lcov-report/mz/crypto.js.html | 349 +++++++++ .../mz/coverage/lcov-report/mz/fs.js.html | 448 +++++++++++ .../mz/coverage/lcov-report/mz/index.html | 415 ++++++++++ .../mz/coverage/lcov-report/mz/zlib.js.html | 361 +++++++++ .../mz/coverage/lcov-report/prettify.css | 1 + .../mz/coverage/lcov-report/prettify.js | 1 + .../node_modules/mz/coverage/lcov.info | 128 ++++ .../uid-safe/node_modules/mz/crypto.js | 9 + .../uid-safe/node_modules/mz/dns.js | 16 + .../uid-safe/node_modules/mz/fs.js | 42 ++ .../node_modules/native-or-bluebird/LICENSE | 22 + .../node_modules/native-or-bluebird/README.md | 48 ++ .../node_modules/native-or-bluebird/index.js | 9 + .../native-or-bluebird/package.json | 64 ++ .../native-or-bluebird/promise.js | 8 + .../uid-safe/node_modules/mz/package.json | 57 ++ .../uid-safe/node_modules/mz/zlib.js | 13 + .../node_modules/uid-safe/package.json | 58 ++ .../node_modules/uid-safe/test.js | 46 ++ .../node_modules/utils-merge/.travis.yml | 6 + .../node_modules/utils-merge/LICENSE | 20 + .../node_modules/utils-merge/README.md | 34 + .../node_modules/utils-merge/index.js | 23 + .../node_modules/utils-merge/package.json | 61 ++ node_modules/express-session/package.json | 92 +++ .../express-session/session/cookie.js | 128 ++++ .../express-session/session/memory.js | 151 ++++ .../express-session/session/session.js | 124 +++ node_modules/express-session/session/store.js | 84 +++ public/favicon.ico | Bin 0 -> 1406 bytes routes/task.js | 31 + routes/tasks.js | 9 - routes/user.js | 25 + routes/users.js | 9 - views/layout.dust | 1 + 129 files changed, 10224 insertions(+), 27 deletions(-) create mode 100644 node_modules/bcrypt-nodejs/.gitattributes create mode 100644 node_modules/bcrypt-nodejs/.npmignore create mode 100644 node_modules/bcrypt-nodejs/LICENSE create mode 100644 node_modules/bcrypt-nodejs/README.md create mode 100644 node_modules/bcrypt-nodejs/bCrypt.js create mode 100644 node_modules/bcrypt-nodejs/package.json create mode 100644 node_modules/bcrypt-nodejs/test-async.js create mode 100644 node_modules/bcrypt-nodejs/test-sync.js create mode 100644 node_modules/express-myconnection/.npmignore create mode 100644 node_modules/express-myconnection/LICENSE create mode 100644 node_modules/express-myconnection/README.md create mode 100644 node_modules/express-myconnection/examples/single/app.js create mode 100644 node_modules/express-myconnection/examples/single/package.json create mode 100644 node_modules/express-myconnection/examples/single/routes/index.js create mode 100644 node_modules/express-myconnection/examples/single/views/index.ejs create mode 100644 node_modules/express-myconnection/index.js create mode 100644 node_modules/express-myconnection/lib/express-myconnection.js create mode 100644 node_modules/express-myconnection/package.json create mode 100644 node_modules/express-session/HISTORY.md create mode 100644 node_modules/express-session/LICENSE create mode 100644 node_modules/express-session/README.md create mode 100644 node_modules/express-session/index.js create mode 100644 node_modules/express-session/node_modules/cookie-signature/.npmignore create mode 100644 node_modules/express-session/node_modules/cookie-signature/History.md create mode 100644 node_modules/express-session/node_modules/cookie-signature/Makefile create mode 100644 node_modules/express-session/node_modules/cookie-signature/Readme.md create mode 100644 node_modules/express-session/node_modules/cookie-signature/index.js create mode 100644 node_modules/express-session/node_modules/cookie-signature/package.json create mode 100644 node_modules/express-session/node_modules/cookie/.npmignore create mode 100644 node_modules/express-session/node_modules/cookie/LICENSE create mode 100644 node_modules/express-session/node_modules/cookie/README.md create mode 100644 node_modules/express-session/node_modules/cookie/index.js create mode 100644 node_modules/express-session/node_modules/cookie/package.json create mode 100644 node_modules/express-session/node_modules/crc/.npmignore create mode 100644 node_modules/express-session/node_modules/crc/LICENSE create mode 100644 node_modules/express-session/node_modules/crc/README.md create mode 100644 node_modules/express-session/node_modules/crc/lib/crc.js create mode 100644 node_modules/express-session/node_modules/crc/lib/crc1.js create mode 100644 node_modules/express-session/node_modules/crc/lib/crc16.js create mode 100644 node_modules/express-session/node_modules/crc/lib/crc16_ccitt.js create mode 100644 node_modules/express-session/node_modules/crc/lib/crc16_modbus.js create mode 100644 node_modules/express-session/node_modules/crc/lib/crc24.js create mode 100644 node_modules/express-session/node_modules/crc/lib/crc32.js create mode 100644 node_modules/express-session/node_modules/crc/lib/crc8.js create mode 100644 node_modules/express-session/node_modules/crc/lib/crc8_1wire.js create mode 100644 node_modules/express-session/node_modules/crc/lib/create.js create mode 100644 node_modules/express-session/node_modules/crc/lib/hex.js create mode 100644 node_modules/express-session/node_modules/crc/lib/index.js create mode 100644 node_modules/express-session/node_modules/crc/package.json create mode 100644 node_modules/express-session/node_modules/depd/History.md create mode 100644 node_modules/express-session/node_modules/depd/LICENSE create mode 100644 node_modules/express-session/node_modules/depd/Readme.md create mode 100644 node_modules/express-session/node_modules/depd/index.js create mode 100644 node_modules/express-session/node_modules/depd/lib/compat/buffer-concat.js create mode 100644 node_modules/express-session/node_modules/depd/lib/compat/callsite-tostring.js create mode 100644 node_modules/express-session/node_modules/depd/lib/compat/index.js create mode 100644 node_modules/express-session/node_modules/depd/package.json create mode 100644 node_modules/express-session/node_modules/on-headers/.npmignore create mode 100644 node_modules/express-session/node_modules/on-headers/History.md create mode 100644 node_modules/express-session/node_modules/on-headers/LICENSE create mode 100644 node_modules/express-session/node_modules/on-headers/README.md create mode 100644 node_modules/express-session/node_modules/on-headers/index.js create mode 100644 node_modules/express-session/node_modules/on-headers/package.json create mode 100644 node_modules/express-session/node_modules/parseurl/.npmignore create mode 100644 node_modules/express-session/node_modules/parseurl/HISTORY.md create mode 100644 node_modules/express-session/node_modules/parseurl/LICENSE create mode 100644 node_modules/express-session/node_modules/parseurl/README.md create mode 100644 node_modules/express-session/node_modules/parseurl/index.js create mode 100644 node_modules/express-session/node_modules/parseurl/package.json create mode 100644 node_modules/express-session/node_modules/uid-safe/.npmignore create mode 100644 node_modules/express-session/node_modules/uid-safe/LICENSE create mode 100644 node_modules/express-session/node_modules/uid-safe/README.md create mode 100644 node_modules/express-session/node_modules/uid-safe/index.js create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/.npmignore create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/.travis.yml create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/LICENSE create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/README.md create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/index.js create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/package.json create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/test/index.js create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/.npmignore create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/.travis.yml create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/HISTORY.md create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/LICENSE create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/README.md create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/_promisify.js create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/_promisify_all.js create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/child_process.js create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/coverage.json create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/index.html create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/_promisify.js.html create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/_promisify_all.js.html create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/child_process.js.html create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/crypto.js.html create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/fs.js.html create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/index.html create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/zlib.js.html create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/prettify.css create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/prettify.js create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov.info create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/crypto.js create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/dns.js create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/fs.js create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/LICENSE create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/README.md create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/index.js create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/package.json create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/promise.js create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/package.json create mode 100644 node_modules/express-session/node_modules/uid-safe/node_modules/mz/zlib.js create mode 100644 node_modules/express-session/node_modules/uid-safe/package.json create mode 100644 node_modules/express-session/node_modules/uid-safe/test.js create mode 100644 node_modules/express-session/node_modules/utils-merge/.travis.yml create mode 100644 node_modules/express-session/node_modules/utils-merge/LICENSE create mode 100644 node_modules/express-session/node_modules/utils-merge/README.md create mode 100644 node_modules/express-session/node_modules/utils-merge/index.js create mode 100644 node_modules/express-session/node_modules/utils-merge/package.json create mode 100644 node_modules/express-session/package.json create mode 100644 node_modules/express-session/session/cookie.js create mode 100644 node_modules/express-session/session/memory.js create mode 100644 node_modules/express-session/session/session.js create mode 100644 node_modules/express-session/session/store.js create mode 100755 public/favicon.ico create mode 100644 routes/task.js delete mode 100644 routes/tasks.js create mode 100644 routes/user.js delete mode 100644 routes/users.js diff --git a/app.js b/app.js index 8ffd572..0054fd7 100644 --- a/app.js +++ b/app.js @@ -1,16 +1,33 @@ -var express = require('express'); -var path = require('path'); -var favicon = require('serve-favicon'); -var logger = require('morgan'); -var cookieParser = require('cookie-parser'); -var bodyParser = require('body-parser'); -var requireDir = require('require-dir'); +"use strict"; +// ------------ Basic Dependencies ------------------------------------------- +var express = require('express'), + session = require('express-session'), + path = require('path'), + favicon = require('serve-favicon'), + logger = require('morgan'), + cookieParser = require('cookie-parser'), + bodyParser = require('body-parser'), + requireDir = require('require-dir'), + connection = require('express-myconnection'), + bcrypt = require('bcrypt-nodejs'), + mysql = require('mysql'); +// ---------------------------------------------------------------------------- var app = express(); // General config app.set('trust proxy', true); // Trust X-Forwarded-* headers +// Database connection +app.use( + connection('mysql', { + host: 'localhost', + user: 'node', + password: 'node', + port: 3306, + database: 'node' + }, 'request') +); // view engine setup var consolidate = require('consolidate'); @@ -19,8 +36,8 @@ app.engine('dust', consolidate.dust); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'dust'); -// uncomment after placing your favicon in /public -//app.use(favicon(__dirname + '/public/favicon.ico')); +// General app setup +app.use(favicon(__dirname + '/public/favicon.ico')); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); @@ -28,6 +45,10 @@ app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'), {redirect:false})); // Route mapping +// Routes are prefixed by the filename, +// unless the filename is index. +// +// A '/' route in the users file becomes the '/users/' route. var routes = requireDir('routes'); Object.keys(routes).forEach(function(route) { var path = (route != 'index') diff --git a/node_modules/bcrypt-nodejs/.gitattributes b/node_modules/bcrypt-nodejs/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/node_modules/bcrypt-nodejs/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/node_modules/bcrypt-nodejs/.npmignore b/node_modules/bcrypt-nodejs/.npmignore new file mode 100644 index 0000000..5ebd21a --- /dev/null +++ b/node_modules/bcrypt-nodejs/.npmignore @@ -0,0 +1,163 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results +[Dd]ebug/ +[Rr]elease/ +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.vspscc +.builds +*.dotCover + +## TODO: If you have NuGet Package Restore enabled, uncomment this +#packages/ + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf + +# Visual Studio profiler +*.psess +*.vsp + +# ReSharper is a .NET coding add-in +_ReSharper* + +# Installshield output folder +[Ee]xpress + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish + +# Others +[Bb]in +[Oo]bj +sql +TestResults +*.Cache +ClientBin +stylecop.* +~$* +*.dbmdl +Generated_Code #added for RIA/Silverlight projects + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML + + + +############ +## Windows +############ + +# Windows image file caches +Thumbs.db + +# Folder config file +Desktop.ini + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist +build +eggs +parts +bin +var +sdist +develop-eggs +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg + +# Mac crap +.DS_Store diff --git a/node_modules/bcrypt-nodejs/LICENSE b/node_modules/bcrypt-nodejs/LICENSE new file mode 100644 index 0000000..0a33601 --- /dev/null +++ b/node_modules/bcrypt-nodejs/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2012 Nevins Bartolomeo +Copyright (c) 2012 Shane Girish +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/node_modules/bcrypt-nodejs/README.md b/node_modules/bcrypt-nodejs/README.md new file mode 100644 index 0000000..d73a1c4 --- /dev/null +++ b/node_modules/bcrypt-nodejs/README.md @@ -0,0 +1,90 @@ +bcrypt-nodejs +=========================================== + +Warning : A change was made in v0.0.3 to allow encoding of UTF-8 encoded strings. This causes strings encoded in v0.0.2 or earlier to not work in v0.0.3 anymore. + +Native JS implementation of BCrypt for Node. +Has the same functionality as [node.bcrypt.js] expect for a few tiny differences. +Mainly, it doesn't let you set the seed length for creating the random byte array. + +I created this version due to a small [problem](https://github.com/ncb000gt/node.bcrypt.js/issues/102) I faced with [node.bcrypt.js]. +Basically, to deploy one of my apps which uses [node.bcrypt.js] on a winx64 platform, I have to force the user to download about 1.6gb of sdks, buildtools and other requirements of which some fail to install ! Microsoft :( + +This code is based on [javascript-bcrypt] and uses [crypto] (http://nodejs.org/api/crypto.html) to create random byte arrays. + +Basic usage: +----------- +Synchronous +``` +var hash = bcrypt.hashSync("bacon"); + +bcrypt.compareSync("bacon", hash); // true +bcrypt.compareSync("veggies", hash); // false +``` + +Asynchronous +``` +bcrypt.hash("bacon", null, null, function(err, hash) { + // Store hash in your password DB. +}); + +// Load hash from your password DB. +bcrypt.compare("bacon", hash, function(err, res) { + // res == true +}); +bcrypt.compare("veggies", hash, function(err, res) { + // res = false +}); +``` + +In the above examples, the salt is automatically generated and attached to the hash. +Though you can use your custom salt and there is no need for salts to be persisted as it will always be included in the final hash result and can be retrieved. + +API +------------------------- +* `genSaltSync(rounds)` + * `rounds` - [OPTIONAL] - the number of rounds to process the data for. (default - 10) +* `genSalt(rounds, callback)` + * `rounds` - [OPTIONAL] - the number of rounds to process the data for. (default - 10) + * `callback` - [REQUIRED] - a callback to be fired once the salt has been generated. + * `error` - First parameter to the callback detailing any errors. + * `result` - Second parameter to the callback providing the generated salt. +* `hashSync(data, salt)` + * `data` - [REQUIRED] - the data to be encrypted. + * `salt` - [REQUIRED] - the salt to be used in encryption. +* `hash(data, salt, progress, cb)` + * `data` - [REQUIRED] - the data to be encrypted. + * `salt` - [REQUIRED] - the salt to be used to hash the password. + * `progress` - a callback to be called during the hash calculation to signify progress + * `callback` - [REQUIRED] - a callback to be fired once the data has been encrypted. + * `error` - First parameter to the callback detailing any errors. + * `result` - Second parameter to the callback providing the encrypted form. +* `compareSync(data, encrypted)` + * `data` - [REQUIRED] - data to compare. + * `encrypted` - [REQUIRED] - data to be compared to. +* `compare(data, encrypted, cb)` + * `data` - [REQUIRED] - data to compare. + * `encrypted` - [REQUIRED] - data to be compared to. + * `callback` - [REQUIRED] - a callback to be fired once the data has been compared. + * `error` - First parameter to the callback detailing any errors. + * `result` - Second parameter to the callback providing whether the data and encrypted forms match [true | false]. +* `getRounds(encrypted)` - return the number of rounds used to encrypt a given hash + * `encrypted` - [REQUIRED] - hash from which the number of rounds used should be extracted. + +Contributors +============ + +* [Alex Murray][alexmurray] +* [Nicolas Pelletier][NicolasPelletier] +* [Josh Rogers][geekymole] + +Credits +------------------------- +I heavily reused code from [javascript-bcrypt]. Though "Clipperz Javascript Crypto Library" was removed and its functionality replaced with "crypto". + +[node.bcrypt.js]:https://github.com/ncb000gt/node.bcrypt.js.git +[javascript-bcrypt]:http://code.google.com/p/javascript-bcrypt/ + +[alexmurray]:https://github.com/alexmurray +[NicolasPelletier]:https://github.com/NicolasPelletier +[geekymole]:https://github.com/geekymole \ No newline at end of file diff --git a/node_modules/bcrypt-nodejs/bCrypt.js b/node_modules/bcrypt-nodejs/bCrypt.js new file mode 100644 index 0000000..fcb2132 --- /dev/null +++ b/node_modules/bcrypt-nodejs/bCrypt.js @@ -0,0 +1,707 @@ +var crypto = require("crypto"); + +var BCRYPT_SALT_LEN = 16; + +var GENSALT_DEFAULT_LOG2_ROUNDS = 10; +var BLOWFISH_NUM_ROUNDS = 16; + +var MAX_EXECUTION_TIME = 100; +var P_orig = [0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, + 0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, + 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, + 0xb5470917, 0x9216d5d9, 0x8979fb1b]; +var S_orig = [0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, + 0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, + 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, + 0xf4933d7e, 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, + 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, 0xc5d1b023, + 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, + 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, + 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, + 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, + 0x7c72e993, 0xb3ee1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6, + 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, + 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, + 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, + 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, + 0x0f6d6ff3, 0x83f44239, 0x2e0b4482, 0xa4842004, 0x69c8f04a, + 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, + 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, + 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176, + 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, + 0x3b8b5ebe, 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, + 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724, + 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, + 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, + 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, + 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, + 0x9b30952c, 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, + 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, + 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, + 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 0x3c7516df, + 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, + 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, + 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, + 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, + 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, 0x9a53e479, 0xb6f84565, + 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, + 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, + 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, + 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, + 0x8888b812, 0x900df01c, 0x4fad5ea0, 0x688fc31c, 0xd1cff191, + 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, + 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, + 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705, + 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, + 0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, + 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, 0x2464369b, + 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, + 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, 0x11c81968, + 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, + 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, + 0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, + 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, + 0x6e85076a, 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, + 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, 0xecaa8c71, + 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, + 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, + 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, + 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, + 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, + 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, + 0x5716f2b8, 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, + 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9, + 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, + 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, + 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, + 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, + 0x24977c79, 0x5679b072, 0xbcaf89af, 0xde9a771f, 0xd9930810, + 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, + 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, + 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, + 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, + 0x50940002, 0x133ae4dd, 0x71dff89e, 0x10314e55, 0x81ac77d6, + 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, + 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, + 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa, + 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, + 0x9c10b36a, 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, + 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 0x5223a708, + 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, + 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, 0x65582185, + 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, + 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, + 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, + 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, + 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, + 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 0x9b540b19, + 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, + 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, + 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, + 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, + 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 0x5d4a14d9, 0xe864b7e3, + 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, + 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, + 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, + 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, + 0x47848a0b, 0x5692b285, 0x095bbf00, 0xad19489d, 0x1462b174, + 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, + 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, + 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e, + 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, + 0x800bcadc, 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, + 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, 0xc5c43465, + 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, + 0xe6e39f2b, 0xdb83adf7, 0xe93d5a68, 0x948140f7, 0xf64c261c, + 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, + 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, + 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af, + 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, + 0x31cb8504, 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, + 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, 0x68dc1462, + 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, + 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, 0xce78a399, + 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, + 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, + 0xdd5b4332, 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, + 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, + 0xd096954b, 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, + 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, 0xfdf8e802, + 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, + 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4, + 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, + 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, + 0x02e1329e, 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1, + 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, + 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, + 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341, + 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, + 0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, 0x2765d43b, + 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, + 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, + 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979, + 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, + 0x782ef11c, 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, + 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, 0x44421659, + 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, + 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, 0x60787bf8, + 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, + 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, + 0xbde8ae24, 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, + 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, + 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, + 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 0xb90bace1, + 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, + 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025, + 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, + 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, + 0xa70683fa, 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641, + 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, + 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, + 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409, + 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, + 0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, 0xd83d7cd3, + 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, + 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, + 0x92638212, 0x670efa8e, 0x406000e0, 0x3a39ce37, 0xd3faf5cf, + 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, + 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, + 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, + 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, + 0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0xa9ba4650, 0xac9526e8, + 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, + 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, + 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1, + 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, + 0x77fa0a59, 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, + 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, + 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, + 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, 0x47b0acfd, + 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, + 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, + 0x88f46dba, 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, + 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, + 0x26dcf319, 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, + 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 0x4de81751, + 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, + 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, + 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, + 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, + 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, 0xdda26a7e, 0x3a59ff45, + 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, + 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, + 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, + 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, + 0x06b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, + 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, + 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, + 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a, + 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, + 0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, + 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 0xfae59361, + 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, + 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, + 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, + 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, + 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, + 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, + 0xf6fb2299, 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, + 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 0xde966292, + 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, + 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, + 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, + 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, + 0xf746ce76, 0x77afa1c5, 0x20756060, 0x85cbfe4e, 0x8ae88dd8, + 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, + 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, + 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6]; +var bf_crypt_ciphertext = [0x4f727068, 0x65616e42, 0x65686f6c, 0x64657253, + 0x63727944, 0x6f756274]; +var base64_code = ['.', '/', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', + 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', + 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', + 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', + 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', + '9']; +var index_64 = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -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, 26, 27, -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, -1, -1, -1, -1, -1]; + +function getByte(c) { + var ret = 0; + try { + var b = c.charCodeAt(0); + } catch (err) { + b = c; + } + if (b > 127) { + return -128 + (b % 128); + } else { + return b; + } +}; + +function encode_base64(d, len) { + var off = 0; + var rs = []; + var c1; + var c2; + if (len <= 0 || len > d.length) + throw "Invalid len"; + while (off < len) { + c1 = d[off++] & 0xff; + rs.push(base64_code[(c1 >> 2) & 0x3f]); + c1 = (c1 & 0x03) << 4; + if (off >= len) { + rs.push(base64_code[c1 & 0x3f]); + break; + } + c2 = d[off++] & 0xff; + c1 |= (c2 >> 4) & 0x0f; + rs.push(base64_code[c1 & 0x3f]); + c1 = (c2 & 0x0f) << 2; + if (off >= len) { + rs.push(base64_code[c1 & 0x3f]); + break; + } + c2 = d[off++] & 0xff; + c1 |= (c2 >> 6) & 0x03; + rs.push(base64_code[c1 & 0x3f]); + rs.push(base64_code[c2 & 0x3f]); + } + return rs.join(''); +}; + +function char64(x) { + var code = x.charCodeAt(0); + if (code < 0 || code > index_64.length) { + return -1; + } + return index_64[code]; +}; + +function decode_base64(s, maxolen) { + var off = 0; + var slen = s.length; + var olen = 0; + var rs = []; + var c1, c2, c3, c4, o; + if (maxolen <= 0) throw "Invalid maxolen"; + while (off < slen - 1 && olen < maxolen) { + c1 = char64(s.charAt(off++)); + c2 = char64(s.charAt(off++)); + if (c1 == -1 || c2 == -1) { + break; + } + o = getByte(c1 << 2); + o |= (c2 & 0x30) >> 4; + rs.push(String.fromCharCode(o)); + if (++olen >= maxolen || off >= slen) { + break; + } + c3 = char64(s.charAt(off++)); + if (c3 == -1) { + break; + } + o = getByte((c2 & 0x0f) << 4); + o |= (c3 & 0x3c) >> 2; + rs.push(String.fromCharCode(o)); + if (++olen >= maxolen || off >= slen) { + break; + } + c4 = char64(s.charAt(off++)); + o = getByte((c3 & 0x03) << 6); + o |= c4; + rs.push(String.fromCharCode(o)); + ++olen; + } + var ret = []; + for (off = 0; off < olen; off++) { + ret.push(getByte(rs[off])); + } + return ret; +}; + +function encipher(lr, off, P, S) { + var i; + var n; + var l = lr[off]; + var r = lr[off + 1]; + + l ^= P[0]; + for (i = 0; i <= BLOWFISH_NUM_ROUNDS - 2;) { + // Feistel substitution on left word + n = S[(l >> 24) & 0xff]; + n += S[0x100 | ((l >> 16) & 0xff)]; + n ^= S[0x200 | ((l >> 8) & 0xff)]; + n += S[0x300 | (l & 0xff)]; + r ^= n ^ P[++i]; + + // Feistel substitution on right word + n = S[(r >> 24) & 0xff]; + n += S[0x100 | ((r >> 16) & 0xff)]; + n ^= S[0x200 | ((r >> 8) & 0xff)]; + n += S[0x300 | (r & 0xff)]; + l ^= n ^ P[++i]; + } + lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1]; + lr[off + 1] = l; + return lr; +}; + +function streamtoword(data, offp) { + var i; + var word = 0; + for (i = 0; i < 4; i++) { + word = (word << 8) | (data[offp] & 0xff); + offp = (offp + 1) % data.length; + } + return {key:word, offp:offp}; +}; + +function key(key, P, S) { + var i; + var offp = 0; + var lr = new Array(0x00000000, 0x00000000); + var plen = P.length; + var slen = S.length; + + for (i = 0; i < plen; i++) { + var sw = streamtoword(key, offp); + offp = sw.offp; + P[i] = P[i] ^ sw.key; + } + for (i = 0; i < plen; i += 2) { + lr = encipher(lr, 0, P, S); + P[i] = lr[0]; + P[i + 1] = lr[1]; + } + + for (i = 0; i < slen; i += 2) { + lr = encipher(lr, 0, P, S); + S[i] = lr[0]; + S[i + 1] = lr[1]; + } +}; + +function ekskey(data, key, P, S) { + var i; + var offp = 0; + var lr = new Array(0x00000000, 0x00000000); + var plen = P.length; + var slen = S.length; + var sw; + + for (i = 0; i < plen; i++) { + sw = streamtoword(key, offp); + offp = sw.offp; + P[i] = P[i] ^ sw.key; + } + offp = 0; + for (i = 0; i < plen; i += 2) { + sw = streamtoword(data, offp); + offp = sw.offp; + lr[0] ^= sw.key; + + sw = streamtoword(data, offp); + offp = sw.offp; + lr[1] ^= sw.key; + + lr = encipher(lr, 0, P, S); + P[i] = lr[0]; + P[i + 1] = lr[1]; + } + for (i = 0; i < slen; i += 2) { + sw = streamtoword(data, offp); + offp = sw.offp; + lr[0] ^= sw.key; + + sw = streamtoword(data, offp); + offp = sw.offp; + lr[1] ^= sw.key; + + lr = encipher(lr, 0, P, S); + S[i] = lr[0]; + S[i + 1] = lr[1]; + } +}; + +function crypt_raw(password, salt, log_rounds, progress) { + var rounds; + var j; + var cdata = bf_crypt_ciphertext.slice(); + var clen = cdata.length; + var one_percent; + + if (log_rounds < 4 || log_rounds > 31) + throw "Bad number of rounds"; + if (salt.length != BCRYPT_SALT_LEN) + throw "Bad salt length"; + + rounds = 1 << log_rounds; + one_percent = Math.floor(rounds / 100) + 1; + + var P = P_orig.slice(); + var S = S_orig.slice(); + + ekskey(salt, password, P, S); + + var i = 0; + + while(true) { + if(i < rounds){ + var start = new Date(); + for (; i < rounds;) { + i = i + 1; + key(password, P, S); + key(salt, P, S); + if(i % one_percent == 0){ + progress(); + } + if((new Date() - start) > MAX_EXECUTION_TIME){ + break; + } + } + } else { + for (i = 0; i < 64; i++) { + for (j = 0; j < (clen >> 1); j++) { + lr = encipher(cdata, j << 1, P, S); + } + } + var ret = []; + for (i = 0; i < clen; i++) { + ret.push(getByte((cdata[i] >> 24) & 0xff)); + ret.push(getByte((cdata[i] >> 16) & 0xff)); + ret.push(getByte((cdata[i] >> 8) & 0xff)); + ret.push(getByte(cdata[i] & 0xff)); + } + return(ret); + } + } +}; + +function hashpw(password, salt, progress) { + var real_salt; + var passwordb = []; + var saltb = []; + var hashed = []; + var minor = String.fromCharCode(0); + var rounds = 0; + var off = 0; + + if (!progress){ + var progress = function() {}; + } + + if (salt.charAt(0) != '$' || salt.charAt(1) != '2') + throw "Invalid salt version"; + if (salt.charAt(2) == '$') + off = 3; + else { + minor = salt.charAt(2); + if (minor != 'a' || salt.charAt(3) != '$') + throw "Invalid salt revision"; + off = 4; + } + + // Extract number of rounds + if (salt.charAt(off + 2) > '$') + throw "Missing salt rounds"; + var r1 = parseInt(salt.substring(off, off + 1)) * 10; + var r2 = parseInt(salt.substring(off + 1, off + 2)); + rounds = r1 + r2; + real_salt = salt.substring(off + 3, off + 25); + password = password + (minor >= 'a' ? "\000" : ""); + + var buf = new Buffer(password); + for (var r = 0; r < buf.length; r++) { + passwordb.push(buf[r]); + } + saltb = decode_base64(real_salt, BCRYPT_SALT_LEN); + var hashed = crypt_raw(passwordb, saltb, rounds, progress); + + var rs = []; + rs.push("$2"); + if (minor >= 'a') + rs.push(minor); + rs.push("$"); + if (rounds < 10) + rs.push("0"); + rs.push(rounds.toString()); + rs.push("$"); + rs.push(encode_base64(saltb, saltb.length)); + rs.push(encode_base64(hashed, bf_crypt_ciphertext.length * 4 - 1)); + + return(rs.join('')); +}; + +function gensalt(rounds) { + var iteration_count = rounds; + if (iteration_count < 4 || iteration_count > 31) { + iteration_count = GENSALT_DEFAULT_LOG2_ROUNDS; + } + var output = []; + output.push("$2a$"); + if (iteration_count < 10) + output.push("0"); + output.push(iteration_count.toString()); + output.push('$'); + + var rand_buf; + try { + rand_buf = crypto.randomBytes(BCRYPT_SALT_LEN); + } catch (ex) { + throw ex; + } + + output.push(encode_base64(rand_buf, BCRYPT_SALT_LEN)); + return output.join(''); +}; + +function genSaltSync(rounds) { + /* + rounds - [OPTIONAL] - the number of rounds to process the data for. (default - 10) + seed_length - [OPTIONAL] - RAND_bytes wants a length. to make that a bit flexible, you can specify a seed_length. (default - 20) + */ + if(!rounds) { + rounds = GENSALT_DEFAULT_LOG2_ROUNDS; + } + return gensalt(rounds); +} + +function genSalt(rounds, callback) { + /* + rounds - [OPTIONAL] - the number of rounds to process the data for. (default - 10) + seed_length - [OPTIONAL] - RAND_bytes wants a length. to make that a bit flexible, you can specify a seed_length. (default - 20) + callback - [REQUIRED] - a callback to be fired once the salt has been generated. uses eio making it asynchronous. + error - First parameter to the callback detailing any errors. + salt - Second parameter to the callback providing the generated salt. + */ + if(!callback) { + throw "No callback function was given." + } + process.nextTick(function() { + var result = null; + var error = null; + try { + result = genSaltSync(rounds) + } catch(err) { + error = err; + } + callback(error, result); + }); +} + +function hashSync(data, salt, progress) { + /* + data - [REQUIRED] - the data to be encrypted. + salt - [REQUIRED] - the salt to be used in encryption. + */ + if(!salt) { + salt = genSaltSync(); + } + return hashpw(data, salt, progress); +} + +function hash(data, salt, progress, callback) { + /* + data - [REQUIRED] - the data to be encrypted. + salt - [REQUIRED] - the salt to be used to hash the password. if specified as a number then a salt will be generated and used (see examples). + progress - a callback to be called during the hash calculation to signify progress + callback - [REQUIRED] - a callback to be fired once the data has been encrypted. uses eio making it asynchronous. + error - First parameter to the callback detailing any errors. + encrypted - Second parameter to the callback providing the encrypted form. + */ + if(!callback) { + throw "No callback function was given." + } + process.nextTick(function() { + var result = null; + var error = null; + try { + result = hashSync(data, salt, progress) + } catch(err) { + error = err; + } + callback(error, result); + }); +} + +function compareSync(data, encrypted) { + /* + data - [REQUIRED] - data to compare. + encrypted - [REQUIRED] - data to be compared to. + */ + + if(typeof data != "string" || typeof encrypted != "string") { + throw "Incorrect arguments"; + } + + var encrypted_length = encrypted.length; + + if(encrypted_length != 60) { + throw "Not a valid BCrypt hash."; + } + + var same = true; + var hash_data = hashSync(data, encrypted.substr(0, encrypted_length-31)); + var hash_data_length = hash_data.length; + + same = hash_data_length == encrypted_length; + + var max_length = (hash_data_length < encrypted_length) ? hash_data_length : encrypted_length; + + // to prevent timing attacks, should check entire string + // don't exit after found to be false + for (var i = 0; i < max_length; ++i) { + if (hash_data_length >= i && encrypted_length >= i && hash_data[i] != encrypted[i]) { + same = false; + } + } + + return same; +} + +function compare(data, encrypted, callback) { + /* + data - [REQUIRED] - data to compare. + encrypted - [REQUIRED] - data to be compared to. + callback - [REQUIRED] - a callback to be fired once the data has been compared. uses eio making it asynchronous. + error - First parameter to the callback detailing any errors. + same - Second parameter to the callback providing whether the data and encrypted forms match [true | false]. + */ + if(!callback) { + throw "No callback function was given." + } + process.nextTick(function() { + var result = null; + var error = null; + try { + result = compareSync(data, encrypted) + } catch(err) { + error = err; + } + callback(error, result); + }); +} + +function getRounds(encrypted) { + //encrypted - [REQUIRED] - hash from which the number of rounds used should be extracted. + if(typeof encrypted != "string") { + throw "Incorrect arguments"; + } + return Number(encrypted.split("$")[2]); +} + +exports.genSaltSync = genSaltSync; +exports.genSalt = genSalt; +exports.hashSync = hashSync; +exports.hash = hash; +exports.compareSync = compareSync; +exports.compare = compare; +exports.getRounds = getRounds; diff --git a/node_modules/bcrypt-nodejs/package.json b/node_modules/bcrypt-nodejs/package.json new file mode 100644 index 0000000..34bb368 --- /dev/null +++ b/node_modules/bcrypt-nodejs/package.json @@ -0,0 +1,65 @@ +{ + "name": "bcrypt-nodejs", + "description": "A native JS bcrypt library for NodeJS.", + "main": "./bCrypt", + "author": { + "name": "Shane Girish", + "email": "shaneGirish@gmail.com" + }, + "version": "0.0.3", + "repository": { + "type": "git", + "url": "https://github.com/shaneGirish/bcryptJS.git" + }, + "bugs": { + "url": "https://github.com/shaneGirish/bcrypt-nodejs/issues" + }, + "contributors": [ + { + "name": "Alex Murray", + "url": "https://github.com/alexmurray" + }, + { + "name": "Nicolas Pelletier", + "url": "https://github.com/NicolasPelletier" + }, + { + "name": "Josh Rogers", + "url": "https://github.com/geekymole" + } + ], + "keywords": [ + "bcrypt", + "javascript", + "js", + "hash", + "password", + "auth", + "authentication", + "encryption", + "crypt", + "crypto" + ], + "readme": "bcrypt-nodejs\r\n===========================================\r\n\r\nWarning : A change was made in v0.0.3 to allow encoding of UTF-8 encoded strings. This causes strings encoded in v0.0.2 or earlier to not work in v0.0.3 anymore.\r\n\r\nNative JS implementation of BCrypt for Node.\r\nHas the same functionality as [node.bcrypt.js] expect for a few tiny differences.\r\nMainly, it doesn't let you set the seed length for creating the random byte array.\r\n\r\nI created this version due to a small [problem](https://github.com/ncb000gt/node.bcrypt.js/issues/102) I faced with [node.bcrypt.js].\r\nBasically, to deploy one of my apps which uses [node.bcrypt.js] on a winx64 platform, I have to force the user to download about 1.6gb of sdks, buildtools and other requirements of which some fail to install ! Microsoft :(\r\n\r\nThis code is based on [javascript-bcrypt] and uses [crypto] (http://nodejs.org/api/crypto.html) to create random byte arrays.\r\n\r\nBasic usage:\r\n-----------\r\nSynchronous\r\n```\r\nvar hash = bcrypt.hashSync(\"bacon\");\r\n\r\nbcrypt.compareSync(\"bacon\", hash); // true\r\nbcrypt.compareSync(\"veggies\", hash); // false\r\n```\r\n\r\nAsynchronous\r\n```\r\nbcrypt.hash(\"bacon\", null, null, function(err, hash) {\r\n\t// Store hash in your password DB.\r\n});\r\n\r\n// Load hash from your password DB.\r\nbcrypt.compare(\"bacon\", hash, function(err, res) {\r\n // res == true\r\n});\r\nbcrypt.compare(\"veggies\", hash, function(err, res) {\r\n // res = false\r\n});\r\n```\r\n\r\nIn the above examples, the salt is automatically generated and attached to the hash.\r\nThough you can use your custom salt and there is no need for salts to be persisted as it will always be included in the final hash result and can be retrieved.\r\n\r\nAPI\r\n-------------------------\r\n* `genSaltSync(rounds)`\r\n\t* `rounds` - [OPTIONAL] - the number of rounds to process the data for. (default - 10)\r\n* `genSalt(rounds, callback)`\r\n\t* `rounds` - [OPTIONAL] - the number of rounds to process the data for. (default - 10)\r\n\t* `callback` - [REQUIRED] - a callback to be fired once the salt has been generated.\r\n\t\t* `error` - First parameter to the callback detailing any errors.\r\n\t\t* `result` - Second parameter to the callback providing the generated salt.\r\n* `hashSync(data, salt)`\r\n\t* `data` - [REQUIRED] - the data to be encrypted.\r\n\t* `salt` - [REQUIRED] - the salt to be used in encryption.\r\n* `hash(data, salt, progress, cb)`\r\n\t* `data` - [REQUIRED] - the data to be encrypted.\r\n\t* `salt` - [REQUIRED] - the salt to be used to hash the password.\r\n\t* `progress` - a callback to be called during the hash calculation to signify progress\r\n\t* `callback` - [REQUIRED] - a callback to be fired once the data has been encrypted.\r\n\t\t* `error` - First parameter to the callback detailing any errors.\r\n\t\t* `result` - Second parameter to the callback providing the encrypted form.\r\n* `compareSync(data, encrypted)`\r\n\t* `data` - [REQUIRED] - data to compare.\r\n\t* `encrypted` - [REQUIRED] - data to be compared to.\r\n* `compare(data, encrypted, cb)`\r\n\t* `data` - [REQUIRED] - data to compare.\r\n\t* `encrypted` - [REQUIRED] - data to be compared to.\r\n\t* `callback` - [REQUIRED] - a callback to be fired once the data has been compared.\r\n\t\t* `error` - First parameter to the callback detailing any errors.\r\n\t\t* `result` - Second parameter to the callback providing whether the data and encrypted forms match [true | false].\r\n* `getRounds(encrypted)` - return the number of rounds used to encrypt a given hash\r\n\t* `encrypted` - [REQUIRED] - hash from which the number of rounds used should be extracted.\r\n\t\r\nContributors\r\n============\r\n\r\n* [Alex Murray][alexmurray]\r\n* [Nicolas Pelletier][NicolasPelletier]\r\n* [Josh Rogers][geekymole]\t\r\n\t\r\nCredits\r\n-------------------------\r\nI heavily reused code from [javascript-bcrypt]. Though \"Clipperz Javascript Crypto Library\" was removed and its functionality replaced with \"crypto\".\r\n\r\n[node.bcrypt.js]:https://github.com/ncb000gt/node.bcrypt.js.git\r\n[javascript-bcrypt]:http://code.google.com/p/javascript-bcrypt/\r\n\r\n[alexmurray]:https://github.com/alexmurray\r\n[NicolasPelletier]:https://github.com/NicolasPelletier\r\n[geekymole]:https://github.com/geekymole", + "readmeFilename": "README.md", + "_id": "bcrypt-nodejs@0.0.3", + "dist": { + "shasum": "c60917f26dc235661566c681061c303c2b28842b", + "tarball": "http://registry.npmjs.org/bcrypt-nodejs/-/bcrypt-nodejs-0.0.3.tgz" + }, + "_npmVersion": "1.2.0", + "_npmUser": { + "name": "shanegirish", + "email": "shaneGirish@gmail.com" + }, + "maintainers": [ + { + "name": "shanegirish", + "email": "shanegirish@gmail.com" + } + ], + "directories": {}, + "_shasum": "c60917f26dc235661566c681061c303c2b28842b", + "_from": "bcrypt-nodejs@", + "_resolved": "https://registry.npmjs.org/bcrypt-nodejs/-/bcrypt-nodejs-0.0.3.tgz" +} diff --git a/node_modules/bcrypt-nodejs/test-async.js b/node_modules/bcrypt-nodejs/test-async.js new file mode 100644 index 0000000..42ce654 --- /dev/null +++ b/node_modules/bcrypt-nodejs/test-async.js @@ -0,0 +1,71 @@ +var bCrypt = require("./bCrypt"); + +var compares = 0; +var salts = []; +var hashes = []; + +console.log("\n\n Salts \n"); +bCrypt.genSalt(8, saltCallback); +bCrypt.genSalt(10, saltCallback); + +function saltCallback(error, result) { + if(!error) { + console.log(result); + } else { + console.log(error); + } + salts.push(result); + if(salts.length == 2) { + console.log("\n\n Hashes \n"); + createHash(salts[0]); + } +} + +function createHash(salt) { + bCrypt.hash("bacon", salt, null, hashCallback); + bCrypt.hash("bacon", salt, null, hashCallback); +} + +function hashCallback(error, result) { + if(!error) { + console.log(result); + } else { + console.log(error); + } + hashes.push(result); + if(hashes.length == 2) { + createHash(salts[1]); + } else if(hashes.length == 4) { + console.log("\n\n True Compares \n"); + compares = 0; + startCompares("bacon", trueCompareCallback); + } +} + +function startCompares(string, callback) { + bCrypt.compare(string, hashes[0], callback); + bCrypt.compare(string, hashes[1], callback); + bCrypt.compare(string, hashes[2], callback); + bCrypt.compare(string, hashes[3], callback); +} + +function trueCompareCallback(error, result) { + if(!error) { + console.log(result); + } else { + console.log(error); + } + if(++compares == 4) { + console.log("\n\n False Compares \n"); + compares = 0; + startCompares("veggies", falseCompareCallback); + } +} + +function falseCompareCallback(error, result) { + if(!error) { + console.log(result); + } else { + console.log(error); + } +} \ No newline at end of file diff --git a/node_modules/bcrypt-nodejs/test-sync.js b/node_modules/bcrypt-nodejs/test-sync.js new file mode 100644 index 0000000..598945d --- /dev/null +++ b/node_modules/bcrypt-nodejs/test-sync.js @@ -0,0 +1,98 @@ +/*jslint node: true, indent: 4, stupid: true */ +var bCrypt = require("./bCrypt"); + +console.log("\n\n Salts \n"); + +var salt1 = bCrypt.genSaltSync(8); +console.log(salt1); + +var salt2 = bCrypt.genSaltSync(10); +console.log(salt2); + + +console.log("\n\n Hashes \n"); + +var hash1 = bCrypt.hashSync("super secret", salt1, null); +console.log(hash1); + +var hash2 = bCrypt.hashSync("super secret", salt1, null); +console.log(hash2); + +var hash3 = bCrypt.hashSync("supersecret", salt1, null); +console.log(hash3); + +var hash4 = bCrypt.hashSync("supersecret", salt1, null); +console.log(hash4); + +var hash5 = bCrypt.hashSync("super secret", salt2, null); +console.log(hash5); + +var hash6 = bCrypt.hashSync("super secret", salt2, null); +console.log(hash6); + +var hash7 = bCrypt.hashSync("supersecret", salt2, null); +console.log(hash7); + +var hash8 = bCrypt.hashSync("supersecret", salt2, null); +console.log(hash8); + +var hash9 = bCrypt.hashSync("super secret", null, null); +console.log(hash9); + +var hash0 = bCrypt.hashSync("supersecret", null, null); +console.log(hash0); + +console.log("\n\n First Set of Compares \n"); + +console.log(bCrypt.compareSync("super secret", hash1) ? 'PASSED' : 'FAILED'); +console.log(bCrypt.compareSync("super secret", hash2) ? 'PASSED' : 'FAILED'); +console.log(bCrypt.compareSync("super secret", hash5) ? 'PASSED' : 'FAILED'); +console.log(bCrypt.compareSync("super secret", hash6) ? 'PASSED' : 'FAILED'); +console.log(bCrypt.compareSync("super secret", hash9) ? 'PASSED' : 'FAILED'); +console.log(bCrypt.compareSync("super secret", hash3) ? 'FAILED' : 'PASSED'); +console.log(bCrypt.compareSync("super secret", hash4) ? 'FAILED' : 'PASSED'); +console.log(bCrypt.compareSync("super secret", hash7) ? 'FAILED' : 'PASSED'); +console.log(bCrypt.compareSync("super secret", hash8) ? 'FAILED' : 'PASSED'); +console.log(bCrypt.compareSync("super secret", hash0) ? 'FAILED' : 'PASSED'); + +console.log("\n\n Second Set of Compares \n"); + +console.log(bCrypt.compareSync("supersecret", hash1) ? 'FAILED' : 'PASSED'); +console.log(bCrypt.compareSync("supersecret", hash2) ? 'FAILED' : 'PASSED'); +console.log(bCrypt.compareSync("supersecret", hash5) ? 'FAILED' : 'PASSED'); +console.log(bCrypt.compareSync("supersecret", hash6) ? 'FAILED' : 'PASSED'); +console.log(bCrypt.compareSync("supersecret", hash9) ? 'FAILED' : 'PASSED'); +console.log(bCrypt.compareSync("supersecret", hash3) ? 'PASSED' : 'FAILED'); +console.log(bCrypt.compareSync("supersecret", hash4) ? 'PASSED' : 'FAILED'); +console.log(bCrypt.compareSync("supersecret", hash7) ? 'PASSED' : 'FAILED'); +console.log(bCrypt.compareSync("supersecret", hash8) ? 'PASSED' : 'FAILED'); +console.log(bCrypt.compareSync("supersecret", hash0) ? 'PASSED' : 'FAILED'); + + +console.log('\n\n -------------------- UTF-8 passwords --------------------'); +var pw1 = '\u6e2f', // http://www.fileformat.info/info/unicode/char/6e2f/index.htm + pw2 = '港', // Character 0x6e2f same as pw1. + pw3 = '\u6f2f', // http://www.fileformat.info/info/unicode/char/6f2f/index.htm + pw4 = '漯', // Character 0x6f2f same as pw3. + salt = '$2a$05$0000000000000000000000', + hash_pw1 = bCrypt.hashSync(pw1, salt, null), + hash_pw2 = bCrypt.hashSync(pw2, salt, null), + hash_pw3 = bCrypt.hashSync(pw3, salt, null), + hash_pw4 = bCrypt.hashSync(pw4, salt, null); + +console.log("\n\n Hashes \n"); +console.log(hash_pw1); +console.log(hash_pw2); +console.log(hash_pw3); +console.log(hash_pw4); + +console.log("\n\n Third Set of Compares \n"); + +console.log(bCrypt.compareSync(pw1, hash_pw1) ? 'PASSED' : 'FAILED'); +console.log(bCrypt.compareSync(pw2, hash_pw2) ? 'PASSED' : 'FAILED'); +console.log(bCrypt.compareSync(pw3, hash_pw3) ? 'PASSED' : 'FAILED'); +console.log(bCrypt.compareSync(pw4, hash_pw4) ? 'PASSED' : 'FAILED'); +console.log('Hashes 1 and 3 are different: ' + (hash_pw1 !== hash_pw3) ? 'PASSED' : 'FAILED'); +console.log('Hashes 2 and 4 are different: ' + (hash_pw2 !== hash_pw4) ? 'PASSED' : 'FAILED'); +console.log('Hashes 1 and 2 are the same: ' + (hash_pw1 !== hash_pw2) ? 'PASSED' : 'FAILED'); +console.log('Hashes 3 and 4 are the same: ' + (hash_pw3 !== hash_pw4) ? 'PASSED' : 'FAILED'); diff --git a/node_modules/express-myconnection/.npmignore b/node_modules/express-myconnection/.npmignore new file mode 100644 index 0000000..ccd1db3 --- /dev/null +++ b/node_modules/express-myconnection/.npmignore @@ -0,0 +1,20 @@ +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results + +npm-debug.log + +.DS_Store +node_modules/ + + +run.sh diff --git a/node_modules/express-myconnection/LICENSE b/node_modules/express-myconnection/LICENSE new file mode 100644 index 0000000..37ec93a --- /dev/null +++ b/node_modules/express-myconnection/LICENSE @@ -0,0 +1,191 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/node_modules/express-myconnection/README.md b/node_modules/express-myconnection/README.md new file mode 100644 index 0000000..4015332 --- /dev/null +++ b/node_modules/express-myconnection/README.md @@ -0,0 +1,51 @@ +express-myconnection +============ + +Connect/Express middleware provides a consistent API for MySQL connections during request/response life cycle. It supports three different strategies of managing db connections: ` single ` for a singleton connection on an app instance level, `pool` based connections, and a new connection per each `request`. It’s also capable of auto closing/releasing connections if configured either with `pool` or `request`. It uses [node-mysql](https://github.com/felixge/node-mysql) as a MySQL driver. + +### Strategies +* `single` - creates single database connection for an application instance. Connection is never closed. In case of disconnection it will try to reconnect again as described in [node-mysql docs](https://github.com/felixge/node-mysql). +* `pool` - creates pool of connections on an app instance level, and serves a single connection from pool per request. The connections is auto released to the pool at the response end. +* `request` - creates new connection per each request, and automatically closes it at the response end. + +### Usage + +Configuration is straightforward and you use it as any other middleware. First param it accepts is a [node-mysql](https://github.com/felixge/node-mysql) module, second is a db options hash passed to [node-mysql](https://github.com/felixge/node-mysql) module when connection or pool are created. The third is string defining strategy type. + + // app.js + ... + var mysql = require('mysql'), // node-mysql module + myConnection = require('express-myconnection'), // express-myconnection module + dbOptions = { + host: 'localhost', + user: 'dbuser', + password: 'password', + port: 3306, + database: 'mydb' + }; + + app.use(myConnection(mysql, dbOptions, 'single'); + ... + +**express-myconnection** extends `request` object with `getConection(callback)` function, this way connection instance can be accessed anywhere in routers during request/response life cycle: + + // myroute.js + ... + module.exports = function(req, res, next) { + ... + req.getConnection(function(err, connection) { + if (err) return next(err); + + connection.query('SELECT 1 AS RESULT', [], function(err, results) { + if (err) return next(err); + + results[0].RESULT; + // -> 1 + + res.send(200); + }); + + }); + ... + } + ... diff --git a/node_modules/express-myconnection/examples/single/app.js b/node_modules/express-myconnection/examples/single/app.js new file mode 100644 index 0000000..735351d --- /dev/null +++ b/node_modules/express-myconnection/examples/single/app.js @@ -0,0 +1,35 @@ +/** + * Module dependencies. + */ + +var express = require('express'); +var routes = require('./routes'); +var http = require('http'); +var path = require('path'); +var mysql = require('mysql'), + myConnection = require('express-myconnection'); + +var app = express(); + +// all environments +app.set('port', process.env.PORT || 3000); +app.set('views', __dirname + '/views'); +app.set('view engine', 'ejs'); +app.use(express.logger('dev')); + +// It has to be registered somewhere before app.router +app.use(myConnection(mysql, { + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + port: process.env.DB_PORT, + database: process.env.DB_DATABASE +}, 'single')); + +app.use(app.router); + +app.get('/', routes.index); + +http.createServer(app).listen(app.get('port'), function () { + console.log('Express server listening on port ' + app.get('port')); +}); diff --git a/node_modules/express-myconnection/examples/single/package.json b/node_modules/express-myconnection/examples/single/package.json new file mode 100644 index 0000000..cfa8fb6 --- /dev/null +++ b/node_modules/express-myconnection/examples/single/package.json @@ -0,0 +1,14 @@ +{ + "name": "application-name", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "node app.js" + }, + "dependencies": { + "express": "~3.4.0", + "ejs": "~0.8.4", + "mysql": "~2.0.0-alpha9", + "express-myconnection": "~1.0.2" + } +} diff --git a/node_modules/express-myconnection/examples/single/routes/index.js b/node_modules/express-myconnection/examples/single/routes/index.js new file mode 100644 index 0000000..d5c23a8 --- /dev/null +++ b/node_modules/express-myconnection/examples/single/routes/index.js @@ -0,0 +1,18 @@ +/* + * GET home page. + */ + +exports.index = function (req, res, next) { + + req.getConnection(function (err, connection) { + connection.query('SELECT ? AS RESULT', ['Hello World!'], function (err, results) { + if (err) return next(err); + + res.render('index', { + title: 'express-myconnection', + result: results[0].RESULT + }); + }); + }); + +}; \ No newline at end of file diff --git a/node_modules/express-myconnection/examples/single/views/index.ejs b/node_modules/express-myconnection/examples/single/views/index.ejs new file mode 100644 index 0000000..b635293 --- /dev/null +++ b/node_modules/express-myconnection/examples/single/views/index.ejs @@ -0,0 +1,15 @@ + + + + <%= title %> + + + +

<%= title %>

+

<%= result %>

+ + \ No newline at end of file diff --git a/node_modules/express-myconnection/index.js b/node_modules/express-myconnection/index.js new file mode 100644 index 0000000..12edd72 --- /dev/null +++ b/node_modules/express-myconnection/index.js @@ -0,0 +1 @@ +module.exports = require('./lib/express-myconnection.js'); \ No newline at end of file diff --git a/node_modules/express-myconnection/lib/express-myconnection.js b/node_modules/express-myconnection/lib/express-myconnection.js new file mode 100644 index 0000000..909d27c --- /dev/null +++ b/node_modules/express-myconnection/lib/express-myconnection.js @@ -0,0 +1,125 @@ +var _mysql, + _dbConfig, + _connection, // This is used as a singleton in a single connection strategy + _pool; // Pool singleton + +/** + * Handling connection disconnects, as defined here: https://github.com/felixge/node-mysql + */ +function handleDisconnect() { + _connection = _mysql.createConnection(_dbConfig); + + _connection.connect(function (err) { + if (err) { + console.log('error when connecting to db:', err); + setTimeout(handleDisconnect, 2000); + } + }); + + _connection.on('error', function (err) { + console.log('db error', err); + if (err.code === 'PROTOCOL_CONNECTION_LOST') { + handleDisconnect(); + } else { + throw err; + } + }); +} + +/** + * Returns middleware that will handle mysql db connections + * + * @param {Object} mysql - mysql module + * @param {Object} dbConfig - object with mysql db options + * @param {String} or undefined strategy - default is single strategy + * @return {Function} + * @api public + */ +module.exports = function (mysql, dbConfig, strategy) { + + if (null == mysql) throw new Error('Missing mysql module param!'); + if (null == dbConfig) throw new Error('Missing dbConfig module param!'); + if (null == strategy) strategy = 'single'; + + // Setting _mysql module ref + _mysql = mysql; + + // Setting _dbConfig ref + _dbConfig = dbConfig; + + // Configuring strategies + switch (strategy) { + case 'single': + // Creating single connection instance + _connection = _mysql.createConnection(dbConfig); + handleDisconnect(dbConfig); + break; + case 'pool': + // Creating pool instance + _pool = _mysql.createPool(dbConfig); + break; + case 'request': + // Nothing at this point do be done + break; + default: + throw new Error('Not supported connection strategy!'); + } + + return function (req, res, next) { + var poolConnection, + requestConnection; + + switch (strategy) { + case 'single': + // getConnection will return singleton connection + req.getConnection = function (callback) { + callback(null, _connection); + } + break; + + case 'pool': + // getConnection handled by mysql pool + req.getConnection = function (callback) { + // Returning cached connection from a pool, caching is on request level + if (poolConnection) return callback(null, poolConnection); + // Getting connection from a pool + _pool.getConnection(function (err, connection) { + if (err) return callback(err); + poolConnection = connection; + callback(null, poolConnection); + }); + } + break; + + case 'request': + // getConnection creates new connection per request + req.getConnection = function (callback) { + // Returning cached connection, caching is on request level + if (requestConnection) return callback(null, requestConnection); + // Creating new connection + var connection = _mysql.createConnection(dbConfig); + connection.connect(function (err) { + if (err) return callback(err); + requestConnection = connection; + callback(null, requestConnection); + }); + } + break; + } + + var end = res.end; + res.end = function (data, encoding) { + + // Ending request connection if available + if (requestConnection) requestConnection.end(); + + // Releasing pool connection if available + if (poolConnection) poolConnection.release(); + + res.end = end; + res.end(data, encoding); + } + + next(); + } +} diff --git a/node_modules/express-myconnection/package.json b/node_modules/express-myconnection/package.json new file mode 100644 index 0000000..26c579f --- /dev/null +++ b/node_modules/express-myconnection/package.json @@ -0,0 +1,50 @@ +{ + "name": "express-myconnection", + "version": "1.0.4", + "description": "Connect/Express middleware that auto provides mysql connections.", + "main": "index.js", + "directories": { + "example": "examples" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/pwalczyszyn/express-myconnection.git" + }, + "homepage": "http://github.com/pwalczyszyn/express-myconnection", + "keywords": [ + "express", + "mysql", + "connect", + "pool", + "middleware" + ], + "author": { + "name": "Piotr Walczyszyn" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/pwalczyszyn/express-myconnection/issues" + }, + "_id": "express-myconnection@1.0.4", + "dist": { + "shasum": "8776049fbf9f262209cffdb535b7c7509733ff55", + "tarball": "http://registry.npmjs.org/express-myconnection/-/express-myconnection-1.0.4.tgz" + }, + "_from": "express-myconnection@", + "_npmVersion": "1.4.3", + "_npmUser": { + "name": "pwalczyszyn", + "email": "piotr.walczyszyn@gmail.com" + }, + "maintainers": [ + { + "name": "pwalczyszyn", + "email": "piotr.walczyszyn@gmail.com" + } + ], + "_shasum": "8776049fbf9f262209cffdb535b7c7509733ff55", + "_resolved": "https://registry.npmjs.org/express-myconnection/-/express-myconnection-1.0.4.tgz" +} diff --git a/node_modules/express-session/HISTORY.md b/node_modules/express-session/HISTORY.md new file mode 100644 index 0000000..4721c9c --- /dev/null +++ b/node_modules/express-session/HISTORY.md @@ -0,0 +1,183 @@ +1.8.2 / 2014-09-15 +================== + + * Use `crc` instead of `buffer-crc32` for speed + * deps: depd@0.4.5 + +1.8.1 / 2014-09-08 +================== + + * Keep `req.session.save` non-enumerable + * Prevent session prototype methods from being overwritten + +1.8.0 / 2014-09-07 +================== + + * Do not resave already-saved session at end of request + * deps: cookie-signature@1.0.5 + * deps: debug@~2.0.0 + +1.7.6 / 2014-08-18 +================== + + * Fix exception on `res.end(null)` calls + +1.7.5 / 2014-08-10 +================== + + * Fix parsing original URL + * deps: on-headers@~1.0.0 + * deps: parseurl@~1.3.0 + +1.7.4 / 2014-08-05 +================== + + * Fix response end delay for non-chunked responses + +1.7.3 / 2014-08-05 +================== + + * Fix `res.end` patch to call correct upstream `res.write` + +1.7.2 / 2014-07-27 +================== + + * deps: depd@0.4.4 + - Work-around v8 generating empty stack traces + +1.7.1 / 2014-07-26 +================== + + * deps: depd@0.4.3 + - Fix exception when global `Error.stackTraceLimit` is too low + +1.7.0 / 2014-07-22 +================== + + * Improve session-ending error handling + - Errors are passed to `next(err)` instead of `console.error` + * deps: debug@1.0.4 + * deps: depd@0.4.2 + - Add `TRACE_DEPRECATION` environment variable + - Remove non-standard grey color from color output + - Support `--no-deprecation` argument + - Support `--trace-deprecation` argument + +1.6.5 / 2014-07-11 +================== + + * Do not require `req.originalUrl` + * deps: debug@1.0.3 + - Add support for multiple wildcards in namespaces + +1.6.4 / 2014-07-07 +================== + + * Fix blank responses for stores with synchronous operations + +1.6.3 / 2014-07-04 +================== + + * Fix resave deprecation message + +1.6.2 / 2014-07-04 +================== + + * Fix confusing option deprecation messages + +1.6.1 / 2014-06-28 +================== + + * Fix saveUninitialized deprecation message + +1.6.0 / 2014-06-28 +================== + + * Add deprecation message to undefined `resave` option + * Add deprecation message to undefined `saveUninitialized` option + * Fix `res.end` patch to return correct value + * Fix `res.end` patch to handle multiple `res.end` calls + * Reject cookies with missing signatures + +1.5.2 / 2014-06-26 +================== + + * deps: cookie-signature@1.0.4 + - fix for timing attacks + +1.5.1 / 2014-06-21 +================== + + * Move hard-to-track-down `req.secret` deprecation message + +1.5.0 / 2014-06-19 +================== + + * Debug name is now "express-session" + * Deprecate integration with `cookie-parser` middleware + * Deprecate looking for secret in `req.secret` + * Directly read cookies; `cookie-parser` no longer required + * Directly set cookies; `res.cookie` no longer required + * Generate session IDs with `uid-safe`, faster and even less collisions + +1.4.0 / 2014-06-17 +================== + + * Add `genid` option to generate custom session IDs + * Add `saveUninitialized` option to control saving uninitialized sessions + * Add `unset` option to control unsetting `req.session` + * Generate session IDs with `rand-token` by default; reduce collisions + * deps: buffer-crc32@0.2.3 + +1.3.1 / 2014-06-14 +================== + + * Add description in package for npmjs.org listing + +1.3.0 / 2014-06-14 +================== + + * Integrate with express "trust proxy" by default + * deps: debug@1.0.2 + +1.2.1 / 2014-05-27 +================== + + * Fix `resave` such that `resave: true` works + +1.2.0 / 2014-05-19 +================== + + * Add `resave` option to control saving unmodified sessions + +1.1.0 / 2014-05-12 +================== + + * Add `name` option; replacement for `key` option + * Use `setImmediate` in MemoryStore for node.js >= 0.10 + +1.0.4 / 2014-04-27 +================== + + * deps: debug@0.8.1 + +1.0.3 / 2014-04-19 +================== + + * Use `res.cookie()` instead of `res.setHeader()` + * deps: cookie@0.1.2 + +1.0.2 / 2014-02-23 +================== + + * Add missing dependency to `package.json` + +1.0.1 / 2014-02-15 +================== + + * Add missing dependencies to `package.json` + +1.0.0 / 2014-02-15 +================== + + * Genesis from `connect` diff --git a/node_modules/express-session/LICENSE b/node_modules/express-session/LICENSE new file mode 100644 index 0000000..f24497a --- /dev/null +++ b/node_modules/express-session/LICENSE @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2010 Sencha Inc. +Copyright (c) 2011 TJ Holowaychuk +Copyright (c) 2014 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/express-session/README.md b/node_modules/express-session/README.md new file mode 100644 index 0000000..5e889fa --- /dev/null +++ b/node_modules/express-session/README.md @@ -0,0 +1,222 @@ +# express-session + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] +[![Gratipay][gratipay-image]][gratipay-url] + +## Installation + +```bash +$ npm install express-session +``` + +## API + +```js +var express = require('express') +var session = require('express-session') + +var app = express() + +app.use(session({secret: 'keyboard cat'})) +``` + + +### session(options) + +Setup session store with the given `options`. + +Session data is _not_ saved in the cookie itself, just the session ID. + +#### Options + + - `name` - cookie name (formerly known as `key`). (default: `'connect.sid'`) + - `store` - session store instance. + - `secret` - session cookie is signed with this secret to prevent tampering. + - `cookie` - session cookie settings. + - (default: `{ path: '/', httpOnly: true, secure: false, maxAge: null }`) + - `genid` - function to call to generate a new session ID. (default: uses `uid2` library) + - `rolling` - forces a cookie set on every response. This resets the expiration date. (default: `false`) + - `resave` - forces session to be saved even when unmodified. (default: `true`) + - `proxy` - trust the reverse proxy when setting secure cookies (via "x-forwarded-proto" header). When set to `true`, the "x-forwarded-proto" header will be used. When set to `false`, all headers are ignored. When left unset, will use the "trust proxy" setting from express. (default: `undefined`) + - `saveUninitialized` - forces a session that is "uninitialized" to be saved to the store. A session is uninitialized when it is new but not modified. This is useful for implementing login sessions, reducing server storage usage, or complying with laws that require permission before setting a cookie. (default: `true`) + - `unset` - controls result of unsetting `req.session` (through `delete`, setting to `null`, etc.). This can be "keep" to keep the session in the store but ignore modifications or "destroy" to destroy the stored session. (default: `'keep'`) + +#### options.genid + +Generate a custom session ID for new sessions. Provide a function that returns a string that will be used as a session ID. The function is given `req` as the first argument if you want to use some value attached to `req` when generating the ID. + +**NOTE** be careful you generate unique IDs so your sessions do not conflict. + +```js +app.use(session({ + genid: function(req) { + return genuuid(); // use UUIDs for session IDs + }, + secret: 'keyboard cat' +})) +``` + +#### Cookie options + +Please note that `secure: true` is a **recommended** option. However, it requires an https-enabled website, i.e., HTTPS is necessary for secure cookies. +If `secure` is set, and you access your site over HTTP, the cookie will not be set. If you have your node.js behind a proxy and are using `secure: true`, you need to set "trust proxy" in express: + +```js +var app = express() +app.set('trust proxy', 1) // trust first proxy +app.use(session({ + secret: 'keyboard cat', + cookie: { secure: true } +})) +``` + +For using secure cookies in production, but allowing for testing in development, the following is an example of enabling this setup based on `NODE_ENV` in express: + +```js +var app = express() +var sess = { + secret: 'keyboard cat', + cookie: {} +} + +if (app.get('env') === 'production') { + app.set('trust proxy', 1) // trust first proxy + sess.cookie.secure = true // serve secure cookies +} + +app.use(session(sess)) +``` + +By default `cookie.maxAge` is `null`, meaning no "expires" parameter is set +so the cookie becomes a browser-session cookie. When the user closes the +browser the cookie (and session) will be removed. + +### req.session + +To store or access session data, simply use the request property `req.session`, +which is (generally) serialized as JSON by the store, so nested objects +are typically fine. For example below is a user-specific view counter: + +```js +app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }})) + +app.use(function(req, res, next) { + var sess = req.session + if (sess.views) { + sess.views++ + res.setHeader('Content-Type', 'text/html') + res.write('

views: ' + sess.views + '

') + res.write('

expires in: ' + (sess.cookie.maxAge / 1000) + 's

') + res.end() + } else { + sess.views = 1 + res.end('welcome to the session demo. refresh!') + } +}) +``` + +#### Session.regenerate() + +To regenerate the session simply invoke the method, once complete +a new SID and `Session` instance will be initialized at `req.session`. + +```js +req.session.regenerate(function(err) { + // will have a new session here +}) +``` + +#### Session.destroy() + +Destroys the session, removing `req.session`, will be re-generated next request. + +```js +req.session.destroy(function(err) { + // cannot access session here +}) +``` + +#### Session.reload() + +Reloads the session data. + +```js +req.session.reload(function(err) { + // session updated +}) +``` + +#### Session.save() + +```js +req.session.save(function(err) { + // session saved +}) +``` + +#### Session.touch() + +Updates the `.maxAge` property. Typically this is +not necessary to call, as the session middleware does this for you. + +### req.session.cookie + +Each session has a unique cookie object accompany it. This allows +you to alter the session cookie per visitor. For example we can +set `req.session.cookie.expires` to `false` to enable the cookie +to remain for only the duration of the user-agent. + +#### Cookie.maxAge + +Alternatively `req.session.cookie.maxAge` will return the time +remaining in milliseconds, which we may also re-assign a new value +to adjust the `.expires` property appropriately. The following +are essentially equivalent + +```js +var hour = 3600000 +req.session.cookie.expires = new Date(Date.now() + hour) +req.session.cookie.maxAge = hour +``` + +For example when `maxAge` is set to `60000` (one minute), and 30 seconds +has elapsed it will return `30000` until the current request has completed, +at which time `req.session.touch()` is called to reset `req.session.maxAge` +to its original value. + +```js +req.session.cookie.maxAge // => 30000 +``` + +## Session Store Implementation + +Every session store _must_ implement the following methods + + - `.get(sid, callback)` + - `.set(sid, session, callback)` + - `.destroy(sid, callback)` + +Recommended methods include, but are not limited to: + + - `.length(callback)` + - `.clear(callback)` + +For an example implementation view the [connect-redis](http://github.com/visionmedia/connect-redis) repo. + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/express-session.svg?style=flat +[npm-url]: https://npmjs.org/package/express-session +[travis-image]: https://img.shields.io/travis/expressjs/session.svg?style=flat +[travis-url]: https://travis-ci.org/expressjs/session +[coveralls-image]: https://img.shields.io/coveralls/expressjs/session.svg?style=flat +[coveralls-url]: https://coveralls.io/r/expressjs/session?branch=master +[downloads-image]: https://img.shields.io/npm/dm/express-session.svg?style=flat +[downloads-url]: https://npmjs.org/package/express-session +[gratipay-image]: https://img.shields.io/gratipay/dougwilson.svg?style=flat +[gratipay-url]: https://gratipay.com/dougwilson/ diff --git a/node_modules/express-session/index.js b/node_modules/express-session/index.js new file mode 100644 index 0000000..156b97d --- /dev/null +++ b/node_modules/express-session/index.js @@ -0,0 +1,525 @@ +/*! + * express-session + * Copyright(c) 2010 Sencha Inc. + * Copyright(c) 2011 TJ Holowaychuk + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var cookie = require('cookie'); +var crc = require('crc').crc32; +var debug = require('debug')('express-session'); +var deprecate = require('depd')('express-session'); +var parseUrl = require('parseurl'); +var uid = require('uid-safe').sync + , onHeaders = require('on-headers') + , signature = require('cookie-signature') + +var Session = require('./session/session') + , MemoryStore = require('./session/memory') + , Cookie = require('./session/cookie') + , Store = require('./session/store') + +// environment + +var env = process.env.NODE_ENV; + +/** + * Expose the middleware. + */ + +exports = module.exports = session; + +/** + * Expose constructors. + */ + +exports.Store = Store; +exports.Cookie = Cookie; +exports.Session = Session; +exports.MemoryStore = MemoryStore; + +/** + * Warning message for `MemoryStore` usage in production. + */ + +var warning = 'Warning: connect.session() MemoryStore is not\n' + + 'designed for a production environment, as it will leak\n' + + 'memory, and will not scale past a single process.'; + +/** + * Node.js 0.8+ async implementation. + */ + +/* istanbul ignore next */ +var defer = typeof setImmediate === 'function' + ? setImmediate + : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) } + +/** + * Setup session store with the given `options`. + * + * See README.md for documentation of options and formatting. + * + * Session data is _not_ saved in the cookie itself, however cookies are used, + * so you must use the cookie-parser middleware _before_ `session()`. + * [https://github.com/expressjs/cookie-parser] + * + * @param {Object} options + * @return {Function} middleware + * @api public + */ + +function session(options){ + var options = options || {} + // name - previously "options.key" + , name = options.name || options.key || 'connect.sid' + , store = options.store || new MemoryStore + , cookie = options.cookie || {} + , trustProxy = options.proxy + , storeReady = true + , rollingSessions = options.rolling || false; + var resaveSession = options.resave; + var saveUninitializedSession = options.saveUninitialized; + + var generateId = options.genid || generateSessionId; + + if (typeof generateId !== 'function') { + throw new TypeError('genid option must be a function'); + } + + if (resaveSession === undefined) { + deprecate('undefined resave option; provide resave option'); + resaveSession = true; + } + + if (saveUninitializedSession === undefined) { + deprecate('undefined saveUninitialized option; provide saveUninitialized option'); + saveUninitializedSession = true; + } + + if (options.unset && options.unset !== 'destroy' && options.unset !== 'keep') { + throw new TypeError('unset option must be "destroy" or "keep"'); + } + + // TODO: switch to "destroy" on next major + var unsetDestroy = options.unset === 'destroy'; + + // notify user that this store is not + // meant for a production environment + if ('production' == env && store instanceof MemoryStore) { + console.warn(warning); + } + + // generates the new session + store.generate = function(req){ + req.sessionID = generateId(req); + req.session = new Session(req); + req.session.cookie = new Cookie(cookie); + }; + + store.on('disconnect', function(){ storeReady = false; }); + store.on('connect', function(){ storeReady = true; }); + + if (!options.secret) { + deprecate('req.secret; provide secret option'); + } + + return function session(req, res, next) { + // self-awareness + if (req.session) return next(); + + // Handle connection as if there is no session if + // the store has temporarily disconnected etc + if (!storeReady) return debug('store is disconnected'), next(); + + // pathname mismatch + var originalPath = parseUrl.original(req).pathname; + if (0 != originalPath.indexOf(cookie.path || '/')) return next(); + + // backwards compatibility for signed cookies + // req.secret is passed from the cookie parser middleware + var secret = options.secret || req.secret; + + // ensure secret is available or bail + if (!secret) next(new Error('`secret` option required for sessions')); + + var originalHash; + var originalId; + var savedHash; + + // expose store + req.sessionStore = store; + + // get the session ID from the cookie + var cookieId = req.sessionID = getcookie(req, name, secret); + + // set-cookie + onHeaders(res, function(){ + if (!req.session) { + debug('no session'); + return; + } + + var cookie = req.session.cookie; + + // only send secure cookies via https + if (cookie.secure && !issecure(req, trustProxy)) { + debug('not secured'); + return; + } + + if (!shouldSetCookie(req)) { + return; + } + + setcookie(res, name, req.sessionID, secret, cookie.data); + }); + + // proxy end() to commit the session + var _end = res.end; + var _write = res.write; + var ended = false; + res.end = function end(chunk, encoding) { + if (ended) { + return false; + } + + ended = true; + + var ret; + var sync = true; + + if (chunk == null) { + chunk = ''; + } + + function writeend() { + if (sync) { + ret = _end.call(res, chunk, encoding); + sync = false; + return; + } + + _end.call(res); + } + + function writetop() { + if (!sync) { + return ret; + } + + var contentLength = Number(res.getHeader('Content-Length')); + + if (!isNaN(contentLength) && contentLength > 0) { + // measure chunk + chunk = !Buffer.isBuffer(chunk) + ? new Buffer(chunk, encoding) + : chunk; + encoding = undefined; + + if (chunk.length !== 0) { + debug('split response'); + ret = _write.call(res, chunk.slice(0, chunk.length - 1)); + chunk = chunk.slice(chunk.length - 1, chunk.length); + return ret; + } + } + + ret = _write.call(res, chunk, encoding); + sync = false; + + return ret; + } + + if (shouldDestroy(req)) { + // destroy session + debug('destroying'); + store.destroy(req.sessionID, function ondestroy(err) { + if (err) { + defer(next, err); + } + + debug('destroyed'); + writeend(); + }); + + return writetop(); + } + + // no session to save + if (!req.session) { + debug('no session'); + return _end.call(res, chunk, encoding); + } + + // touch session + req.session.touch(); + + if (shouldSave(req)) { + req.session.save(function onsave(err) { + if (err) { + defer(next, err); + } + + writeend(); + }); + + return writetop(); + } + + return _end.call(res, chunk, encoding); + }; + + // generate the session + function generate() { + store.generate(req); + originalId = req.sessionID; + originalHash = hash(req.session); + wrapmethods(req.session); + } + + // wrap session methods + function wrapmethods(sess) { + var _save = sess.save; + + function save() { + debug('saving %s', this.id); + savedHash = hash(this); + _save.apply(this, arguments); + } + + Object.defineProperty(sess, 'save', { + configurable: true, + enumerable: false, + value: save, + writable: true + }); + } + + // check if session has been modified + function isModified(sess) { + return originalId !== sess.id || originalHash !== hash(sess); + } + + // check if session has been saved + function isSaved(sess) { + return originalId === sess.id && savedHash === hash(sess); + } + + // determine if session should be destroyed + function shouldDestroy(req) { + return req.sessionID && unsetDestroy && req.session == null; + } + + // determine if session should be saved to store + function shouldSave(req) { + return !saveUninitializedSession && cookieId !== req.sessionID + ? isModified(req.session) + : !isSaved(req.session) + } + + // determine if cookie should be set on response + function shouldSetCookie(req) { + // in case of rolling session, always reset the cookie + if (rollingSessions) { + return true; + } + + return cookieId != req.sessionID + ? saveUninitializedSession || isModified(req.session) + : req.session.cookie.expires != null && isModified(req.session); + } + + // generate a session if the browser doesn't send a sessionID + if (!req.sessionID) { + debug('no SID sent, generating session'); + generate(); + next(); + return; + } + + // generate the session object + debug('fetching %s', req.sessionID); + store.get(req.sessionID, function(err, sess){ + // error handling + if (err) { + debug('error %j', err); + + if (err.code !== 'ENOENT') { + next(err); + return; + } + + generate(); + // no session + } else if (!sess) { + debug('no session found'); + generate(); + // populate req.session + } else { + debug('session found'); + store.createSession(req, sess); + originalId = req.sessionID; + originalHash = hash(sess); + + if (!resaveSession) { + savedHash = originalHash + } + + wrapmethods(req.session); + } + + next(); + }); + }; +}; + +/** + * Generate a session ID for a new session. + * + * @return {String} + * @api private + */ + +function generateSessionId(sess) { + return uid(24); +} + +/** + * Get the session ID cookie from request. + * + * @return {string} + * @api private + */ + +function getcookie(req, name, secret) { + var header = req.headers.cookie; + var raw; + var val; + + // read from cookie header + if (header) { + var cookies = cookie.parse(header); + + raw = cookies[name]; + + if (raw) { + if (raw.substr(0, 2) === 's:') { + val = signature.unsign(raw.slice(2), secret); + + if (val === false) { + debug('cookie signature invalid'); + val = undefined; + } + } else { + debug('cookie unsigned') + } + } + } + + // back-compat read from cookieParser() signedCookies data + if (!val && req.signedCookies) { + val = req.signedCookies[name]; + + if (val) { + deprecate('cookie should be available in req.headers.cookie'); + } + } + + // back-compat read from cookieParser() cookies data + if (!val && req.cookies) { + raw = req.cookies[name]; + + if (raw) { + if (raw.substr(0, 2) === 's:') { + val = signature.unsign(raw.slice(2), secret); + + if (val) { + deprecate('cookie should be available in req.headers.cookie'); + } + + if (val === false) { + debug('cookie signature invalid'); + val = undefined; + } + } else { + debug('cookie unsigned') + } + } + } + + return val; +} + +/** + * Hash the given `sess` object omitting changes to `.cookie`. + * + * @param {Object} sess + * @return {String} + * @api private + */ + +function hash(sess) { + return crc(JSON.stringify(sess, function (key, val) { + if (key !== 'cookie') { + return val; + } + })); +} + +/** + * Determine if request is secure. + * + * @param {Object} req + * @param {Boolean} [trustProxy] + * @return {Boolean} + * @api private + */ + +function issecure(req, trustProxy) { + // socket is https server + if (req.connection && req.connection.encrypted) { + return true; + } + + // do not trust proxy + if (trustProxy === false) { + return false; + } + + // no explicit trust; try req.secure from express + if (trustProxy !== true) { + var secure = req.secure; + return typeof secure === 'boolean' + ? secure + : false; + } + + // read the proto from x-forwarded-proto header + var header = req.headers['x-forwarded-proto'] || ''; + var index = header.indexOf(','); + var proto = index !== -1 + ? header.substr(0, index).toLowerCase().trim() + : header.toLowerCase().trim() + + return proto === 'https'; +} + +function setcookie(res, name, val, secret, options) { + var signed = 's:' + signature.sign(val, secret); + var data = cookie.serialize(name, signed, options); + + debug('set-cookie %s', data); + + var prev = res.getHeader('set-cookie') || []; + var header = Array.isArray(prev) ? prev.concat(data) + : Array.isArray(data) ? [prev].concat(data) + : [prev, data]; + + res.setHeader('set-cookie', header) +} diff --git a/node_modules/express-session/node_modules/cookie-signature/.npmignore b/node_modules/express-session/node_modules/cookie-signature/.npmignore new file mode 100644 index 0000000..f1250e5 --- /dev/null +++ b/node_modules/express-session/node_modules/cookie-signature/.npmignore @@ -0,0 +1,4 @@ +support +test +examples +*.sock diff --git a/node_modules/express-session/node_modules/cookie-signature/History.md b/node_modules/express-session/node_modules/cookie-signature/History.md new file mode 100644 index 0000000..2bbc4b3 --- /dev/null +++ b/node_modules/express-session/node_modules/cookie-signature/History.md @@ -0,0 +1,27 @@ +1.0.4 / 2014-06-25 +================== + + * corrected avoidance of timing attacks (thanks @tenbits!) + + +1.0.3 / 2014-01-28 +================== + + * [incorrect] fix for timing attacks + +1.0.2 / 2014-01-28 +================== + + * fix missing repository warning + * fix typo in test + +1.0.1 / 2013-04-15 +================== + + * Revert "Changed underlying HMAC algo. to sha512." + * Revert "Fix for timing attacks on MAC verification." + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/express-session/node_modules/cookie-signature/Makefile b/node_modules/express-session/node_modules/cookie-signature/Makefile new file mode 100644 index 0000000..4e9c8d3 --- /dev/null +++ b/node_modules/express-session/node_modules/cookie-signature/Makefile @@ -0,0 +1,7 @@ + +test: + @./node_modules/.bin/mocha \ + --require should \ + --reporter spec + +.PHONY: test \ No newline at end of file diff --git a/node_modules/express-session/node_modules/cookie-signature/Readme.md b/node_modules/express-session/node_modules/cookie-signature/Readme.md new file mode 100644 index 0000000..2559e84 --- /dev/null +++ b/node_modules/express-session/node_modules/cookie-signature/Readme.md @@ -0,0 +1,42 @@ + +# cookie-signature + + Sign and unsign cookies. + +## Example + +```js +var cookie = require('cookie-signature'); + +var val = cookie.sign('hello', 'tobiiscool'); +val.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI'); + +var val = cookie.sign('hello', 'tobiiscool'); +cookie.unsign(val, 'tobiiscool').should.equal('hello'); +cookie.unsign(val, 'luna').should.be.false; +``` + +## License + +(The MIT License) + +Copyright (c) 2012 LearnBoost <tj@learnboost.com> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/express-session/node_modules/cookie-signature/index.js b/node_modules/express-session/node_modules/cookie-signature/index.js new file mode 100644 index 0000000..b63bf84 --- /dev/null +++ b/node_modules/express-session/node_modules/cookie-signature/index.js @@ -0,0 +1,51 @@ +/** + * Module dependencies. + */ + +var crypto = require('crypto'); + +/** + * Sign the given `val` with `secret`. + * + * @param {String} val + * @param {String} secret + * @return {String} + * @api private + */ + +exports.sign = function(val, secret){ + if ('string' != typeof val) throw new TypeError('cookie required'); + if ('string' != typeof secret) throw new TypeError('secret required'); + return val + '.' + crypto + .createHmac('sha256', secret) + .update(val) + .digest('base64') + .replace(/\=+$/, ''); +}; + +/** + * Unsign and decode the given `val` with `secret`, + * returning `false` if the signature is invalid. + * + * @param {String} val + * @param {String} secret + * @return {String|Boolean} + * @api private + */ + +exports.unsign = function(val, secret){ + if ('string' != typeof val) throw new TypeError('cookie required'); + if ('string' != typeof secret) throw new TypeError('secret required'); + var str = val.slice(0, val.lastIndexOf('.')) + , mac = exports.sign(str, secret); + + return sha1(mac) == sha1(val) ? str : false; +}; + +/** + * Private + */ + +function sha1(str){ + return crypto.createHash('sha1').update(str).digest('hex'); +} diff --git a/node_modules/express-session/node_modules/cookie-signature/package.json b/node_modules/express-session/node_modules/cookie-signature/package.json new file mode 100644 index 0000000..741961f --- /dev/null +++ b/node_modules/express-session/node_modules/cookie-signature/package.json @@ -0,0 +1,56 @@ +{ + "name": "cookie-signature", + "version": "1.0.5", + "description": "Sign and unsign cookies", + "keywords": [ + "cookie", + "sign", + "unsign" + ], + "author": { + "name": "TJ Holowaychuk", + "email": "tj@learnboost.com" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/visionmedia/node-cookie-signature.git" + }, + "dependencies": {}, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "main": "index", + "gitHead": "73ed69b511b3ef47555d71b4ed1deea9e5ed6e1f", + "bugs": { + "url": "https://github.com/visionmedia/node-cookie-signature/issues" + }, + "homepage": "https://github.com/visionmedia/node-cookie-signature", + "_id": "cookie-signature@1.0.5", + "scripts": {}, + "_shasum": "a122e3f1503eca0f5355795b0711bb2368d450f9", + "_from": "cookie-signature@1.0.5", + "_npmVersion": "1.4.20", + "_npmUser": { + "name": "natevw", + "email": "natevw@yahoo.com" + }, + "maintainers": [ + { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + }, + { + "name": "natevw", + "email": "natevw@yahoo.com" + } + ], + "dist": { + "shasum": "a122e3f1503eca0f5355795b0711bb2368d450f9", + "tarball": "http://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.5.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.5.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/express-session/node_modules/cookie/.npmignore b/node_modules/express-session/node_modules/cookie/.npmignore new file mode 100644 index 0000000..efab07f --- /dev/null +++ b/node_modules/express-session/node_modules/cookie/.npmignore @@ -0,0 +1,2 @@ +test +.travis.yml diff --git a/node_modules/express-session/node_modules/cookie/LICENSE b/node_modules/express-session/node_modules/cookie/LICENSE new file mode 100644 index 0000000..249d9de --- /dev/null +++ b/node_modules/express-session/node_modules/cookie/LICENSE @@ -0,0 +1,9 @@ +// MIT License + +Copyright (C) Roman Shtylman + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/express-session/node_modules/cookie/README.md b/node_modules/express-session/node_modules/cookie/README.md new file mode 100644 index 0000000..3170b4b --- /dev/null +++ b/node_modules/express-session/node_modules/cookie/README.md @@ -0,0 +1,44 @@ +# cookie [![Build Status](https://secure.travis-ci.org/defunctzombie/node-cookie.png?branch=master)](http://travis-ci.org/defunctzombie/node-cookie) # + +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. + +See [RFC6265](http://tools.ietf.org/html/rfc6265) for details about the http header for cookies. + +## how? + +``` +npm install cookie +``` + +```javascript +var cookie = require('cookie'); + +var hdr = cookie.serialize('foo', 'bar'); +// hdr = 'foo=bar'; + +var cookies = cookie.parse('foo=bar; cat=meow; dog=ruff'); +// cookies = { foo: 'bar', cat: 'meow', dog: 'ruff' }; +``` + +## more + +The serialize function takes a third parameter, an object, to set cookie options. See the RFC for valid values. + +### path +> cookie path + +### expires +> absolute expiration date for the cookie (Date object) + +### maxAge +> relative max age of the cookie from when the client receives it (seconds) + +### domain +> domain for the cookie + +### secure +> true or false + +### httpOnly +> true or false + diff --git a/node_modules/express-session/node_modules/cookie/index.js b/node_modules/express-session/node_modules/cookie/index.js new file mode 100644 index 0000000..00d54a7 --- /dev/null +++ b/node_modules/express-session/node_modules/cookie/index.js @@ -0,0 +1,75 @@ + +/// Serialize the a name value pair into a cookie string suitable for +/// http headers. An optional options object specified cookie parameters +/// +/// serialize('foo', 'bar', { httpOnly: true }) +/// => "foo=bar; httpOnly" +/// +/// @param {String} name +/// @param {String} val +/// @param {Object} options +/// @return {String} +var serialize = function(name, val, opt){ + opt = opt || {}; + var enc = opt.encode || encode; + var pairs = [name + '=' + enc(val)]; + + if (null != opt.maxAge) { + var maxAge = opt.maxAge - 0; + if (isNaN(maxAge)) throw new Error('maxAge should be a Number'); + pairs.push('Max-Age=' + maxAge); + } + + if (opt.domain) pairs.push('Domain=' + opt.domain); + if (opt.path) pairs.push('Path=' + opt.path); + if (opt.expires) pairs.push('Expires=' + opt.expires.toUTCString()); + if (opt.httpOnly) pairs.push('HttpOnly'); + if (opt.secure) pairs.push('Secure'); + + return pairs.join('; '); +}; + +/// Parse the given cookie header string into an object +/// The object has the various cookies as keys(names) => values +/// @param {String} str +/// @return {Object} +var parse = function(str, opt) { + opt = opt || {}; + var obj = {} + var pairs = str.split(/; */); + var dec = opt.decode || decode; + + pairs.forEach(function(pair) { + var eq_idx = pair.indexOf('=') + + // skip things that don't look like key=value + if (eq_idx < 0) { + return; + } + + var key = pair.substr(0, eq_idx).trim() + var val = pair.substr(++eq_idx, pair.length).trim(); + + // quoted values + if ('"' == val[0]) { + val = val.slice(1, -1); + } + + // only assign once + if (undefined == obj[key]) { + try { + obj[key] = dec(val); + } catch (e) { + obj[key] = val; + } + } + }); + + return obj; +}; + +var encode = encodeURIComponent; +var decode = decodeURIComponent; + +module.exports.serialize = serialize; +module.exports.parse = parse; diff --git a/node_modules/express-session/node_modules/cookie/package.json b/node_modules/express-session/node_modules/cookie/package.json new file mode 100644 index 0000000..7dbb395 --- /dev/null +++ b/node_modules/express-session/node_modules/cookie/package.json @@ -0,0 +1,54 @@ +{ + "author": { + "name": "Roman Shtylman", + "email": "shtylman@gmail.com" + }, + "name": "cookie", + "description": "cookie parsing and serialization", + "version": "0.1.2", + "repository": { + "type": "git", + "url": "git://github.com/shtylman/node-cookie.git" + }, + "keywords": [ + "cookie", + "cookies" + ], + "main": "index.js", + "scripts": { + "test": "mocha" + }, + "dependencies": {}, + "devDependencies": { + "mocha": "1.x.x" + }, + "optionalDependencies": {}, + "engines": { + "node": "*" + }, + "bugs": { + "url": "https://github.com/shtylman/node-cookie/issues" + }, + "homepage": "https://github.com/shtylman/node-cookie", + "_id": "cookie@0.1.2", + "dist": { + "shasum": "72fec3d24e48a3432073d90c12642005061004b1", + "tarball": "http://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz" + }, + "_from": "cookie@0.1.2", + "_npmVersion": "1.4.6", + "_npmUser": { + "name": "shtylman", + "email": "shtylman@gmail.com" + }, + "maintainers": [ + { + "name": "shtylman", + "email": "shtylman@gmail.com" + } + ], + "directories": {}, + "_shasum": "72fec3d24e48a3432073d90c12642005061004b1", + "_resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/express-session/node_modules/crc/.npmignore b/node_modules/express-session/node_modules/crc/.npmignore new file mode 100644 index 0000000..b84a005 --- /dev/null +++ b/node_modules/express-session/node_modules/crc/.npmignore @@ -0,0 +1,4 @@ +benchmark +src +test +.travis.yml diff --git a/node_modules/express-session/node_modules/crc/LICENSE b/node_modules/express-session/node_modules/crc/LICENSE new file mode 100644 index 0000000..c49097c --- /dev/null +++ b/node_modules/express-session/node_modules/crc/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright 2014 Alex Gorbatchev + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/express-session/node_modules/crc/README.md b/node_modules/express-session/node_modules/crc/README.md new file mode 100644 index 0000000..3fdef99 --- /dev/null +++ b/node_modules/express-session/node_modules/crc/README.md @@ -0,0 +1,89 @@ +# crc + +[![GitTip](http://img.shields.io/gittip/alexgorbatchev.svg?style=flat)](https://www.gittip.com/alexgorbatchev/) +[![Dependency status](http://img.shields.io/david/alexgorbatchev/node-crc.svg?style=flat)](https://david-dm.org/alexgorbatchev/node-crc) +[![devDependency Status](http://img.shields.io/david/dev/alexgorbatchev/node-crc.svg?style=flat)](https://david-dm.org/alexgorbatchev/node-crc#info=devDependencies) +[![Build Status](http://img.shields.io/travis/alexgorbatchev/node-crc.svg?style=flat&branch=master)](https://travis-ci.org/alexgorbatchev/node-crc) + +[![NPM](https://nodei.co/npm/node-crc.svg?style=flat)](https://npmjs.org/package/node-crc) + +Module for calculating Cyclic Redundancy Check (CRC). + +## Features + +* Version 3 is 3-4 times faster than version 2. +* Pure JavaScript implementation, no dependencies. +* Provides CRC Tables for optimized calculations. +* Provides support for the following CRC algorithms: + * CRC1 `crc.crc1(…)` + * CRC8 `crc.crc8(…)` + * CRC8 1-Wire `crc.crc81wire(…)` + * CRC16 `crc.crc16(…)` + * CRC16 CCITT `crc.crc16ccitt(…)` + * CRC16 Modbus `crc.crc16modbus(…)` + * CRC24 `crc.crc24(…)` + * CRC32 `crc.crc32(…)` + +## Installation + + npm install crc + +## Running tests + + $ npm install + $ npm test + +## Usage Example + +Calculate a CRC32: + + var crc = require('crc'); + + crc.crc32('hello').toString(16); + # => "3610a686" + +Calculate a CRC32 of a file: + + crc.crc32(fs.readFileSync('README.md', 'utf8')).toString(16); + # => "127ad531" + +Or using a `Buffer`: + + crc.crc32(fs.readFileSync('README.md')).toString(16); + # => "127ad531" + +Incrementally calculate a CRC32: + + value = crc32('one'); + value = crc32('two', value); + value = crc32('three', value); + value.toString(16); + # => "09e1c092" + +## Thanks! + +[pycrc](http://www.tty1.net/pycrc/) library is which the source of all of the CRC tables. + +# License + +The MIT License (MIT) + +Copyright (c) 2014 Alex Gorbatchev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/express-session/node_modules/crc/lib/crc.js b/node_modules/express-session/node_modules/crc/lib/crc.js new file mode 100644 index 0000000..1c342b7 --- /dev/null +++ b/node_modules/express-session/node_modules/crc/lib/crc.js @@ -0,0 +1,71 @@ +// Generated by CoffeeScript 1.7.1 +var CRC, hex; + +hex = require('./hex'); + +module.exports = CRC = (function() { + CRC.prototype.INIT_CRC = 0x00; + + CRC.prototype.XOR_MASK = 0x00; + + CRC.prototype.WIDTH = 0; + + CRC.prototype.pack = function(crc) { + return ''; + }; + + CRC.prototype.each_byte = function(buf, cb) { + var i, _i, _ref, _results; + if (!Buffer.isBuffer(buf)) { + buf = Buffer(buf); + } + _results = []; + for (i = _i = 0, _ref = buf.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) { + _results.push(cb(buf[i])); + } + return _results; + }; + + function CRC() { + this.crc = this.INIT_CRC; + } + + CRC.prototype.digest_length = function() { + return Math.ceil(this.WIDTH / 8.0); + }; + + CRC.prototype.update = function(data) {}; + + CRC.prototype.reset = function() { + return this.crc = this.INIT_CRC; + }; + + CRC.prototype.checksum = function(signed) { + var sum; + if (signed == null) { + signed = true; + } + sum = this.crc ^ this.XOR_MASK; + if (signed) { + sum = sum >>> 0; + } + return sum; + }; + + CRC.prototype.finish = function() { + return this.pack(this.checksum()); + }; + + CRC.prototype.hexdigest = function(value) { + var result; + if (value != null) { + this.update(value); + } + result = this.finish(); + this.reset(); + return result; + }; + + return CRC; + +})(); diff --git a/node_modules/express-session/node_modules/crc/lib/crc1.js b/node_modules/express-session/node_modules/crc/lib/crc1.js new file mode 100644 index 0000000..3cb4fa9 --- /dev/null +++ b/node_modules/express-session/node_modules/crc/lib/crc1.js @@ -0,0 +1,21 @@ +// Generated by CoffeeScript 1.7.1 +var Buffer, create; + +Buffer = require('buffer').Buffer; + +create = require('./create'); + +module.exports = create(function(buf, previous) { + var accum, byte, crc, _i, _len; + if (!Buffer.isBuffer(buf)) { + buf = Buffer(buf); + } + crc = ~~previous; + accum = 0; + for (_i = 0, _len = buf.length; _i < _len; _i++) { + byte = buf[_i]; + accum += byte; + } + crc += accum % 256; + return crc % 256; +}); diff --git a/node_modules/express-session/node_modules/crc/lib/crc16.js b/node_modules/express-session/node_modules/crc/lib/crc16.js new file mode 100644 index 0000000..f19faa8 --- /dev/null +++ b/node_modules/express-session/node_modules/crc/lib/crc16.js @@ -0,0 +1,25 @@ +// Generated by CoffeeScript 1.7.1 +var Buffer, TABLE, create; + +Buffer = require('buffer').Buffer; + +create = require('./create'); + +TABLE = [0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040]; + +if (typeof Int32Array !== 'undefined') { + TABLE = new Int32Array(TABLE); +} + +module.exports = create(function(buf, previous) { + var byte, crc, _i, _len; + if (!Buffer.isBuffer(buf)) { + buf = Buffer(buf); + } + crc = ~~previous; + for (_i = 0, _len = buf.length; _i < _len; _i++) { + byte = buf[_i]; + crc = (TABLE[(crc ^ byte) & 0xff] ^ (crc >> 8)) & 0xffff; + } + return crc; +}); diff --git a/node_modules/express-session/node_modules/crc/lib/crc16_ccitt.js b/node_modules/express-session/node_modules/crc/lib/crc16_ccitt.js new file mode 100644 index 0000000..5331638 --- /dev/null +++ b/node_modules/express-session/node_modules/crc/lib/crc16_ccitt.js @@ -0,0 +1,25 @@ +// Generated by CoffeeScript 1.7.1 +var Buffer, TABLE, create; + +Buffer = require('buffer').Buffer; + +create = require('./create'); + +TABLE = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0]; + +if (typeof Int32Array !== 'undefined') { + TABLE = new Int32Array(TABLE); +} + +module.exports = create(function(buf, previous) { + var byte, crc, _i, _len; + if (!Buffer.isBuffer(buf)) { + buf = Buffer(buf); + } + crc = ~~previous || 0xffff; + for (_i = 0, _len = buf.length; _i < _len; _i++) { + byte = buf[_i]; + crc = (TABLE[((crc >> 8) ^ byte) & 0xff] ^ (crc << 8)) & 0xffff; + } + return crc; +}); diff --git a/node_modules/express-session/node_modules/crc/lib/crc16_modbus.js b/node_modules/express-session/node_modules/crc/lib/crc16_modbus.js new file mode 100644 index 0000000..dcbd41b --- /dev/null +++ b/node_modules/express-session/node_modules/crc/lib/crc16_modbus.js @@ -0,0 +1,25 @@ +// Generated by CoffeeScript 1.7.1 +var Buffer, TABLE, create; + +Buffer = require('buffer').Buffer; + +create = require('./create'); + +TABLE = [0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040]; + +if (typeof Int32Array !== 'undefined') { + TABLE = new Int32Array(TABLE); +} + +module.exports = create(function(buf, previous) { + var byte, crc, _i, _len; + if (!Buffer.isBuffer(buf)) { + buf = Buffer(buf); + } + crc = ~~previous || 0xffff; + for (_i = 0, _len = buf.length; _i < _len; _i++) { + byte = buf[_i]; + crc = (TABLE[(crc ^ byte) & 0xff] ^ (crc >> 8)) & 0xffff; + } + return crc; +}); diff --git a/node_modules/express-session/node_modules/crc/lib/crc24.js b/node_modules/express-session/node_modules/crc/lib/crc24.js new file mode 100644 index 0000000..413d159 --- /dev/null +++ b/node_modules/express-session/node_modules/crc/lib/crc24.js @@ -0,0 +1,25 @@ +// Generated by CoffeeScript 1.7.1 +var Buffer, TABLE, create; + +Buffer = require('buffer').Buffer; + +create = require('./create'); + +TABLE = [0x000000, 0x864cfb, 0x8ad50d, 0x0c99f6, 0x93e6e1, 0x15aa1a, 0x1933ec, 0x9f7f17, 0xa18139, 0x27cdc2, 0x2b5434, 0xad18cf, 0x3267d8, 0xb42b23, 0xb8b2d5, 0x3efe2e, 0xc54e89, 0x430272, 0x4f9b84, 0xc9d77f, 0x56a868, 0xd0e493, 0xdc7d65, 0x5a319e, 0x64cfb0, 0xe2834b, 0xee1abd, 0x685646, 0xf72951, 0x7165aa, 0x7dfc5c, 0xfbb0a7, 0x0cd1e9, 0x8a9d12, 0x8604e4, 0x00481f, 0x9f3708, 0x197bf3, 0x15e205, 0x93aefe, 0xad50d0, 0x2b1c2b, 0x2785dd, 0xa1c926, 0x3eb631, 0xb8faca, 0xb4633c, 0x322fc7, 0xc99f60, 0x4fd39b, 0x434a6d, 0xc50696, 0x5a7981, 0xdc357a, 0xd0ac8c, 0x56e077, 0x681e59, 0xee52a2, 0xe2cb54, 0x6487af, 0xfbf8b8, 0x7db443, 0x712db5, 0xf7614e, 0x19a3d2, 0x9fef29, 0x9376df, 0x153a24, 0x8a4533, 0x0c09c8, 0x00903e, 0x86dcc5, 0xb822eb, 0x3e6e10, 0x32f7e6, 0xb4bb1d, 0x2bc40a, 0xad88f1, 0xa11107, 0x275dfc, 0xdced5b, 0x5aa1a0, 0x563856, 0xd074ad, 0x4f0bba, 0xc94741, 0xc5deb7, 0x43924c, 0x7d6c62, 0xfb2099, 0xf7b96f, 0x71f594, 0xee8a83, 0x68c678, 0x645f8e, 0xe21375, 0x15723b, 0x933ec0, 0x9fa736, 0x19ebcd, 0x8694da, 0x00d821, 0x0c41d7, 0x8a0d2c, 0xb4f302, 0x32bff9, 0x3e260f, 0xb86af4, 0x2715e3, 0xa15918, 0xadc0ee, 0x2b8c15, 0xd03cb2, 0x567049, 0x5ae9bf, 0xdca544, 0x43da53, 0xc596a8, 0xc90f5e, 0x4f43a5, 0x71bd8b, 0xf7f170, 0xfb6886, 0x7d247d, 0xe25b6a, 0x641791, 0x688e67, 0xeec29c, 0x3347a4, 0xb50b5f, 0xb992a9, 0x3fde52, 0xa0a145, 0x26edbe, 0x2a7448, 0xac38b3, 0x92c69d, 0x148a66, 0x181390, 0x9e5f6b, 0x01207c, 0x876c87, 0x8bf571, 0x0db98a, 0xf6092d, 0x7045d6, 0x7cdc20, 0xfa90db, 0x65efcc, 0xe3a337, 0xef3ac1, 0x69763a, 0x578814, 0xd1c4ef, 0xdd5d19, 0x5b11e2, 0xc46ef5, 0x42220e, 0x4ebbf8, 0xc8f703, 0x3f964d, 0xb9dab6, 0xb54340, 0x330fbb, 0xac70ac, 0x2a3c57, 0x26a5a1, 0xa0e95a, 0x9e1774, 0x185b8f, 0x14c279, 0x928e82, 0x0df195, 0x8bbd6e, 0x872498, 0x016863, 0xfad8c4, 0x7c943f, 0x700dc9, 0xf64132, 0x693e25, 0xef72de, 0xe3eb28, 0x65a7d3, 0x5b59fd, 0xdd1506, 0xd18cf0, 0x57c00b, 0xc8bf1c, 0x4ef3e7, 0x426a11, 0xc426ea, 0x2ae476, 0xaca88d, 0xa0317b, 0x267d80, 0xb90297, 0x3f4e6c, 0x33d79a, 0xb59b61, 0x8b654f, 0x0d29b4, 0x01b042, 0x87fcb9, 0x1883ae, 0x9ecf55, 0x9256a3, 0x141a58, 0xefaaff, 0x69e604, 0x657ff2, 0xe33309, 0x7c4c1e, 0xfa00e5, 0xf69913, 0x70d5e8, 0x4e2bc6, 0xc8673d, 0xc4fecb, 0x42b230, 0xddcd27, 0x5b81dc, 0x57182a, 0xd154d1, 0x26359f, 0xa07964, 0xace092, 0x2aac69, 0xb5d37e, 0x339f85, 0x3f0673, 0xb94a88, 0x87b4a6, 0x01f85d, 0x0d61ab, 0x8b2d50, 0x145247, 0x921ebc, 0x9e874a, 0x18cbb1, 0xe37b16, 0x6537ed, 0x69ae1b, 0xefe2e0, 0x709df7, 0xf6d10c, 0xfa48fa, 0x7c0401, 0x42fa2f, 0xc4b6d4, 0xc82f22, 0x4e63d9, 0xd11cce, 0x575035, 0x5bc9c3, 0xdd8538]; + +if (typeof Int32Array !== 'undefined') { + TABLE = new Int32Array(TABLE); +} + +module.exports = create(function(buf, previous) { + var byte, crc, _i, _len; + if (!Buffer.isBuffer(buf)) { + buf = Buffer(buf); + } + crc = ~~previous || 0xb704ce; + for (_i = 0, _len = buf.length; _i < _len; _i++) { + byte = buf[_i]; + crc = (TABLE[((crc >> 16) ^ byte) & 0xff] ^ (crc << 8)) & 0xffffff; + } + return crc; +}); diff --git a/node_modules/express-session/node_modules/crc/lib/crc32.js b/node_modules/express-session/node_modules/crc/lib/crc32.js new file mode 100644 index 0000000..eb2c85e --- /dev/null +++ b/node_modules/express-session/node_modules/crc/lib/crc32.js @@ -0,0 +1,25 @@ +// Generated by CoffeeScript 1.7.1 +var Buffer, TABLE, create; + +Buffer = require('buffer').Buffer; + +create = require('./create'); + +TABLE = [0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d]; + +if (typeof Int32Array !== 'undefined') { + TABLE = new Int32Array(TABLE); +} + +module.exports = create(function(buf, previous) { + var byte, crc, _i, _len; + if (!Buffer.isBuffer(buf)) { + buf = Buffer(buf); + } + crc = ~~previous ^ -1; + for (_i = 0, _len = buf.length; _i < _len; _i++) { + byte = buf[_i]; + crc = TABLE[(crc ^ byte) & 0xff] ^ (crc >>> 8); + } + return crc ^ -1; +}); diff --git a/node_modules/express-session/node_modules/crc/lib/crc8.js b/node_modules/express-session/node_modules/crc/lib/crc8.js new file mode 100644 index 0000000..d6518c1 --- /dev/null +++ b/node_modules/express-session/node_modules/crc/lib/crc8.js @@ -0,0 +1,25 @@ +// Generated by CoffeeScript 1.7.1 +var Buffer, TABLE, create; + +Buffer = require('buffer').Buffer; + +create = require('./create'); + +TABLE = [0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, 0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd, 0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd, 0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2, 0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea, 0xb7, 0xb0, 0xb9, 0xbe, 0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a, 0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0d, 0x0a, 0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42, 0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a, 0x89, 0x8e, 0x87, 0x80, 0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4, 0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8, 0xdd, 0xda, 0xd3, 0xd4, 0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c, 0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44, 0x19, 0x1e, 0x17, 0x10, 0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34, 0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f, 0x6a, 0x6d, 0x64, 0x63, 0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b, 0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13, 0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83, 0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3]; + +if (typeof Int32Array !== 'undefined') { + TABLE = new Int32Array(TABLE); +} + +module.exports = create(function(buf, previous) { + var byte, crc, _i, _len; + if (!Buffer.isBuffer(buf)) { + buf = Buffer(buf); + } + crc = ~~previous; + for (_i = 0, _len = buf.length; _i < _len; _i++) { + byte = buf[_i]; + crc = (TABLE[(crc ^ byte) & 0xff] ^ (crc << 8)) & 0xff; + } + return crc; +}); diff --git a/node_modules/express-session/node_modules/crc/lib/crc8_1wire.js b/node_modules/express-session/node_modules/crc/lib/crc8_1wire.js new file mode 100644 index 0000000..c63a422 --- /dev/null +++ b/node_modules/express-session/node_modules/crc/lib/crc8_1wire.js @@ -0,0 +1,25 @@ +// Generated by CoffeeScript 1.7.1 +var Buffer, TABLE, create; + +Buffer = require('buffer').Buffer; + +create = require('./create'); + +TABLE = [0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83, 0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41, 0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e, 0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc, 0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0, 0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62, 0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d, 0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff, 0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5, 0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07, 0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58, 0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a, 0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6, 0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24, 0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b, 0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9, 0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f, 0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd, 0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92, 0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50, 0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c, 0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee, 0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1, 0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73, 0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49, 0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b, 0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4, 0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16, 0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a, 0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8, 0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7, 0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35]; + +if (typeof Int32Array !== 'undefined') { + TABLE = new Int32Array(TABLE); +} + +module.exports = create(function(buf, previous) { + var byte, crc, _i, _len; + if (!Buffer.isBuffer(buf)) { + buf = Buffer(buf); + } + crc = ~~previous; + for (_i = 0, _len = buf.length; _i < _len; _i++) { + byte = buf[_i]; + crc = (TABLE[(crc ^ byte) & 0xff] ^ (crc << 8)) & 0xff; + } + return crc; +}); diff --git a/node_modules/express-session/node_modules/crc/lib/create.js b/node_modules/express-session/node_modules/crc/lib/create.js new file mode 100644 index 0000000..df4d991 --- /dev/null +++ b/node_modules/express-session/node_modules/crc/lib/create.js @@ -0,0 +1,10 @@ +// Generated by CoffeeScript 1.7.1 +module.exports = function(calc) { + var fn; + fn = function(buf, previous) { + return calc(buf, previous) >>> 0; + }; + fn.signed = calc; + fn.unsigned = fn; + return fn; +}; diff --git a/node_modules/express-session/node_modules/crc/lib/hex.js b/node_modules/express-session/node_modules/crc/lib/hex.js new file mode 100644 index 0000000..0a6aa4c --- /dev/null +++ b/node_modules/express-session/node_modules/crc/lib/hex.js @@ -0,0 +1,9 @@ +// Generated by CoffeeScript 1.7.1 +module.exports = function(number) { + var result; + result = number.toString(16); + while (result.length % 2) { + result = "0" + result; + } + return result; +}; diff --git a/node_modules/express-session/node_modules/crc/lib/index.js b/node_modules/express-session/node_modules/crc/lib/index.js new file mode 100644 index 0000000..15ac34c --- /dev/null +++ b/node_modules/express-session/node_modules/crc/lib/index.js @@ -0,0 +1,11 @@ +// Generated by CoffeeScript 1.7.1 +module.exports = { + crc1: require('./crc1'), + crc8: require('./crc8'), + crc81wire: require('./crc8_1wire'), + crc16: require('./crc16'), + crc16ccitt: require('./crc16_ccitt'), + crc16modbus: require('./crc16_modbus'), + crc24: require('./crc24'), + crc32: require('./crc32') +}; diff --git a/node_modules/express-session/node_modules/crc/package.json b/node_modules/express-session/node_modules/crc/package.json new file mode 100644 index 0000000..712dbd8 --- /dev/null +++ b/node_modules/express-session/node_modules/crc/package.json @@ -0,0 +1,58 @@ +{ + "name": "crc", + "version": "3.0.0", + "description": "Various CRC JavaScript implementations", + "keywords": [ + "crc" + ], + "main": "./lib/index.js", + "scripts": { + "test": "mocha test/*.spec.coffee", + "pretest": "coffee --bare --output ./lib --compile ./src/*.coffee" + }, + "author": { + "name": "Alex Gorbatchev", + "url": "https://github.com/alexgorbatchev" + }, + "devDependencies": { + "beautify-benchmark": "^0.2.4", + "benchmark": "^1.0.0", + "buffer-crc32": "^0.2.3", + "chai": "~1.9.1", + "coffee-errors": "~0.8.6", + "coffee-script": "~1.7.1", + "mocha": "*", + "seedrandom": "^2.3.6" + }, + "homepage": "https://github.com/alexgorbatchev/node-crc", + "bugs": { + "url": "https://github.com/alexgorbatchev/node-crc/issues" + }, + "repository": { + "type": "git", + "url": "git://github.com/alexgorbatchev/node-crc.git" + }, + "license": "MIT", + "gitHead": "16dbe7ca019d73be10e99c2f5fa690dcbfc0dd40", + "_id": "crc@3.0.0", + "_shasum": "d11e97ec44a844e5eb15a74fa2c7875d0aac4b22", + "_from": "crc@3.0.0", + "_npmVersion": "2.0.0-beta.0", + "_npmUser": { + "name": "alexgorbatchev", + "email": "alex.gorbatchev@gmail.com" + }, + "maintainers": [ + { + "name": "alexgorbatchev", + "email": "alex.gorbatchev@gmail.com" + } + ], + "dist": { + "shasum": "d11e97ec44a844e5eb15a74fa2c7875d0aac4b22", + "tarball": "http://registry.npmjs.org/crc/-/crc-3.0.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/crc/-/crc-3.0.0.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/express-session/node_modules/depd/History.md b/node_modules/express-session/node_modules/depd/History.md new file mode 100644 index 0000000..800eab1 --- /dev/null +++ b/node_modules/express-session/node_modules/depd/History.md @@ -0,0 +1,62 @@ +0.4.5 / 2014-09-09 +================== + + * Improve call speed to functions using the function wrapper + * Support Node.js 0.6 + +0.4.4 / 2014-07-27 +================== + + * Work-around v8 generating empty stack traces + +0.4.3 / 2014-07-26 +================== + + * Fix exception when global `Error.stackTraceLimit` is too low + +0.4.2 / 2014-07-19 +================== + + * Correct call site for wrapped functions and properties + +0.4.1 / 2014-07-19 +================== + + * Improve automatic message generation for function properties + +0.4.0 / 2014-07-19 +================== + + * Add `TRACE_DEPRECATION` environment variable + * Remove non-standard grey color from color output + * Support `--no-deprecation` argument + * Support `--trace-deprecation` argument + * Support `deprecate.property(fn, prop, message)` + +0.3.0 / 2014-06-16 +================== + + * Add `NO_DEPRECATION` environment variable + +0.2.0 / 2014-06-15 +================== + + * Add `deprecate.property(obj, prop, message)` + * Remove `supports-color` dependency for node.js 0.8 + +0.1.0 / 2014-06-15 +================== + + * Add `deprecate.function(fn, message)` + * Add `process.on('deprecation', fn)` emitter + * Automatically generate message when omitted from `deprecate()` + +0.0.1 / 2014-06-15 +================== + + * Fix warning for dynamic calls at singe call site + +0.0.0 / 2014-06-15 +================== + + * Initial implementation diff --git a/node_modules/express-session/node_modules/depd/LICENSE b/node_modules/express-session/node_modules/depd/LICENSE new file mode 100644 index 0000000..b7dce6c --- /dev/null +++ b/node_modules/express-session/node_modules/depd/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/express-session/node_modules/depd/Readme.md b/node_modules/express-session/node_modules/depd/Readme.md new file mode 100644 index 0000000..098953e --- /dev/null +++ b/node_modules/express-session/node_modules/depd/Readme.md @@ -0,0 +1,266 @@ +# depd + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-image]][node-url] +[![Build Status][travis-image]][travis-url] +[![Coverage Status][coveralls-image]][coveralls-url] +[![Gittip][gittip-image]][gittip-url] + +Deprecate all the things + +> With great modules comes great responsibility; mark things deprecated! + +## Install + +```sh +$ npm install depd +``` + +## API + +```js +var deprecate = require('depd')('my-module') +``` + +This library allows you to display deprecation messages to your users. +This library goes above and beyond with deprecation warnings by +introspecting the call stack (but only the bits that it is interested +in). + +Instead of just warning on the first invocation of a deprecated +function and never again, this module will warn on the first invocation +of a deprecated function per unique call site, making it ideal to alert +users of all deprecated uses across the code base, rather than just +whatever happens to execute first. + +The deprecation warnings from this module also include the file and line +information for the call into the module that the deprecated function was +in. + +### depd(namespace) + +Create a new deprecate function that uses the given namespace name in the +messages and will display the call site prior to the stack entering the +file this function was called from. It is highly suggested you use the +name of your module as the namespace. + +### deprecate(message) + +Call this function from deprecated code to display a deprecation message. +This message will appear once per unique caller site. Caller site is the +first call site in the stack in a different file from the caller of this +function. + +If the message is omitted, a message is generated for you based on the site +of the `deprecate()` call and will display the name of the function called, +similar to the name displayed in a stack trace. + +### deprecate.function(fn, message) + +Call this function to wrap a given function in a deprecation message on any +call to the function. An optional message can be supplied to provide a custom +message. + +### deprecate.property(obj, prop, message) + +Call this function to wrap a given property on object in a deprecation message +on any accessing or setting of the property. An optional message can be supplied +to provide a custom message. + +The method must be called on the object where the property belongs (not +inherited from the prototype). + +If the property is a data descriptor, it will be converted to an accessor +descriptor in order to display the deprecation message. + +### process.on('deprecation', fn) + +This module will allow easy capturing of deprecation errors by emitting the +errors as the type "deprecation" on the global `process`. If there are no +listeners for this type, the errors are written to STDERR as normal, but if +there are any listeners, nothing will be written to STDERR and instead only +emitted. From there, you can write the errors in a different format or to a +logging source. + +The error represents the deprecation and is emitted only once with the same +rules as writing to STDERR. The error has the following properties: + + - `message` - This is the message given by the library + - `name` - This is always `'DeprecationError'` + - `namespace` - This is the namespace the deprecation came from + - `stack` - This is the stack of the call to the deprecated thing + +Example `error.stack` output: + +``` +DeprecationError: my-cool-module deprecated oldfunction + at Object. ([eval]-wrapper:6:22) + at Module._compile (module.js:456:26) + at evalScript (node.js:532:25) + at startup (node.js:80:7) + at node.js:902:3 +``` + +### process.env.NO_DEPRECATION + +As a user of modules that are deprecated, the environment variable `NO_DEPRECATION` +is provided as a quick solution to silencing deprecation warnings from being +output. The format of this is similar to that of `DEBUG`: + +```sh +$ NO_DEPRECATION=my-module,othermod node app.js +``` + +This will suppress deprecations from being output for "my-module" and "othermod". +The value is a list of comma-separated namespaces. To suppress every warning +across all namespaces, use the value `*` for a namespace. + +Providing the argument `--no-deprecation` to the `node` executable will suppress +all deprecations (only available in Node.js 0.8 or higher). + +**NOTE** This will not suppress the deperecations given to any "deprecation" +event listeners, just the output to STDERR. + +### process.env.TRACE_DEPRECATION + +As a user of modules that are deprecated, the environment variable `TRACE_DEPRECATION` +is provided as a solution to getting more detailed location information in deprecation +warnings by including the entire stack trace. The format of this is the same as +`NO_DEPRECATION`: + +```sh +$ TRACE_DEPRECATION=my-module,othermod node app.js +``` + +This will include stack traces for deprecations being output for "my-module" and +"othermod". The value is a list of comma-separated namespaces. To trace every +warning across all namespaces, use the value `*` for a namespace. + +Providing the argument `--trace-deprecation` to the `node` executable will trace +all deprecations (only available in Node.js 0.8 or higher). + +**NOTE** This will not trace the deperecations silenced by `NO_DEPRECATION`. + +## Display + +![message](files/message.png) + +When a user calls a function in your library that you mark deprecated, they +will see the following written to STDERR (in the given colors, similar colors +and layout to the `debug` module): + +``` +bright cyan bright yellow +| | reset cyan +| | | | +▼ ▼ ▼ ▼ +my-cool-module deprecated oldfunction [eval]-wrapper:6:22 +▲ ▲ ▲ ▲ +| | | | +namespace | | location of mycoolmod.oldfunction() call + | deprecation message + the word "deprecated" +``` + +If the user redirects their STDERR to a file or somewhere that does not support +colors, they see (similar layout to the `debug` module): + +``` +Sun, 15 Jun 2014 05:21:37 GMT my-cool-module deprecated oldfunction at [eval]-wrapper:6:22 +▲ ▲ ▲ ▲ ▲ +| | | | | +timestamp of message namespace | | location of mycoolmod.oldfunction() call + | deprecation message + the word "deprecated" +``` + +## Examples + +### Deprecating all calls to a function + +This will display a deprecated message about "oldfunction" being deprecated +from "my-module" on STDERR. + +```js +var deprecate = require('depd')('my-cool-module') + +// message automatically derived from function name +// Object.oldfunction +exports.oldfunction = deprecate.function(function oldfunction() { + // all calls to function are deprecated +}) + +// specific message +exports.oldfunction = deprecate.function(function () { + // all calls to function are deprecated +}, 'oldfunction') +``` + +### Conditionally deprecating a function call + +This will display a deprecated message about "weirdfunction" being deprecated +from "my-module" on STDERR when called with less than 2 arguments. + +```js +var deprecate = require('depd')('my-cool-module') + +exports.weirdfunction = function () { + if (arguments.length < 2) { + // calls with 0 or 1 args are deprecated + deprecate('weirdfunction args < 2') + } +} +``` + +When calling `deprecate` as a function, the warning is counted per call site +within your own module, so you can display different deprecations depending +on different situations and the users will still get all the warnings: + +```js +var deprecate = require('depd')('my-cool-module') + +exports.weirdfunction = function () { + if (arguments.length < 2) { + // calls with 0 or 1 args are deprecated + deprecate('weirdfunction args < 2') + } else if (typeof arguments[0] !== 'string') { + // calls with non-string first argument are deprecated + deprecate('weirdfunction non-string first arg') + } +} +``` + +### Deprecating property access + +This will display a deprecated message about "oldprop" being deprecated +from "my-module" on STDERR when accessed. A deprecation will be displayed +when setting the value and when getting the value. + +```js +var deprecate = require('depd')('my-cool-module') + +exports.oldprop = 'something' + +// message automatically derives from property name +deprecate.property(exports, 'oldprop') + +// explicit message +deprecate.property(exports, 'oldprop', 'oldprop >= 0.10') +``` + +## License + +[MIT](LICENSE) + +[npm-version-image]: https://img.shields.io/npm/v/depd.svg?style=flat +[npm-downloads-image]: https://img.shields.io/npm/dm/depd.svg?style=flat +[npm-url]: https://npmjs.org/package/depd +[travis-image]: https://img.shields.io/travis/dougwilson/nodejs-depd.svg?style=flat +[travis-url]: https://travis-ci.org/dougwilson/nodejs-depd +[coveralls-image]: https://img.shields.io/coveralls/dougwilson/nodejs-depd.svg?style=flat +[coveralls-url]: https://coveralls.io/r/dougwilson/nodejs-depd?branch=master +[node-image]: https://img.shields.io/node/v/depd.svg?style=flat +[node-url]: http://nodejs.org/download/ +[gittip-image]: https://img.shields.io/gittip/dougwilson.svg?style=flat +[gittip-url]: https://www.gittip.com/dougwilson/ diff --git a/node_modules/express-session/node_modules/depd/index.js b/node_modules/express-session/node_modules/depd/index.js new file mode 100644 index 0000000..4fee4d9 --- /dev/null +++ b/node_modules/express-session/node_modules/depd/index.js @@ -0,0 +1,522 @@ +/*! + * depd + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var callSiteToString = require('./lib/compat').callSiteToString +var EventEmitter = require('events').EventEmitter +var relative = require('path').relative + +/** + * Module exports. + */ + +module.exports = depd + +/** + * Get the path to base files on. + */ + +var basePath = process.cwd() + +/** + * Get listener count on event emitter. + */ + +/*istanbul ignore next*/ +var eventListenerCount = EventEmitter.listenerCount + || function (emitter, type) { return emitter.listeners(type).length } + +/** + * Determine if namespace is contained in the string. + */ + +function containsNamespace(str, namespace) { + var val = str.split(/[ ,]+/) + + namespace = String(namespace).toLowerCase() + + for (var i = 0 ; i < val.length; i++) { + if (!(str = val[i])) continue; + + // namespace contained + if (str === '*' || str.toLowerCase() === namespace) { + return true + } + } + + return false +} + +/** + * Convert a data descriptor to accessor descriptor. + */ + +function convertDataDescriptorToAccessor(obj, prop, message) { + var descriptor = Object.getOwnPropertyDescriptor(obj, prop) + var value = descriptor.value + + descriptor.get = function getter() { return value } + + if (descriptor.writable) { + descriptor.set = function setter(val) { return value = val } + } + + delete descriptor.value + delete descriptor.writable + + Object.defineProperty(obj, prop, descriptor) + + return descriptor +} + +/** + * Create arguments string to keep arity. + */ + +function createArgumentsString(arity) { + var str = '' + + for (var i = 0; i < arity; i++) { + str += ', arg' + i + } + + return str.substr(2) +} + +/** + * Create stack string from stack. + */ + +function createStackString(stack) { + var str = this.name + ': ' + this.namespace + + if (this.message) { + str += ' deprecated ' + this.message + } + + for (var i = 0; i < stack.length; i++) { + str += '\n at ' + callSiteToString(stack[i]) + } + + return str +} + +/** + * Create deprecate for namespace in caller. + */ + +function depd(namespace) { + if (!namespace) { + throw new TypeError('argument namespace is required') + } + + var stack = getStack() + var site = callSiteLocation(stack[1]) + var file = site[0] + + function deprecate(message) { + // call to self as log + log.call(deprecate, message) + } + + deprecate._file = file + deprecate._ignored = isignored(namespace) + deprecate._namespace = namespace + deprecate._traced = istraced(namespace) + deprecate._warned = Object.create(null) + + deprecate.function = wrapfunction + deprecate.property = wrapproperty + + return deprecate +} + +/** + * Determine if namespace is ignored. + */ + +function isignored(namespace) { + /* istanbul ignore next: tested in a child processs */ + if (process.noDeprecation) { + // --no-deprecation support + return true + } + + var str = process.env.NO_DEPRECATION || '' + + // namespace ignored + return containsNamespace(str, namespace) +} + +/** + * Determine if namespace is traced. + */ + +function istraced(namespace) { + /* istanbul ignore next: tested in a child processs */ + if (process.traceDeprecation) { + // --trace-deprecation support + return true + } + + var str = process.env.TRACE_DEPRECATION || '' + + // namespace traced + return containsNamespace(str, namespace) +} + +/** + * Display deprecation message. + */ + +function log(message, site) { + var haslisteners = eventListenerCount(process, 'deprecation') !== 0 + + // abort early if no destination + if (!haslisteners && this._ignored) { + return + } + + var caller + var callFile + var callSite + var i = 0 + var seen = false + var stack = getStack() + var file = this._file + + if (site) { + // provided site + callSite = callSiteLocation(stack[1]) + callSite.name = site.name + file = callSite[0] + } else { + // get call site + i = 2 + site = callSiteLocation(stack[i]) + callSite = site + } + + // get caller of deprecated thing in relation to file + for (; i < stack.length; i++) { + caller = callSiteLocation(stack[i]) + callFile = caller[0] + + if (callFile === file) { + seen = true + } else if (callFile === this._file) { + file = this._file + } else if (seen) { + break + } + } + + var key = caller + ? site.join(':') + '__' + caller.join(':') + : undefined + + if (key !== undefined && key in this._warned) { + // already warned + return + } + + this._warned[key] = true + + // generate automatic message from call site + if (!message) { + message = callSite === site || !callSite.name + ? defaultMessage(site) + : defaultMessage(callSite) + } + + // emit deprecation if listeners exist + if (haslisteners) { + var err = DeprecationError(this._namespace, message, stack.slice(i)) + process.emit('deprecation', err) + return + } + + // format and write message + var format = process.stderr.isTTY + ? formatColor + : formatPlain + var msg = format.call(this, message, caller, stack.slice(i)) + process.stderr.write(msg + '\n', 'utf8') + + return +} + +/** + * Get call site location as array. + */ + +function callSiteLocation(callSite) { + var file = callSite.getFileName() || '' + var line = callSite.getLineNumber() + var colm = callSite.getColumnNumber() + + if (callSite.isEval()) { + file = callSite.getEvalOrigin() + ', ' + file + } + + var site = [file, line, colm] + + site.callSite = callSite + site.name = callSite.getFunctionName() + + return site +} + +/** + * Generate a default message from the site. + */ + +function defaultMessage(site) { + var callSite = site.callSite + var funcName = site.name + var typeName = callSite.getTypeName() + + // make useful anonymous name + if (!funcName) { + funcName = '' + } + + // make useful type name + if (typeName === 'Function') { + typeName = callSite.getThis().name || typeName + } + + return callSite.getMethodName() + ? typeName + '.' + funcName + : funcName +} + +/** + * Format deprecation message without color. + */ + +function formatPlain(msg, caller, stack) { + var timestamp = new Date().toUTCString() + + var formatted = timestamp + + ' ' + this._namespace + + ' deprecated ' + msg + + // add stack trace + if (this._traced) { + for (var i = 0; i < stack.length; i++) { + formatted += '\n at ' + callSiteToString(stack[i]) + } + + return formatted + } + + if (caller) { + formatted += ' at ' + formatLocation(caller) + } + + return formatted +} + +/** + * Format deprecation message with color. + */ + +function formatColor(msg, caller, stack) { + var formatted = '\x1b[36;1m' + this._namespace + '\x1b[22;39m' // bold cyan + + ' \x1b[33;1mdeprecated\x1b[22;39m' // bold yellow + + ' \x1b[0m' + msg + '\x1b[39m' // reset + + // add stack trace + if (this._traced) { + for (var i = 0; i < stack.length; i++) { + formatted += '\n \x1b[36mat ' + callSiteToString(stack[i]) + '\x1b[39m' // cyan + } + + return formatted + } + + if (caller) { + formatted += ' \x1b[36m' + formatLocation(caller) + '\x1b[39m' // cyan + } + + return formatted +} + +/** + * Format call site location. + */ + +function formatLocation(callSite) { + return relative(basePath, callSite[0]) + + ':' + callSite[1] + + ':' + callSite[2] +} + +/** + * Get the stack as array of call sites. + */ + +function getStack() { + var limit = Error.stackTraceLimit + var obj = {} + var prep = Error.prepareStackTrace + + Error.prepareStackTrace = prepareObjectStackTrace + Error.stackTraceLimit = Math.max(10, limit) + + // capture the stack + Error.captureStackTrace(obj) + + // slice this function off the top + var stack = obj.stack.slice(1) + + Error.prepareStackTrace = prep + Error.stackTraceLimit = limit + + return stack +} + +/** + * Capture call site stack from v8. + */ + +function prepareObjectStackTrace(obj, stack) { + return stack +} + +/** + * Return a wrapped function in a deprecation message. + */ + +function wrapfunction(fn, message) { + if (typeof fn !== 'function') { + throw new TypeError('argument fn must be a function') + } + + var args = createArgumentsString(fn.length) + var deprecate = this + var stack = getStack() + var site = callSiteLocation(stack[1]) + + site.name = fn.name + + var deprecatedfn = eval('(function (' + args + ') {\n' + + '"use strict"\n' + + 'log.call(deprecate, message, site)\n' + + 'return fn.apply(this, arguments)\n' + + '})') + + return deprecatedfn +} + +/** + * Wrap property in a deprecation message. + */ + +function wrapproperty(obj, prop, message) { + if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { + throw new TypeError('argument obj must be object') + } + + var descriptor = Object.getOwnPropertyDescriptor(obj, prop) + + if (!descriptor) { + throw new TypeError('must call property on owner object') + } + + if (!descriptor.configurable) { + throw new TypeError('property must be configurable') + } + + var deprecate = this + var stack = getStack() + var site = callSiteLocation(stack[1]) + + // set site name + site.name = prop + + // convert data descriptor + if ('value' in descriptor) { + descriptor = convertDataDescriptorToAccessor(obj, prop, message) + } + + var get = descriptor.get + var set = descriptor.set + + // wrap getter + if (typeof get === 'function') { + descriptor.get = function getter() { + log.call(deprecate, message, site) + return get.apply(this, arguments) + } + } + + // wrap setter + if (typeof set === 'function') { + descriptor.set = function setter() { + log.call(deprecate, message, site) + return set.apply(this, arguments) + } + } + + Object.defineProperty(obj, prop, descriptor) +} + +/** + * Create DeprecationError for deprecation + */ + +function DeprecationError(namespace, message, stack) { + var error = new Error() + var stackString + + Object.defineProperty(error, 'constructor', { + value: DeprecationError + }) + + Object.defineProperty(error, 'message', { + configurable: true, + enumerable: false, + value: message, + writable: true + }) + + Object.defineProperty(error, 'name', { + enumerable: false, + configurable: true, + value: 'DeprecationError', + writable: true + }) + + Object.defineProperty(error, 'namespace', { + configurable: true, + enumerable: false, + value: namespace, + writable: true + }) + + Object.defineProperty(error, 'stack', { + configurable: true, + enumerable: false, + get: function () { + if (stackString !== undefined) { + return stackString + } + + // prepare stack trace + return stackString = createStackString.call(this, stack) + }, + set: function setter(val) { + stackString = val + } + }) + + return error +} diff --git a/node_modules/express-session/node_modules/depd/lib/compat/buffer-concat.js b/node_modules/express-session/node_modules/depd/lib/compat/buffer-concat.js new file mode 100644 index 0000000..09d9721 --- /dev/null +++ b/node_modules/express-session/node_modules/depd/lib/compat/buffer-concat.js @@ -0,0 +1,33 @@ +/*! + * depd + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module exports. + */ + +module.exports = bufferConcat + +/** + * Concatenate an array of Buffers. + */ + +function bufferConcat(bufs) { + var length = 0 + + for (var i = 0, len = bufs.length; i < len; i++) { + length += bufs[i].length + } + + var buf = new Buffer(length) + var pos = 0 + + for (var i = 0, len = bufs.length; i < len; i++) { + bufs[i].copy(buf, pos) + pos += bufs[i].length + } + + return buf +} diff --git a/node_modules/express-session/node_modules/depd/lib/compat/callsite-tostring.js b/node_modules/express-session/node_modules/depd/lib/compat/callsite-tostring.js new file mode 100644 index 0000000..17cf7ed --- /dev/null +++ b/node_modules/express-session/node_modules/depd/lib/compat/callsite-tostring.js @@ -0,0 +1,101 @@ +/*! + * depd + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module exports. + */ + +module.exports = callSiteToString + +/** + * Format a CallSite file location to a string. + */ + +function callSiteFileLocation(callSite) { + var fileName + var fileLocation = '' + + if (callSite.isNative()) { + fileLocation = 'native' + } else if (callSite.isEval()) { + fileName = callSite.getScriptNameOrSourceURL() + if (!fileName) { + fileLocation = callSite.getEvalOrigin() + } + } else { + fileName = callSite.getFileName() + } + + if (fileName) { + fileLocation += fileName + + var lineNumber = callSite.getLineNumber() + if (lineNumber != null) { + fileLocation += ':' + lineNumber + + var columnNumber = callSite.getColumnNumber() + if (columnNumber) { + fileLocation += ':' + columnNumber + } + } + } + + return fileLocation || 'unknown source' +} + +/** + * Format a CallSite to a string. + */ + +function callSiteToString(callSite) { + var addSuffix = true + var fileLocation = callSiteFileLocation(callSite) + var functionName = callSite.getFunctionName() + var isConstructor = callSite.isConstructor() + var isMethodCall = !(callSite.isToplevel() || isConstructor) + var line = '' + + if (isMethodCall) { + var methodName = callSite.getMethodName() + var typeName = getConstructorName(callSite) + + if (functionName) { + if (typeName && functionName.indexOf(typeName) !== 0) { + line += typeName + '.' + } + + line += functionName + + if (methodName && functionName.lastIndexOf('.' + methodName) !== functionName.length - methodName.length - 1) { + line += ' [as ' + methodName + ']' + } + } else { + line += typeName + '.' + (methodName || '') + } + } else if (isConstructor) { + line += 'new ' + (functionName || '') + } else if (functionName) { + line += functionName + } else { + addSuffix = false + line += fileLocation + } + + if (addSuffix) { + line += ' (' + fileLocation + ')' + } + + return line +} + +/** + * Get constructor name of reviver. + */ + +function getConstructorName(obj) { + var receiver = obj.receiver + return (receiver.constructor && receiver.constructor.name) || null +} diff --git a/node_modules/express-session/node_modules/depd/lib/compat/index.js b/node_modules/express-session/node_modules/depd/lib/compat/index.js new file mode 100644 index 0000000..7fee026 --- /dev/null +++ b/node_modules/express-session/node_modules/depd/lib/compat/index.js @@ -0,0 +1,69 @@ +/*! + * depd + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module exports. + */ + +lazyProperty(module.exports, 'bufferConcat', function bufferConcat() { + return Buffer.concat || require('./buffer-concat') +}) + +lazyProperty(module.exports, 'callSiteToString', function callSiteToString() { + var limit = Error.stackTraceLimit + var obj = {} + var prep = Error.prepareStackTrace + + function prepareObjectStackTrace(obj, stack) { + return stack + } + + Error.prepareStackTrace = prepareObjectStackTrace + Error.stackTraceLimit = 2 + + // capture the stack + Error.captureStackTrace(obj) + + // slice the stack + var stack = obj.stack.slice() + + Error.prepareStackTrace = prep + Error.stackTraceLimit = limit + + return stack[0].toString ? toString : require('./callsite-tostring') +}) + +/** + * Define a lazy property. + */ + +function lazyProperty(obj, prop, getter) { + function get() { + var val = getter() + + Object.defineProperty(obj, prop, { + configurable: true, + enumerable: true, + value: val + }) + + return val + } + + Object.defineProperty(obj, prop, { + configurable: true, + enumerable: true, + get: get + }) +} + +/** + * Call toString() on the obj + */ + +function toString(obj) { + return obj.toString() +} diff --git a/node_modules/express-session/node_modules/depd/package.json b/node_modules/express-session/node_modules/depd/package.json new file mode 100644 index 0000000..55a9db0 --- /dev/null +++ b/node_modules/express-session/node_modules/depd/package.json @@ -0,0 +1,67 @@ +{ + "name": "depd", + "description": "Deprecate all the things", + "version": "0.4.5", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "license": "MIT", + "keywords": [ + "deprecate", + "deprecated" + ], + "repository": { + "type": "git", + "url": "https://github.com/dougwilson/nodejs-depd" + }, + "devDependencies": { + "benchmark": "1.0.0", + "beautify-benchmark": "0.2.4", + "istanbul": "0.3.2", + "mocha": "~1.21.4", + "should": "~4.0.4" + }, + "files": [ + "lib/", + "History.md", + "LICENSE", + "index.js", + "Readme.md" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "bench": "node benchmark/index.js", + "test": "mocha --reporter spec --bail --require should test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --require should test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --require should test/" + }, + "gitHead": "e37a15044f7da76b94d8e0d46a6343feb168c82b", + "bugs": { + "url": "https://github.com/dougwilson/nodejs-depd/issues" + }, + "homepage": "https://github.com/dougwilson/nodejs-depd", + "_id": "depd@0.4.5", + "_shasum": "1a664b53388b4a6573e8ae67b5f767c693ca97f1", + "_from": "depd@0.4.5", + "_npmVersion": "1.4.21", + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ], + "dist": { + "shasum": "1a664b53388b4a6573e8ae67b5f767c693ca97f1", + "tarball": "http://registry.npmjs.org/depd/-/depd-0.4.5.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/depd/-/depd-0.4.5.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/express-session/node_modules/on-headers/.npmignore b/node_modules/express-session/node_modules/on-headers/.npmignore new file mode 100644 index 0000000..cd39b77 --- /dev/null +++ b/node_modules/express-session/node_modules/on-headers/.npmignore @@ -0,0 +1,3 @@ +coverage/ +test/ +.travis.yml diff --git a/node_modules/express-session/node_modules/on-headers/History.md b/node_modules/express-session/node_modules/on-headers/History.md new file mode 100644 index 0000000..0e5dc11 --- /dev/null +++ b/node_modules/express-session/node_modules/on-headers/History.md @@ -0,0 +1,11 @@ +1.0.0 / 2014-08-10 +================== + + * Honor `res.statusCode` change in `listener` + * Move to `jshttp` orgainzation + * Prevent `arguments`-related de-opt + +0.0.0 / 2014-05-13 +================== + + * Initial implementation diff --git a/node_modules/express-session/node_modules/on-headers/LICENSE b/node_modules/express-session/node_modules/on-headers/LICENSE new file mode 100644 index 0000000..b7dce6c --- /dev/null +++ b/node_modules/express-session/node_modules/on-headers/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/express-session/node_modules/on-headers/README.md b/node_modules/express-session/node_modules/on-headers/README.md new file mode 100644 index 0000000..627ee93 --- /dev/null +++ b/node_modules/express-session/node_modules/on-headers/README.md @@ -0,0 +1,59 @@ +# on-headers + +[![NPM Version](https://img.shields.io/npm/v/on-headers.svg?style=flat)](https://www.npmjs.org/package/on-headers) +[![Node.js Version](https://img.shields.io/badge/node.js->=_0.8-blue.svg?style=flat)](http://nodejs.org/download/) +[![Build Status](https://img.shields.io/travis/jshttp/on-headers.svg?style=flat)](https://travis-ci.org/jshttp/on-headers) +[![Coverage Status](https://img.shields.io/coveralls/jshttp/on-headers.svg?style=flat)](https://coveralls.io/r/jshttp/on-headers) +[![Gittip](https://img.shields.io/gittip/dougwilson.svg?style=flat)](https://www.gittip.com/dougwilson/) + +Execute a listener when a response is about to write headers. + +## Install + +```sh +$ npm install on-headers +``` + +## API + +```js +var onHeaders = require('on-headers') +``` + +### onHeaders(res, listener) + +This will add the listener `listener` to fire when headers are emitted for `res`. +The listener is passed the `response` object as it's context (`this`). Headers are +considered to be emitted only once, right before they are sent to the client. + +When this is called multiple times on the same `res`, the `listener`s are fired +in the reverse order they were added. + +## Examples + +```js +var http = require('http') +var onHeaders = require('on-headers') + +http +.createServer(onRequest) +.listen(3000) + +function addPoweredBy() { + // add if not set by end of request + if (!this.getHeader('X-Powered-By')) { + this.addHeader('X-Powered-By', 'Node.js') + } +} + +function onRequest(req, res) { + onHeaders(res, addPoweredBy) + + res.setHeader('Content-Type', 'text/plain') + res.end('hello!') +} +``` + +## License + +[MIT](LICENSE) diff --git a/node_modules/express-session/node_modules/on-headers/index.js b/node_modules/express-session/node_modules/on-headers/index.js new file mode 100644 index 0000000..8579f8d --- /dev/null +++ b/node_modules/express-session/node_modules/on-headers/index.js @@ -0,0 +1,91 @@ +/*! + * on-headers + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Reference to Array slice. + */ + +var slice = Array.prototype.slice + +/** + * Execute a listener when a response is about to write headers. + * + * @param {Object} res + * @return {Function} listener + * @api public + */ + +module.exports = function onHeaders(res, listener) { + if (!res) { + throw new TypeError('argument res is required') + } + + if (typeof listener !== 'function') { + throw new TypeError('argument listener must be a function') + } + + res.writeHead = createWriteHead(res.writeHead, listener) +} + +function createWriteHead(prevWriteHead, listener) { + var fired = false; + + // return function with core name and argument list + return function writeHead(statusCode) { + // set headers from arguments + var args = setWriteHeadHeaders.apply(this, arguments); + + // fire listener + if (!fired) { + fired = true + listener.call(this) + + // pass-along an updated status code + if (typeof args[0] === 'number' && this.statusCode !== args[0]) { + args[0] = this.statusCode + args.length = 1 + } + } + + prevWriteHead.apply(this, args); + } +} + +function setWriteHeadHeaders(statusCode) { + var length = arguments.length + var headerIndex = length > 1 && typeof arguments[1] === 'string' + ? 2 + : 1 + + var headers = length >= headerIndex + 1 + ? arguments[headerIndex] + : undefined + + this.statusCode = statusCode + + // the following block is from node.js core + if (Array.isArray(headers)) { + // handle array case + for (var i = 0, len = headers.length; i < len; ++i) { + this.setHeader(headers[i][0], headers[i][1]) + } + } else if (headers) { + // handle object case + var keys = Object.keys(headers) + for (var i = 0; i < keys.length; i++) { + var k = keys[i] + if (k) this.setHeader(k, headers[k]) + } + } + + // copy leading arguments + var args = new Array(Math.min(length, headerIndex)) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + + return args +} diff --git a/node_modules/express-session/node_modules/on-headers/package.json b/node_modules/express-session/node_modules/on-headers/package.json new file mode 100644 index 0000000..458bbb4 --- /dev/null +++ b/node_modules/express-session/node_modules/on-headers/package.json @@ -0,0 +1,59 @@ +{ + "name": "on-headers", + "description": "Execute a listener when a response is about to write headers", + "version": "1.0.0", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "license": "MIT", + "keywords": [ + "event", + "headers", + "http", + "onheaders" + ], + "repository": { + "type": "git", + "url": "https://github.com/jshttp/on-headers" + }, + "dependencies": {}, + "devDependencies": { + "istanbul": "0.3.0", + "mocha": "~1.21.4", + "supertest": "~0.13.0" + }, + "engines": { + "node": ">= 0.8.0" + }, + "scripts": { + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + }, + "gitHead": "434950a0748cd38bf9a04f3fd4f3ff89cf565fda", + "bugs": { + "url": "https://github.com/jshttp/on-headers/issues" + }, + "homepage": "https://github.com/jshttp/on-headers", + "_id": "on-headers@1.0.0", + "_shasum": "2c75b5da4375513d0161c6052e7fcbe4953fca5d", + "_from": "on-headers@~1.0.0", + "_npmVersion": "1.4.21", + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "maintainers": [ + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + } + ], + "dist": { + "shasum": "2c75b5da4375513d0161c6052e7fcbe4953fca5d", + "tarball": "http://registry.npmjs.org/on-headers/-/on-headers-1.0.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.0.tgz" +} diff --git a/node_modules/express-session/node_modules/parseurl/.npmignore b/node_modules/express-session/node_modules/parseurl/.npmignore new file mode 100644 index 0000000..85c82a5 --- /dev/null +++ b/node_modules/express-session/node_modules/parseurl/.npmignore @@ -0,0 +1,4 @@ +benchmark/ +coverage/ +test/ +.travis.yml diff --git a/node_modules/express-session/node_modules/parseurl/HISTORY.md b/node_modules/express-session/node_modules/parseurl/HISTORY.md new file mode 100644 index 0000000..65a0860 --- /dev/null +++ b/node_modules/express-session/node_modules/parseurl/HISTORY.md @@ -0,0 +1,42 @@ +1.3.0 / 2014-08-09 +================== + + * Add `parseurl.original` for parsing `req.originalUrl` with fallback + * Return `undefined` if `req.url` is `undefined` + +1.2.0 / 2014-07-21 +================== + + * Cache URLs based on original value + * Remove no-longer-needed URL mis-parse work-around + * Simplify the "fast-path" `RegExp` + +1.1.3 / 2014-07-08 +================== + + * Fix typo + +1.1.2 / 2014-07-08 +================== + + * Seriously fix Node.js 0.8 compatibility + +1.1.1 / 2014-07-08 +================== + + * Fix Node.js 0.8 compatibility + +1.1.0 / 2014-07-08 +================== + + * Incorporate URL href-only parse fast-path + +1.0.1 / 2014-03-08 +================== + + * Add missing `require` + +1.0.0 / 2014-03-08 +================== + + * Genesis from `connect` diff --git a/node_modules/express-session/node_modules/parseurl/LICENSE b/node_modules/express-session/node_modules/parseurl/LICENSE new file mode 100644 index 0000000..ec7dfe7 --- /dev/null +++ b/node_modules/express-session/node_modules/parseurl/LICENSE @@ -0,0 +1,24 @@ + +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2014 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/express-session/node_modules/parseurl/README.md b/node_modules/express-session/node_modules/parseurl/README.md new file mode 100644 index 0000000..0db1d02 --- /dev/null +++ b/node_modules/express-session/node_modules/parseurl/README.md @@ -0,0 +1,107 @@ +# parseurl + +[![NPM version](https://badge.fury.io/js/parseurl.svg)](http://badge.fury.io/js/parseurl) +[![Build Status](https://travis-ci.org/expressjs/parseurl.svg?branch=master)](https://travis-ci.org/expressjs/parseurl) +[![Coverage Status](https://img.shields.io/coveralls/expressjs/parseurl.svg?branch=master)](https://coveralls.io/r/expressjs/parseurl) + +Parse a URL with memoization. + +## Install + +```bash +$ npm install parseurl +``` + +## API + +```js +var parseurl = require('parseurl') +``` + +### parseurl(req) + +Parse the URL of the given request object (looks at the `req.url` property) +and return the result. The result is the same as `url.parse` in Node.js core. +Calling this function multiple times on the same `req` where `req.url` does +not change will return a cached parsed object, rather than parsing again. + +### parseurl.original(req) + +Parse the original URL of the given request object and return the result. +This works by trying to parse `req.originalUrl` if it is a string, otherwise +parses `req.url`. The result is the same as `url.parse` in Node.js core. +Calling this function multiple times on the same `req` where `req.originalUrl` +does not change will return a cached parsed object, rather than parsing again. + +## Benchmark + +```bash +$ npm run-script bench + +> parseurl@1.3.0 bench nodejs-parseurl +> node benchmark/index.js + +> node benchmark/fullurl.js + + Parsing URL "http://localhost:8888/foo/bar?user=tj&pet=fluffy" + + 1 test completed. + 2 tests completed. + 3 tests completed. + + fasturl x 1,290,780 ops/sec ±0.46% (195 runs sampled) + nativeurl x 56,401 ops/sec ±0.22% (196 runs sampled) + parseurl x 55,231 ops/sec ±0.22% (194 runs sampled) + +> node benchmark/pathquery.js + + Parsing URL "/foo/bar?user=tj&pet=fluffy" + + 1 test completed. + 2 tests completed. + 3 tests completed. + + fasturl x 1,986,668 ops/sec ±0.27% (190 runs sampled) + nativeurl x 98,740 ops/sec ±0.21% (195 runs sampled) + parseurl x 2,628,171 ops/sec ±0.36% (195 runs sampled) + +> node benchmark/samerequest.js + + Parsing URL "/foo/bar?user=tj&pet=fluffy" on same request object + + 1 test completed. + 2 tests completed. + 3 tests completed. + + fasturl x 2,184,468 ops/sec ±0.40% (194 runs sampled) + nativeurl x 99,437 ops/sec ±0.71% (194 runs sampled) + parseurl x 10,498,005 ops/sec ±0.61% (186 runs sampled) + +> node benchmark/simplepath.js + + Parsing URL "/foo/bar" + + 1 test completed. + 2 tests completed. + 3 tests completed. + + fasturl x 4,535,825 ops/sec ±0.27% (191 runs sampled) + nativeurl x 98,769 ops/sec ±0.54% (191 runs sampled) + parseurl x 4,164,865 ops/sec ±0.34% (192 runs sampled) + +> node benchmark/slash.js + + Parsing URL "/" + + 1 test completed. + 2 tests completed. + 3 tests completed. + + fasturl x 4,908,405 ops/sec ±0.42% (191 runs sampled) + nativeurl x 100,945 ops/sec ±0.59% (188 runs sampled) + parseurl x 4,333,208 ops/sec ±0.27% (194 runs sampled) +``` + +## License + + [MIT](LICENSE) diff --git a/node_modules/express-session/node_modules/parseurl/index.js b/node_modules/express-session/node_modules/parseurl/index.js new file mode 100644 index 0000000..8632347 --- /dev/null +++ b/node_modules/express-session/node_modules/parseurl/index.js @@ -0,0 +1,136 @@ +/*! + * parseurl + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var url = require('url') +var parse = url.parse +var Url = url.Url + +/** + * Pattern for a simple path case. + * See: https://github.com/joyent/node/pull/7878 + */ + +var simplePathRegExp = /^(\/\/?(?!\/)[^\?#\s]*)(\?[^#\s]*)?$/ + +/** + * Exports. + */ + +module.exports = parseurl +module.exports.original = originalurl + +/** + * Parse the `req` url with memoization. + * + * @param {ServerRequest} req + * @return {Object} + * @api public + */ + +function parseurl(req) { + var url = req.url + + if (url === undefined) { + // URL is undefined + return undefined + } + + var parsed = req._parsedUrl + + if (fresh(url, parsed)) { + // Return cached URL parse + return parsed + } + + // Parse the URL + parsed = fastparse(url) + parsed._raw = url + + return req._parsedUrl = parsed +}; + +/** + * Parse the `req` original url with fallback and memoization. + * + * @param {ServerRequest} req + * @return {Object} + * @api public + */ + +function originalurl(req) { + var url = req.originalUrl + + if (typeof url !== 'string') { + // Fallback + return parseurl(req) + } + + var parsed = req._parsedOriginalUrl + + if (fresh(url, parsed)) { + // Return cached URL parse + return parsed + } + + // Parse the URL + parsed = fastparse(url) + parsed._raw = url + + return req._parsedOriginalUrl = parsed +}; + +/** + * Parse the `str` url with fast-path short-cut. + * + * @param {string} str + * @return {Object} + * @api private + */ + +function fastparse(str) { + // Try fast path regexp + // See: https://github.com/joyent/node/pull/7878 + var simplePath = typeof str === 'string' && simplePathRegExp.exec(str) + + // Construct simple URL + if (simplePath) { + var pathname = simplePath[1] + var search = simplePath[2] || null + var url = Url !== undefined + ? new Url() + : {} + url.path = str + url.href = str + url.pathname = pathname + url.search = search + url.query = search && search.substr(1) + + return url + } + + return parse(str) +} + +/** + * Determine if parsed is still fresh for url. + * + * @param {string} url + * @param {object} parsedUrl + * @return {boolean} + * @api private + */ + +function fresh(url, parsedUrl) { + return typeof parsedUrl === 'object' + && parsedUrl !== null + && (Url === undefined || parsedUrl instanceof Url) + && parsedUrl._raw === url +} diff --git a/node_modules/express-session/node_modules/parseurl/package.json b/node_modules/express-session/node_modules/parseurl/package.json new file mode 100644 index 0000000..6fbd23e --- /dev/null +++ b/node_modules/express-session/node_modules/parseurl/package.json @@ -0,0 +1,80 @@ +{ + "name": "parseurl", + "description": "parse a url with memoization", + "version": "1.3.0", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + } + ], + "repository": { + "type": "git", + "url": "https://github.com/expressjs/parseurl" + }, + "license": "MIT", + "devDependencies": { + "benchmark": "1.0.0", + "beautify-benchmark": "0.2.4", + "fast-url-parser": "~1.0.0", + "istanbul": "0.3.0", + "mocha": "~1.21.4" + }, + "scripts": { + "bench": "node benchmark/index.js", + "test": "mocha --check-leaks --bail --reporter spec test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --check-leaks --reporter dot test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --check-leaks --reporter spec test/" + }, + "gitHead": "03b7ccca240e2bef5df6c25797e99175d28fb2cb", + "bugs": { + "url": "https://github.com/expressjs/parseurl/issues" + }, + "homepage": "https://github.com/expressjs/parseurl", + "_id": "parseurl@1.3.0", + "_shasum": "b58046db4223e145afa76009e61bac87cc2281b3", + "_from": "parseurl@~1.3.0", + "_npmVersion": "1.4.21", + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "maintainers": [ + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + { + "name": "shtylman", + "email": "shtylman@gmail.com" + }, + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + }, + { + "name": "mscdex", + "email": "mscdex@mscdex.net" + }, + { + "name": "fishrock123", + "email": "fishrock123@rocketmail.com" + } + ], + "dist": { + "shasum": "b58046db4223e145afa76009e61bac87cc2281b3", + "tarball": "http://registry.npmjs.org/parseurl/-/parseurl-1.3.0.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.0.tgz", + "readme": "ERROR: No README data found!" +} diff --git a/node_modules/express-session/node_modules/uid-safe/.npmignore b/node_modules/express-session/node_modules/uid-safe/.npmignore new file mode 100644 index 0000000..72921ab --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/.npmignore @@ -0,0 +1,2 @@ +.DS_Store* +node_modules diff --git a/node_modules/express-session/node_modules/uid-safe/LICENSE b/node_modules/express-session/node_modules/uid-safe/LICENSE new file mode 100644 index 0000000..a7ae8ee --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/express-session/node_modules/uid-safe/README.md b/node_modules/express-session/node_modules/uid-safe/README.md new file mode 100644 index 0000000..2178c6c --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/README.md @@ -0,0 +1,44 @@ + +# UID Safe + +Create cryptographically secure UIDs safe for both cookie and URL usage. +This is in contrast to modules such as [rand-token](https://github.com/sehrope/node-rand-token) +and [uid2](https://github.com/coreh/uid2) whose UIDs are actually skewed +due to the use of `%` and unnecessarily truncate the UID. +Use this if you could still use UIDs with `-` and `_` in them. + +## API + +```js +var uid = require('uid-safe') +``` + +### uid(byteLength, [cb]) + +Asynchronously create a UID with a specific byte length. +Because `base64` encoding is used underneath, this is not the string length! +For example, to create a UID of length 24, you want a byte length of 18! + +If `cb` is not defined, a promise is returned. +However, to use promises, you must either install [bluebird](https://github.com/petkaantonov/bluebird) +or use a version of node.js that has native promises, +otherwise your process will crash and die. + +```js +uid(18).then(function (string) { + // do something with the string +}) + +uid(18, function (err, string) { + if (err) throw err + // do something with the string +}) +``` + +### uid.sync(byteLength) + +A synchronous version of above. + +```js +var string = uid.sync(18) +``` diff --git a/node_modules/express-session/node_modules/uid-safe/index.js b/node_modules/express-session/node_modules/uid-safe/index.js new file mode 100644 index 0000000..9e26461 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/index.js @@ -0,0 +1,27 @@ + +var pseudoRandomBytes = require('crypto').pseudoRandomBytes +var escape = require('base64-url').escape + +var pseudoRandomBytesProm + +module.exports = uid + +function uid(length, cb) { + if (cb) { + return pseudoRandomBytes(length, function (err, buf) { + if (err) return cb(err) + cb(null, escapeBuffer(buf)) + }) + } + + pseudoRandomBytesProm || (pseudoRandomBytesProm = require('mz/crypto').pseudoRandomBytes) + return pseudoRandomBytesProm(length).then(escapeBuffer) +} + +uid.sync = function uid_sync(length) { + return escapeBuffer(pseudoRandomBytes(length)) +} + +function escapeBuffer(buf) { + return escape(buf.toString('base64')) +} diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/.npmignore b/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/.npmignore new file mode 100644 index 0000000..b0e8ee7 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/.npmignore @@ -0,0 +1,12 @@ +.*.swp +._* +.DS_Store +.git +.hg +.lock-wscript +.svn +.wafpickle-* +CVS +npm-debug.log +*.sublime-project +*.sublime-workspace \ No newline at end of file diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/.travis.yml b/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/.travis.yml new file mode 100644 index 0000000..9c52355 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/.travis.yml @@ -0,0 +1,12 @@ + language: node_js + node_js: + - "0.11" + - "0.10" + - "0.8" + branches: + only: + - master + notifications: + email: + - joaquim.serafim@gmail.com + script: npm test diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/LICENSE b/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/LICENSE new file mode 100644 index 0000000..da1b624 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Joaquim José F. Serafim + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/README.md b/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/README.md new file mode 100644 index 0000000..aa34ec8 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/README.md @@ -0,0 +1,27 @@ +# base64-url + +Base64 encode, decode, escape and unescape for URL applications. + + + +[![Build Status](https://travis-ci.org/joaquimserafim/base64-url.png?branch=master)](https://travis-ci.org/joaquimserafim/base64-url) + + + +**V1** + + +####API + + > base64url.encode('Node.js is awesome.'); + Tm9kZS5qcyBpcyBhd2Vzb21lLg + + > base64url.decode('Tm9kZS5qcyBpcyBhd2Vzb21lLg'); + Node.js is awesome. + + > base64url.escape(This+is/goingto+escape==); + This-is_goingto-escape + + > base64url.unescape('This-is_goingto-escape'); + This+is/goingto+escape== + \ No newline at end of file diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/index.js b/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/index.js new file mode 100644 index 0000000..c5547ee --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/index.js @@ -0,0 +1,17 @@ +var base64url = exports; + +base64url.unescape = function unescape (str) { + return (str + Array(5 - str.length % 4).join('=')).replace(/\-/g,'+').replace(/_/g, '/'); +}; + +base64url.escape = function escape (str) { + return str.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, ''); +}; + +base64url.encode = function encode (str) { + return this.escape(new Buffer(str).toString('base64')); +}; + +base64url.decode = function decode (str) { + return new Buffer(this.unescape(str), 'base64').toString(); +}; diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/package.json b/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/package.json new file mode 100644 index 0000000..ef72acb --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/package.json @@ -0,0 +1,50 @@ +{ + "name": "base64-url", + "version": "1.0.0", + "description": "Base64 encode, decode, escape and unescape for URL applications", + "main": "index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "node test" + }, + "repository": { + "type": "git", + "url": "git://github.com/joaquimserafim/base64-url.git" + }, + "keywords": [ + "base64", + "base64url" + ], + "author": { + "name": "@joaquimserafim" + }, + "license": "ISC", + "bugs": { + "url": "https://github.com/joaquimserafim/base64-url/issues" + }, + "homepage": "https://github.com/joaquimserafim/base64-url", + "devDependencies": { + "tape": "^2.12.3" + }, + "_id": "base64-url@1.0.0", + "_shasum": "ab694376f2801af6c9260899ffef02f86b40ee2c", + "_from": "base64-url@1", + "_npmVersion": "1.4.9", + "_npmUser": { + "name": "quim", + "email": "joaquim.serafim@gmail.com" + }, + "maintainers": [ + { + "name": "quim", + "email": "joaquim.serafim@gmail.com" + } + ], + "dist": { + "shasum": "ab694376f2801af6c9260899ffef02f86b40ee2c", + "tarball": "http://registry.npmjs.org/base64-url/-/base64-url-1.0.0.tgz" + }, + "_resolved": "https://registry.npmjs.org/base64-url/-/base64-url-1.0.0.tgz" +} diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/test/index.js b/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/test/index.js new file mode 100644 index 0000000..1c3c4ed --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/base64-url/test/index.js @@ -0,0 +1,24 @@ +var test = require('tape'); +var base64url = require('../'); + + +test('base64url', function (t) { + t.plan(4); + + var text = 'Node.js is awesome.'; + + var encode = base64url.encode(text); + t.ok(encode, 'encode: ' + encode); + + var decode = base64url.decode(encode); + t.deepEqual(decode, text, 'decode: ' + decode); + + var text_escape = 'This+is/goingto+escape=='; + console.log(text_escape); + + var escape = base64url.escape(text_escape); + t.equal(escape.match(/\+|\//g), null, 'escape (omit + and /): ' + escape); + + var unescape = base64url.unescape(escape); + t.equal(unescape.match(/\-|_/g), null, 'unescape (back to first form): ' + unescape); +}); diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/.npmignore b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/.npmignore new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/.npmignore @@ -0,0 +1 @@ +test diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/.travis.yml b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/.travis.yml new file mode 100644 index 0000000..80407d8 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/.travis.yml @@ -0,0 +1,7 @@ +node_js: +- "0.8" +- "0.10" +- "0.11" +language: node_js +script: "npm run test-travis" +after_script: "npm install coveralls@2 && cat ./coverage/lcov.info | coveralls" diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/HISTORY.md b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/HISTORY.md new file mode 100644 index 0000000..57d20a0 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/HISTORY.md @@ -0,0 +1,6 @@ + +1.0.0 / 2014-06-18 +================== + + * use `bluebird` by default if found + * support node 0.8 diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/LICENSE b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/LICENSE new file mode 100644 index 0000000..a7ae8ee --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/README.md b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/README.md new file mode 100644 index 0000000..6c931c3 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/README.md @@ -0,0 +1,114 @@ + +# MZ - Modernize node.js + +[![NPM version][npm-image]][npm-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] +[![Dependency Status][david-image]][david-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] +[![Gittip][gittip-image]][gittip-url] + +Modernize node.js to current ECMAScript specifications! +node.js will not update their API to ES6+ [for a while](https://github.com/joyent/node/issues/7549). +This library is a wrapper for various aspects of node.js' API. + +## Installation and Usage + +Set `mz` as a dependency and install it. + +```bash +npm i mz +``` + +Then prefix the relevant `require()`s with `mz/`: + +```js +var fs = require('mz/fs') + +fs.exists(__filename).then(function (exists) { + if (exists) // do something +}) +``` + +Personally, I use this with generator-based control flow libraries such as [co](https://github.com/visionmedia/co) so I don't need to use implementation-specific wrappers like [co-fs](https://github.com/visionmedia/co-fs). + +```js +var co = require('co') +var fs = require('mz/fs') + +co(function* () { + if (yield fs.exists(__filename)) // do something +})() +``` + +## Promisification + +Many node methods are converted into promises. +Any properties that are deprecated or aren't asynchronous will simply be proxied. +The modules wrapped are: + +- `child_process` +- `crypto` +- `dns` +- `fs` +- `zlib` + +```js +var exec = require('mz/child_process').exec + +exec('node --version').then(function (stdout) { + console.log(stdout) +}) +``` + +## Promise Engine + +If you've installed [bluebird][bluebird], +[bluebird][bluebird] will be used. +`mz` does not install [bluebird][bluebird] for you. + +Otherwise, if you're using a node that has native v8 Promises (v0.11.13+), +then that will be used. + +Otherwise, this library will crash the process and exit, +so you might as well install [bluebird][bluebird] as a dependency! + +## FAQ + +### Can I use this in production? + +If you do, you should probably install [bluebird][bluebird] as +native v8 promises are still pretty raw. + +### Will this make my app faster? + +Nope, probably slower actually. + +### Can I add more features? + +Sure. +Open an issue. + +Currently, the plans are to eventually support: + +- ECMAScript7 Streams + +[bluebird]: https://github.com/petkaantonov/bluebird + +[npm-image]: https://img.shields.io/npm/v/mz.svg?style=flat-square +[npm-url]: https://npmjs.org/package/mz +[github-tag]: http://img.shields.io/github/tag/normalize/mz.svg?style=flat-square +[github-url]: https://github.com/normalize/mz/tags +[travis-image]: https://img.shields.io/travis/normalize/mz.svg?style=flat-square +[travis-url]: https://travis-ci.org/normalize/mz +[coveralls-image]: https://img.shields.io/coveralls/normalize/mz.svg?style=flat-square +[coveralls-url]: https://coveralls.io/r/normalize/mz?branch=master +[david-image]: http://img.shields.io/david/normalize/mz.svg?style=flat-square +[david-url]: https://david-dm.org/normalize/mz +[license-image]: http://img.shields.io/npm/l/mz.svg?style=flat-square +[license-url]: LICENSE.md +[downloads-image]: http://img.shields.io/npm/dm/mz.svg?style=flat-square +[downloads-url]: https://npmjs.org/package/mz +[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square +[gittip-url]: https://www.gittip.com/jonathanong/ diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/_promisify.js b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/_promisify.js new file mode 100644 index 0000000..5329a16 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/_promisify.js @@ -0,0 +1,34 @@ + +var Promise = require('native-or-bluebird') + +module.exports = function mz_promisify(name, fn) { + return eval('(function ' + name + '() {\n' + + 'var len = arguments.length\n' + + 'var args = new Array(len + 1)\n' + + 'for (var i = 0; i < len; ++i) args[i] = arguments[i]\n' + + 'var lastIndex = i\n' + + 'return new Promise(function (resolve, reject) {\n' + + 'args[lastIndex] = makeCallback(resolve, reject)\n' + + 'fn.apply(null, args)\n' + + '})\n' + + '})') +} + +function makeCallback(resolve, reject) { + return function(err, value) { + if (err) { + reject(err) + } else { + var len = arguments.length + if (len > 2) { + var values = new Array(len - 1) + for (var i = 1; i < len; ++i) { + values[i - 1] = arguments[i] + } + resolve(values) + } else { + resolve(value) + } + } + } +} diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/_promisify_all.js b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/_promisify_all.js new file mode 100644 index 0000000..1edb209 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/_promisify_all.js @@ -0,0 +1,24 @@ + +var promisify = require('./_promisify.js') + +module.exports = function (source, exports, methods) { + methods.forEach(function (name) { + if (deprecated(source, name)) return + if (typeof source[name] === 'function') + exports[name] = promisify(name, source[name]) + }) + + // proxy the rest + Object.keys(source).forEach(function (name) { + if (deprecated(source, name)) return + if (exports[name]) return + exports[name] = source[name] + }) +} + +function deprecated(source, name) { + var desc = Object.getOwnPropertyDescriptor(source, name) + if (!desc || !desc.get) return false + if (desc.get.name === 'deprecated') return true + return false +} diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/child_process.js b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/child_process.js new file mode 100644 index 0000000..a4b5162 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/child_process.js @@ -0,0 +1,8 @@ + +require('./_promisify_all')( + require('child_process'), + exports, [ + 'exec', + 'execFile', + ] +) diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/coverage.json b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/coverage.json new file mode 100644 index 0000000..3a35a88 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/coverage.json @@ -0,0 +1 @@ +{"/Users/jong/Workspace/mz/fs.js":{"path":"/Users/jong/Workspace/mz/fs.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"b":{},"f":{"1":1,"2":1},"fnMap":{"1":{"name":"exists","line":38,"loc":{"start":{"line":38,"column":37},"end":{"line":38,"column":69}}},"2":{"name":"(anonymous_2)","line":39,"loc":{"start":{"line":39,"column":20},"end":{"line":39,"column":35}}}},"statementMap":{"1":{"start":{"line":2,"column":0},"end":{"line":4,"column":0}},"2":{"start":{"line":4,"column":0},"end":{"line":35,"column":0}},"3":{"start":{"line":35,"column":0},"end":{"line":38,"column":0}},"4":{"start":{"line":38,"column":0},"end":{"line":44,"column":0}},"5":{"start":{"line":39,"column":2},"end":{"line":42,"column":0}},"6":{"start":{"line":40,"column":4},"end":{"line":41,"column":2}}},"branchMap":{}},"/Users/jong/Workspace/mz/_promisify_all.js":{"path":"/Users/jong/Workspace/mz/_promisify_all.js","s":{"1":1,"2":1,"3":4,"4":40,"5":0,"6":40,"7":40,"8":4,"9":189,"10":2,"11":187,"12":40,"13":147,"14":1,"15":229,"16":229,"17":227,"18":2,"19":2,"20":0},"b":{"1":[0,40],"2":[40,0],"3":[2,187],"4":[40,147],"5":[227,2],"6":[229,229],"7":[2,0]},"f":{"1":4,"2":40,"3":189,"4":229},"fnMap":{"1":{"name":"(anonymous_1)","line":4,"loc":{"start":{"line":4,"column":17},"end":{"line":4,"column":53}}},"2":{"name":"(anonymous_2)","line":5,"loc":{"start":{"line":5,"column":18},"end":{"line":5,"column":34}}},"3":{"name":"(anonymous_3)","line":12,"loc":{"start":{"line":12,"column":30},"end":{"line":12,"column":46}}},"4":{"name":"deprecated","line":19,"loc":{"start":{"line":19,"column":0},"end":{"line":19,"column":34}}}},"statementMap":{"1":{"start":{"line":2,"column":0},"end":{"line":4,"column":0}},"2":{"start":{"line":4,"column":0},"end":{"line":19,"column":0}},"3":{"start":{"line":5,"column":2},"end":{"line":12,"column":2}},"4":{"start":{"line":6,"column":4},"end":{"line":6,"column":40}},"5":{"start":{"line":6,"column":34},"end":{"line":6,"column":40}},"6":{"start":{"line":7,"column":4},"end":{"line":9,"column":2}},"7":{"start":{"line":8,"column":6},"end":{"line":9,"column":2}},"8":{"start":{"line":12,"column":2},"end":{"line":17,"column":0}},"9":{"start":{"line":13,"column":4},"end":{"line":13,"column":40}},"10":{"start":{"line":13,"column":34},"end":{"line":13,"column":40}},"11":{"start":{"line":14,"column":4},"end":{"line":14,"column":29}},"12":{"start":{"line":14,"column":23},"end":{"line":14,"column":29}},"13":{"start":{"line":15,"column":4},"end":{"line":16,"column":2}},"14":{"start":{"line":19,"column":0},"end":{"line":24,"column":1}},"15":{"start":{"line":20,"column":2},"end":{"line":21,"column":2}},"16":{"start":{"line":21,"column":2},"end":{"line":22,"column":2}},"17":{"start":{"line":21,"column":26},"end":{"line":22,"column":2}},"18":{"start":{"line":22,"column":2},"end":{"line":23,"column":2}},"19":{"start":{"line":22,"column":38},"end":{"line":23,"column":2}},"20":{"start":{"line":23,"column":2},"end":{"line":24,"column":0}}},"branchMap":{"1":{"line":6,"type":"if","locations":[{"start":{"line":6,"column":4},"end":{"line":6,"column":4}},{"start":{"line":6,"column":4},"end":{"line":6,"column":4}}]},"2":{"line":7,"type":"if","locations":[{"start":{"line":7,"column":4},"end":{"line":7,"column":4}},{"start":{"line":7,"column":4},"end":{"line":7,"column":4}}]},"3":{"line":13,"type":"if","locations":[{"start":{"line":13,"column":4},"end":{"line":13,"column":4}},{"start":{"line":13,"column":4},"end":{"line":13,"column":4}}]},"4":{"line":14,"type":"if","locations":[{"start":{"line":14,"column":4},"end":{"line":14,"column":4}},{"start":{"line":14,"column":4},"end":{"line":14,"column":4}}]},"5":{"line":21,"type":"if","locations":[{"start":{"line":21,"column":2},"end":{"line":21,"column":2}},{"start":{"line":21,"column":2},"end":{"line":21,"column":2}}]},"6":{"line":21,"type":"binary-expr","locations":[{"start":{"line":21,"column":6},"end":{"line":21,"column":11}},{"start":{"line":21,"column":15},"end":{"line":21,"column":24}}]},"7":{"line":22,"type":"if","locations":[{"start":{"line":22,"column":2},"end":{"line":22,"column":2}},{"start":{"line":22,"column":2},"end":{"line":22,"column":2}}]}}},"/Users/jong/Workspace/mz/_promisify.js":{"path":"/Users/jong/Workspace/mz/_promisify.js","s":{"1":1,"2":1,"3":45,"4":1,"5":10,"6":10,"7":3,"8":7,"9":7,"10":1,"11":1,"12":2,"13":1,"14":6},"b":{"1":[3,7],"2":[1,6]},"f":{"1":45,"2":10,"3":10},"fnMap":{"1":{"name":"mz_promisify","line":4,"loc":{"start":{"line":4,"column":17},"end":{"line":4,"column":49}}},"2":{"name":"makeCallback","line":17,"loc":{"start":{"line":17,"column":0},"end":{"line":17,"column":39}}},"3":{"name":"(anonymous_3)","line":18,"loc":{"start":{"line":18,"column":9},"end":{"line":18,"column":30}}}},"statementMap":{"1":{"start":{"line":2,"column":0},"end":{"line":4,"column":0}},"2":{"start":{"line":4,"column":0},"end":{"line":17,"column":0}},"3":{"start":{"line":5,"column":2},"end":{"line":15,"column":0}},"4":{"start":{"line":17,"column":0},"end":{"line":34,"column":1}},"5":{"start":{"line":18,"column":2},"end":{"line":34,"column":0}},"6":{"start":{"line":19,"column":4},"end":{"line":32,"column":5}},"7":{"start":{"line":20,"column":6},"end":{"line":21,"column":4}},"8":{"start":{"line":22,"column":6},"end":{"line":23,"column":6}},"9":{"start":{"line":23,"column":6},"end":{"line":31,"column":7}},"10":{"start":{"line":24,"column":8},"end":{"line":25,"column":8}},"11":{"start":{"line":25,"column":8},"end":{"line":27,"column":9}},"12":{"start":{"line":26,"column":10},"end":{"line":27,"column":8}},"13":{"start":{"line":28,"column":8},"end":{"line":29,"column":6}},"14":{"start":{"line":30,"column":8},"end":{"line":31,"column":6}}},"branchMap":{"1":{"line":19,"type":"if","locations":[{"start":{"line":19,"column":4},"end":{"line":19,"column":4}},{"start":{"line":19,"column":4},"end":{"line":19,"column":4}}]},"2":{"line":23,"type":"if","locations":[{"start":{"line":23,"column":6},"end":{"line":23,"column":6}},{"start":{"line":23,"column":6},"end":{"line":23,"column":6}}]}}},"/Users/jong/Workspace/mz/child_process.js":{"path":"/Users/jong/Workspace/mz/child_process.js","s":{"1":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":2,"column":0},"end":{"line":10,"column":0}}},"branchMap":{}},"/Users/jong/Workspace/mz/crypto.js":{"path":"/Users/jong/Workspace/mz/crypto.js","s":{"1":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":2,"column":0},"end":{"line":11,"column":0}}},"branchMap":{}},"/Users/jong/Workspace/mz/zlib.js":{"path":"/Users/jong/Workspace/mz/zlib.js","s":{"1":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":2,"column":0},"end":{"line":15,"column":0}}},"branchMap":{}}} \ No newline at end of file diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/index.html b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/index.html new file mode 100644 index 0000000..7d6d0e1 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/index.html @@ -0,0 +1,350 @@ + + + + Code coverage report for All files + + + + + + + +
+

Code coverage report for All files

+

+ + Statements: 95.35% (41 / 43)      + + + Branches: 83.33% (15 / 18)      + + + Functions: 100% (9 / 9)      + + + Lines: 97.37% (37 / 38)      + + Ignored: none      +

+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
mz/95.35%(41 / 43)83.33%(15 / 18)100%(9 / 9)97.37%(37 / 38)
+
+
+ + + + + + + + diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/_promisify.js.html b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/_promisify.js.html new file mode 100644 index 0000000..2ef2929 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/_promisify.js.html @@ -0,0 +1,424 @@ + + + + Code coverage report for mz/_promisify.js + + + + + + + +
+

Code coverage report for mz/_promisify.js

+

+ + Statements: 100% (14 / 14)      + + + Branches: 100% (4 / 4)      + + + Functions: 100% (3 / 3)      + + + Lines: 100% (14 / 14)      + + Ignored: none      +

+
All files » mz/ » _promisify.js
+
+
+

+
+
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 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35  +1 +  +1 +45 +  +  +  +  +  +  +  +  +  +  +  +1 +10 +10 +3 +  +7 +7 +1 +1 +2 +  +1 +  +6 +  +  +  +  + 
 
+var Promise = require('native-or-bluebird')
+ 
+module.exports = function mz_promisify(name, fn) {
+  return eval('(function ' + name + '() {\n'
+    + 'var len = arguments.length\n'
+    + 'var args = new Array(len + 1)\n'
+    + 'for (var i = 0; i < len; ++i) args[i] = arguments[i]\n'
+    + 'var lastIndex = i\n'
+    + 'return new Promise(function (resolve, reject) {\n'
+      + 'args[lastIndex] = makeCallback(resolve, reject)\n'
+      + 'fn.apply(null, args)\n'
+    + '})\n'
+  + '})')
+}
+ 
+function makeCallback(resolve, reject) {
+  return function(err, value) {
+    if (err) {
+      reject(err)
+    } else {
+      var len = arguments.length
+      if (len > 2) {
+        var values = new Array(len - 1)
+        for (var i = 1; i < len; ++i) {
+          values[i - 1] = arguments[i]
+        }
+        resolve(values)
+      } else {
+        resolve(value)
+      }
+    }
+  }
+}
+ 
+ +
+ + + + + + + + diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/_promisify_all.js.html b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/_promisify_all.js.html new file mode 100644 index 0000000..7c6fe8a --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/_promisify_all.js.html @@ -0,0 +1,394 @@ + + + + Code coverage report for mz/_promisify_all.js + + + + + + + +
+

Code coverage report for mz/_promisify_all.js

+

+ + Statements: 90% (18 / 20)      + + + Branches: 78.57% (11 / 14)      + + + Functions: 100% (4 / 4)      + + + Lines: 93.33% (14 / 15)      + + Ignored: none      +

+
All files » mz/ » _promisify_all.js
+
+
+

+
+
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  +1 +  +1 +4 +40 +40 +40 +  +  +  +4 +189 +187 +147 +  +  +  +1 +229 +229 +2 +  +  + 
 
+var promisify = require('./_promisify.js')
+ 
+module.exports = function (source, exports, methods) {
+  methods.forEach(function (name) {
+    Iif (deprecated(source, name)) return
+    Eif (typeof source[name] === 'function')
+      exports[name] = promisify(name, source[name])
+  })
+ 
+  // proxy the rest
+  Object.keys(source).forEach(function (name) {
+    if (deprecated(source, name)) return
+    if (exports[name]) return
+    exports[name] = source[name]
+  })
+}
+ 
+function deprecated(source, name) {
+  var desc = Object.getOwnPropertyDescriptor(source, name)
+  if (!desc || !desc.get) return false
+  Eif (desc.get.name === 'deprecated') return true
+  return false
+}
+ 
+ +
+ + + + + + + + diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/child_process.js.html b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/child_process.js.html new file mode 100644 index 0000000..aa2195e --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/child_process.js.html @@ -0,0 +1,346 @@ + + + + Code coverage report for mz/child_process.js + + + + + + + +
+

Code coverage report for mz/child_process.js

+

+ + Statements: 100% (1 / 1)      + + + Branches: 100% (0 / 0)      + + + Functions: 100% (0 / 0)      + + + Lines: 100% (1 / 1)      + + Ignored: none      +

+
All files » mz/ » child_process.js
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9  +1 +  +  +  +  +  +  + 
 
+require('./_promisify_all')(
+  require('child_process'),
+  exports, [
+    'exec',
+    'execFile',
+  ]
+)
+ 
+ +
+ + + + + + + + diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/crypto.js.html b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/crypto.js.html new file mode 100644 index 0000000..5f0eeb0 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/crypto.js.html @@ -0,0 +1,349 @@ + + + + Code coverage report for mz/crypto.js + + + + + + + +
+

Code coverage report for mz/crypto.js

+

+ + Statements: 100% (1 / 1)      + + + Branches: 100% (0 / 0)      + + + Functions: 100% (0 / 0)      + + + Lines: 100% (1 / 1)      + + Ignored: none      +

+
All files » mz/ » crypto.js
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10  +1 +  +  +  +  +  +  +  + 
 
+require('./_promisify_all')(
+  require('crypto'),
+  exports, [
+    'pbkdf2',
+    'randomBytes',
+    'pseudoRandomBytes',
+  ]
+)
+ 
+ +
+ + + + + + + + diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/fs.js.html b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/fs.js.html new file mode 100644 index 0000000..bf373d2 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/fs.js.html @@ -0,0 +1,448 @@ + + + + Code coverage report for mz/fs.js + + + + + + + +
+

Code coverage report for mz/fs.js

+

+ + Statements: 100% (6 / 6)      + + + Branches: 100% (0 / 0)      + + + Functions: 100% (2 / 2)      + + + Lines: 100% (6 / 6)      + + Ignored: none      +

+
All files » mz/ » fs.js
+
+
+

+
+
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 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43  +1 +  +1 +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1 +  +  +1 +1 +1 +  +  + 
 
+var fs = require('fs')
+ 
+require('./_promisify_all.js')(fs, exports, [
+  'rename',
+  'ftruncate',
+  'chown',
+  'fchown',
+  'lchown',
+  'chmod',
+  'fchmod',
+  'stat',
+  'lstat',
+  'fstat',
+  'link',
+  'symlink',
+  'readlink',
+  'realpath',
+  'unlink',
+  'rmdir',
+  'mkdir',
+  'readdir',
+  'close',
+  'open',
+  'utimes',
+  'futimes',
+  'fsync',
+  'write',
+  'read',
+  'readFile',
+  'writeFile',
+  'appendFile',
+])
+ 
+var promisify = require('./_promisify.js')
+ 
+// don't know enough about promises to do this haha
+exports.exists = promisify('exists', function exists(filename, done) {
+  fs.stat(filename, function (err) {
+    done(null, !err)
+  })
+})
+ 
+ +
+ + + + + + + + diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/index.html b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/index.html new file mode 100644 index 0000000..4db2982 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/index.html @@ -0,0 +1,415 @@ + + + + Code coverage report for mz/ + + + + + + + +
+

Code coverage report for mz/

+

+ + Statements: 95.35% (41 / 43)      + + + Branches: 83.33% (15 / 18)      + + + Functions: 100% (9 / 9)      + + + Lines: 97.37% (37 / 38)      + + Ignored: none      +

+
All files » mz/
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
_promisify.js100%(14 / 14)100%(4 / 4)100%(3 / 3)100%(14 / 14)
_promisify_all.js90%(18 / 20)78.57%(11 / 14)100%(4 / 4)93.33%(14 / 15)
child_process.js100%(1 / 1)100%(0 / 0)100%(0 / 0)100%(1 / 1)
crypto.js100%(1 / 1)100%(0 / 0)100%(0 / 0)100%(1 / 1)
fs.js100%(6 / 6)100%(0 / 0)100%(2 / 2)100%(6 / 6)
zlib.js100%(1 / 1)100%(0 / 0)100%(0 / 0)100%(1 / 1)
+
+
+ + + + + + + + diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/zlib.js.html b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/zlib.js.html new file mode 100644 index 0000000..4f2c9d2 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/mz/zlib.js.html @@ -0,0 +1,361 @@ + + + + Code coverage report for mz/zlib.js + + + + + + + +
+

Code coverage report for mz/zlib.js

+

+ + Statements: 100% (1 / 1)      + + + Branches: 100% (0 / 0)      + + + Functions: 100% (0 / 0)      + + + Lines: 100% (1 / 1)      + + Ignored: none      +

+
All files » mz/ » zlib.js
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14  +1 +  +  +  +  +  +  +  +  +  +  +  + 
 
+require('./_promisify_all')(
+  require('zlib'),
+  exports, [
+    'deflate',
+    'deflateRaw',
+    'gzip',
+    'gunzip',
+    'inflate',
+    'inflateRaw',
+    'unzip',
+  ]
+)
+ 
+ +
+ + + + + + + + diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/prettify.css b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/prettify.css new file mode 100644 index 0000000..b317a7c --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/prettify.js b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/prettify.js new file mode 100644 index 0000000..ef51e03 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov-report/prettify.js @@ -0,0 +1 @@ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov.info b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov.info new file mode 100644 index 0000000..08f9a33 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/coverage/lcov.info @@ -0,0 +1,128 @@ +TN: +SF:/Users/jong/Workspace/mz/fs.js +FN:38,exists +FN:39,(anonymous_2) +FNF:2 +FNH:2 +FNDA:1,exists +FNDA:1,(anonymous_2) +DA:2,1 +DA:4,1 +DA:35,1 +DA:38,1 +DA:39,1 +DA:40,1 +LF:6 +LH:6 +BRF:0 +BRH:0 +end_of_record +TN: +SF:/Users/jong/Workspace/mz/_promisify_all.js +FN:4,(anonymous_1) +FN:5,(anonymous_2) +FN:12,(anonymous_3) +FN:19,deprecated +FNF:4 +FNH:4 +FNDA:4,(anonymous_1) +FNDA:40,(anonymous_2) +FNDA:189,(anonymous_3) +FNDA:229,deprecated +DA:2,1 +DA:4,1 +DA:5,4 +DA:6,40 +DA:7,40 +DA:8,40 +DA:12,4 +DA:13,189 +DA:14,187 +DA:15,147 +DA:19,1 +DA:20,229 +DA:21,229 +DA:22,2 +DA:23,0 +LF:15 +LH:14 +BRDA:6,1,0,0 +BRDA:6,1,1,40 +BRDA:7,2,0,40 +BRDA:7,2,1,0 +BRDA:13,3,0,2 +BRDA:13,3,1,187 +BRDA:14,4,0,40 +BRDA:14,4,1,147 +BRDA:21,5,0,227 +BRDA:21,5,1,2 +BRDA:21,6,0,229 +BRDA:21,6,1,229 +BRDA:22,7,0,2 +BRDA:22,7,1,0 +BRF:14 +BRH:11 +end_of_record +TN: +SF:/Users/jong/Workspace/mz/_promisify.js +FN:4,mz_promisify +FN:17,makeCallback +FN:18,(anonymous_3) +FNF:3 +FNH:3 +FNDA:45,mz_promisify +FNDA:10,makeCallback +FNDA:10,(anonymous_3) +DA:2,1 +DA:4,1 +DA:5,45 +DA:17,1 +DA:18,10 +DA:19,10 +DA:20,3 +DA:22,7 +DA:23,7 +DA:24,1 +DA:25,1 +DA:26,2 +DA:28,1 +DA:30,6 +LF:14 +LH:14 +BRDA:19,1,0,3 +BRDA:19,1,1,7 +BRDA:23,2,0,1 +BRDA:23,2,1,6 +BRF:4 +BRH:4 +end_of_record +TN: +SF:/Users/jong/Workspace/mz/child_process.js +FNF:0 +FNH:0 +DA:2,1 +LF:1 +LH:1 +BRF:0 +BRH:0 +end_of_record +TN: +SF:/Users/jong/Workspace/mz/crypto.js +FNF:0 +FNH:0 +DA:2,1 +LF:1 +LH:1 +BRF:0 +BRH:0 +end_of_record +TN: +SF:/Users/jong/Workspace/mz/zlib.js +FNF:0 +FNH:0 +DA:2,1 +LF:1 +LH:1 +BRF:0 +BRH:0 +end_of_record diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/crypto.js b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/crypto.js new file mode 100644 index 0000000..58a0392 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/crypto.js @@ -0,0 +1,9 @@ + +require('./_promisify_all')( + require('crypto'), + exports, [ + 'pbkdf2', + 'randomBytes', + 'pseudoRandomBytes', + ] +) diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/dns.js b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/dns.js new file mode 100644 index 0000000..ed45826 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/dns.js @@ -0,0 +1,16 @@ + +require('./_promisify_all')( + require('dns'), + exports, [ + 'lookup', + 'resolve', + 'resolve4', + 'resolve6', + 'resolveMx', + 'resolveTxt', + 'resolveSrv', + 'resolveNs', + 'resolveCname', + 'reverse', + ] +) diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/fs.js b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/fs.js new file mode 100644 index 0000000..5ea92c7 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/fs.js @@ -0,0 +1,42 @@ + +var fs = require('fs') + +require('./_promisify_all.js')(fs, exports, [ + 'rename', + 'ftruncate', + 'chown', + 'fchown', + 'lchown', + 'chmod', + 'fchmod', + 'stat', + 'lstat', + 'fstat', + 'link', + 'symlink', + 'readlink', + 'realpath', + 'unlink', + 'rmdir', + 'mkdir', + 'readdir', + 'close', + 'open', + 'utimes', + 'futimes', + 'fsync', + 'write', + 'read', + 'readFile', + 'writeFile', + 'appendFile', +]) + +var promisify = require('./_promisify.js') + +// don't know enough about promises to do this haha +exports.exists = promisify('exists', function exists(filename, done) { + fs.stat(filename, function (err) { + done(null, !err) + }) +}) diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/LICENSE b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/LICENSE new file mode 100644 index 0000000..a7ae8ee --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2014 Jonathan Ong me@jongleberry.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/README.md b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/README.md new file mode 100644 index 0000000..c4aa50b --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/README.md @@ -0,0 +1,48 @@ + +# native-or-bluebird + +[![NPM version][npm-image]][npm-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] +[![Dependency Status][david-image]][david-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] +[![Gittip][gittip-image]][gittip-url] + +Use either `bluebird` or the native `Promise` implementation. +If no implementation is found, an error will be thrown: + +```js +var Promise = require('native-or-bluebird'); +``` + +The goal of this library is to be able to eventually remove this line +from your code and use native `Promise`s, allowing you to +to write future-compatible code with ease. +You should install `bluebird` in your libraries for maximum compatibility. + +If you do not want an error to be thrown, +`require()` the `Promise` implementation directly. +If no implementation is found, `undefined` will be returned. + +```js +var Promise = require('native-or-bluebird/promise'); +if (Promise) // do stuff with promises +``` + +[npm-image]: https://img.shields.io/npm/v/native-or-bluebird.svg?style=flat-square +[npm-url]: https://npmjs.org/package/native-or-bluebird +[github-tag]: http://img.shields.io/github/tag/normalize/native-or-bluebird.svg?style=flat-square +[github-url]: https://github.com/normalize/native-or-bluebird/tags +[travis-image]: https://img.shields.io/travis/normalize/native-or-bluebird.svg?style=flat-square +[travis-url]: https://travis-ci.org/normalize/native-or-bluebird +[coveralls-image]: https://img.shields.io/coveralls/normalize/native-or-bluebird.svg?style=flat-square +[coveralls-url]: https://coveralls.io/r/normalize/native-or-bluebird?branch=master +[david-image]: http://img.shields.io/david/normalize/native-or-bluebird.svg?style=flat-square +[david-url]: https://david-dm.org/normalize/native-or-bluebird +[license-image]: http://img.shields.io/npm/l/native-or-bluebird.svg?style=flat-square +[license-url]: LICENSE +[downloads-image]: http://img.shields.io/npm/dm/native-or-bluebird.svg?style=flat-square +[downloads-url]: https://npmjs.org/package/native-or-bluebird +[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square +[gittip-url]: https://www.gittip.com/jonathanong/ diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/index.js b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/index.js new file mode 100644 index 0000000..4e385ec --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/index.js @@ -0,0 +1,9 @@ + +module.exports = require('./promise') + +/* istanbul ignore next */ +if (!module.exports) { + console.error('Neither `bluebird` nor the native `Promise` functions were found.') + console.error('Please install `bluebird` yourself.') + process.exit(1) +} diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/package.json b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/package.json new file mode 100644 index 0000000..7807a1a --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/package.json @@ -0,0 +1,64 @@ +{ + "name": "native-or-bluebird", + "description": "use either the native Promise or Bluebird", + "version": "1.1.1", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/normalize/native-or-bluebird" + }, + "keywords": [ + "bluebird", + "promise", + "promises" + ], + "devDependencies": { + "bluebird": "*", + "istanbul": "0", + "mocha": "1" + }, + "scripts": { + "test": "mocha --reporter spec", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot" + }, + "files": [ + "index.js", + "promise.js", + "LICENSE" + ], + "gitHead": "fc9ac96f8915371fa1ba3ad5efc84909e5c8f2de", + "bugs": { + "url": "https://github.com/normalize/native-or-bluebird/issues" + }, + "homepage": "https://github.com/normalize/native-or-bluebird", + "_id": "native-or-bluebird@1.1.1", + "_shasum": "9131a6d6532afdfb5635f9703734cc6652c905ee", + "_from": "native-or-bluebird@1", + "_npmVersion": "1.4.21", + "_npmUser": { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + "maintainers": [ + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + { + "name": "swatinem", + "email": "arpad.borsos@googlemail.com" + } + ], + "dist": { + "shasum": "9131a6d6532afdfb5635f9703734cc6652c905ee", + "tarball": "http://registry.npmjs.org/native-or-bluebird/-/native-or-bluebird-1.1.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/native-or-bluebird/-/native-or-bluebird-1.1.1.tgz" +} diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/promise.js b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/promise.js new file mode 100644 index 0000000..bed7e89 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/node_modules/native-or-bluebird/promise.js @@ -0,0 +1,8 @@ + +module.exports = global.Promise + +if (!module.exports) { + try { + module.exports = require('bluebird') + } catch (_) {} +} diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/package.json b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/package.json new file mode 100644 index 0000000..70f3481 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/package.json @@ -0,0 +1,57 @@ +{ + "name": "mz", + "description": "modernize node.js to current ECMAScript standards", + "version": "1.0.1", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/normalize/mz" + }, + "dependencies": { + "native-or-bluebird": "1" + }, + "devDependencies": { + "istanbul": "0", + "bluebird": "2", + "mocha": "1" + }, + "scripts": { + "test": "mocha --reporter spec", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot" + }, + "gitHead": "e6bd4cb4d0e0b3176638184a38dd54ca9f6f547c", + "bugs": { + "url": "https://github.com/normalize/mz/issues" + }, + "homepage": "https://github.com/normalize/mz", + "_id": "mz@1.0.1", + "_shasum": "5ce1d3fe5cb3267c9c3141fb6a070f8d17f215d8", + "_from": "mz@1", + "_npmVersion": "1.4.21", + "_npmUser": { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + "maintainers": [ + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + { + "name": "swatinem", + "email": "arpad.borsos@googlemail.com" + } + ], + "dist": { + "shasum": "5ce1d3fe5cb3267c9c3141fb6a070f8d17f215d8", + "tarball": "http://registry.npmjs.org/mz/-/mz-1.0.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/mz/-/mz-1.0.1.tgz" +} diff --git a/node_modules/express-session/node_modules/uid-safe/node_modules/mz/zlib.js b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/zlib.js new file mode 100644 index 0000000..5cf3222 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/node_modules/mz/zlib.js @@ -0,0 +1,13 @@ + +require('./_promisify_all')( + require('zlib'), + exports, [ + 'deflate', + 'deflateRaw', + 'gzip', + 'gunzip', + 'inflate', + 'inflateRaw', + 'unzip', + ] +) diff --git a/node_modules/express-session/node_modules/uid-safe/package.json b/node_modules/express-session/node_modules/uid-safe/package.json new file mode 100644 index 0000000..6f61957 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/package.json @@ -0,0 +1,58 @@ +{ + "name": "uid-safe", + "description": "URL and cookie safe UIDs", + "version": "1.0.1", + "author": { + "name": "Jonathan Ong", + "email": "me@jongleberry.com", + "url": "http://jongleberry.com" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/crypto-utils/uid-safe" + }, + "dependencies": { + "mz": "1", + "base64-url": "1" + }, + "devDependencies": { + "bluebird": "2", + "mocha": "1" + }, + "scripts": { + "test": "mocha --reporter spec --bail" + }, + "bugs": { + "url": "https://github.com/crypto-utils/uid-safe/issues" + }, + "homepage": "https://github.com/crypto-utils/uid-safe", + "_id": "uid-safe@1.0.1", + "_shasum": "5bd148460a2e84f54f193fd20352c8c3d7de6ac8", + "_from": "uid-safe@1.0.1", + "_npmVersion": "1.4.9", + "_npmUser": { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + "maintainers": [ + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "fishrock123", + "email": "fishrock123@rocketmail.com" + } + ], + "dist": { + "shasum": "5bd148460a2e84f54f193fd20352c8c3d7de6ac8", + "tarball": "http://registry.npmjs.org/uid-safe/-/uid-safe-1.0.1.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-1.0.1.tgz" +} diff --git a/node_modules/express-session/node_modules/uid-safe/test.js b/node_modules/express-session/node_modules/uid-safe/test.js new file mode 100644 index 0000000..3665fb9 --- /dev/null +++ b/node_modules/express-session/node_modules/uid-safe/test.js @@ -0,0 +1,46 @@ + +var assert = require('assert') + +var uid = require('./') + +describe('uid-url', function () { + describe('uid()', function () { + it('should return a uid of the correct length', function () { + return uid(18).then(function (val) { + assert.equal(24, Buffer.byteLength(val)) + }) + }) + + it('should not contain +, /, or =', function () { + return uid(100000).then(function (val) { + assert(!~val.indexOf('+')) + assert(!~val.indexOf('/')) + assert(!~val.indexOf('=')) + }) + }) + + it('should support callbacks', function (done) { + uid(1000000, function (err, val) { + if (err) return done(err) + assert(!~val.indexOf('+')) + assert(!~val.indexOf('/')) + assert(!~val.indexOf('=')) + done() + }) + }) + }) + + describe('uid.sync()', function () { + it('should return a uid of the correct length', function () { + var val = uid.sync(18) + assert.equal(24, Buffer.byteLength(val)) + }) + + it('should not contain +, /, or =', function () { + var val = uid.sync(100000) + assert(!~val.indexOf('+')) + assert(!~val.indexOf('/')) + assert(!~val.indexOf('=')) + }) + }) +}) diff --git a/node_modules/express-session/node_modules/utils-merge/.travis.yml b/node_modules/express-session/node_modules/utils-merge/.travis.yml new file mode 100644 index 0000000..af92b02 --- /dev/null +++ b/node_modules/express-session/node_modules/utils-merge/.travis.yml @@ -0,0 +1,6 @@ +language: "node_js" +node_js: + - "0.4" + - "0.6" + - "0.8" + - "0.10" diff --git a/node_modules/express-session/node_modules/utils-merge/LICENSE b/node_modules/express-session/node_modules/utils-merge/LICENSE new file mode 100644 index 0000000..e33bd10 --- /dev/null +++ b/node_modules/express-session/node_modules/utils-merge/LICENSE @@ -0,0 +1,20 @@ +(The MIT License) + +Copyright (c) 2013 Jared Hanson + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/express-session/node_modules/utils-merge/README.md b/node_modules/express-session/node_modules/utils-merge/README.md new file mode 100644 index 0000000..2f94e9b --- /dev/null +++ b/node_modules/express-session/node_modules/utils-merge/README.md @@ -0,0 +1,34 @@ +# utils-merge + +Merges the properties from a source object into a destination object. + +## Install + + $ npm install utils-merge + +## Usage + +```javascript +var a = { foo: 'bar' } + , b = { bar: 'baz' }; + +merge(a, b); +// => { foo: 'bar', bar: 'baz' } +``` + +## Tests + + $ npm install + $ npm test + +[![Build Status](https://secure.travis-ci.org/jaredhanson/utils-merge.png)](http://travis-ci.org/jaredhanson/utils-merge) + +## Credits + + - [Jared Hanson](http://github.com/jaredhanson) + +## License + +[The MIT License](http://opensource.org/licenses/MIT) + +Copyright (c) 2013 Jared Hanson <[http://jaredhanson.net/](http://jaredhanson.net/)> diff --git a/node_modules/express-session/node_modules/utils-merge/index.js b/node_modules/express-session/node_modules/utils-merge/index.js new file mode 100644 index 0000000..4265c69 --- /dev/null +++ b/node_modules/express-session/node_modules/utils-merge/index.js @@ -0,0 +1,23 @@ +/** + * Merge object b with object a. + * + * var a = { foo: 'bar' } + * , b = { bar: 'baz' }; + * + * merge(a, b); + * // => { foo: 'bar', bar: 'baz' } + * + * @param {Object} a + * @param {Object} b + * @return {Object} + * @api public + */ + +exports = module.exports = function(a, b){ + if (a && b) { + for (var key in b) { + a[key] = b[key]; + } + } + return a; +}; diff --git a/node_modules/express-session/node_modules/utils-merge/package.json b/node_modules/express-session/node_modules/utils-merge/package.json new file mode 100644 index 0000000..e655383 --- /dev/null +++ b/node_modules/express-session/node_modules/utils-merge/package.json @@ -0,0 +1,61 @@ +{ + "name": "utils-merge", + "version": "1.0.0", + "description": "merge() utility function", + "keywords": [ + "util" + ], + "repository": { + "type": "git", + "url": "git://github.com/jaredhanson/utils-merge.git" + }, + "bugs": { + "url": "http://github.com/jaredhanson/utils-merge/issues" + }, + "author": { + "name": "Jared Hanson", + "email": "jaredhanson@gmail.com", + "url": "http://www.jaredhanson.net/" + }, + "licenses": [ + { + "type": "MIT", + "url": "http://www.opensource.org/licenses/MIT" + } + ], + "main": "./index", + "dependencies": {}, + "devDependencies": { + "mocha": "1.x.x", + "chai": "1.x.x" + }, + "scripts": { + "test": "mocha --reporter spec --require test/bootstrap/node test/*.test.js" + }, + "engines": { + "node": ">= 0.4.0" + }, + "readme": "# utils-merge\n\nMerges the properties from a source object into a destination object.\n\n## Install\n\n $ npm install utils-merge\n\n## Usage\n\n```javascript\nvar a = { foo: 'bar' }\n , b = { bar: 'baz' };\n\nmerge(a, b);\n// => { foo: 'bar', bar: 'baz' }\n```\n\n## Tests\n\n $ npm install\n $ npm test\n\n[![Build Status](https://secure.travis-ci.org/jaredhanson/utils-merge.png)](http://travis-ci.org/jaredhanson/utils-merge)\n\n## Credits\n\n - [Jared Hanson](http://github.com/jaredhanson)\n\n## License\n\n[The MIT License](http://opensource.org/licenses/MIT)\n\nCopyright (c) 2013 Jared Hanson <[http://jaredhanson.net/](http://jaredhanson.net/)>\n", + "readmeFilename": "README.md", + "_id": "utils-merge@1.0.0", + "dist": { + "shasum": "0294fb922bb9375153541c4f7096231f287c8af8", + "tarball": "http://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz" + }, + "_from": "utils-merge@1.0.0", + "_npmVersion": "1.2.25", + "_npmUser": { + "name": "jaredhanson", + "email": "jaredhanson@gmail.com" + }, + "maintainers": [ + { + "name": "jaredhanson", + "email": "jaredhanson@gmail.com" + } + ], + "directories": {}, + "_shasum": "0294fb922bb9375153541c4f7096231f287c8af8", + "_resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "homepage": "https://github.com/jaredhanson/utils-merge" +} diff --git a/node_modules/express-session/package.json b/node_modules/express-session/package.json new file mode 100644 index 0000000..324e747 --- /dev/null +++ b/node_modules/express-session/package.json @@ -0,0 +1,92 @@ +{ + "name": "express-session", + "version": "1.8.2", + "description": "Simple session middleware for Express", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca", + "url": "http://tjholowaychuk.com" + }, + "contributors": [ + { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "Joe Wagner", + "email": "njwjs722@gmail.com" + } + ], + "repository": { + "type": "git", + "url": "https://github.com/expressjs/session" + }, + "license": "MIT", + "dependencies": { + "cookie": "0.1.2", + "cookie-signature": "1.0.5", + "crc": "3.0.0", + "debug": "~2.0.0", + "depd": "0.4.5", + "on-headers": "~1.0.0", + "parseurl": "~1.3.0", + "uid-safe": "1.0.1", + "utils-merge": "1.0.0" + }, + "devDependencies": { + "after": "0.8.1", + "cookie-parser": "~1.3.3", + "istanbul": "0.3.2", + "express": "~4.8.8", + "mocha": "~1.21.4", + "should": "~4.0.4", + "supertest": "~0.13.0" + }, + "files": [ + "session/", + "HISTORY.md", + "LICENSE", + "index.js" + ], + "engines": { + "node": ">= 0.8.0" + }, + "scripts": { + "test": "mocha --bail --reporter spec test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec test/" + }, + "gitHead": "1754869a0de23dc87e0e2d4826fe702cc13b0515", + "bugs": { + "url": "https://github.com/expressjs/session/issues" + }, + "homepage": "https://github.com/expressjs/session", + "_id": "express-session@1.8.2", + "_shasum": "c4011e728a2349b3c18f117a5409908985e83483", + "_from": "express-session@", + "_npmVersion": "1.4.21", + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "maintainers": [ + { + "name": "shtylman", + "email": "shtylman@gmail.com" + }, + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "mscdex", + "email": "mscdex@mscdex.net" + } + ], + "dist": { + "shasum": "c4011e728a2349b3c18f117a5409908985e83483", + "tarball": "http://registry.npmjs.org/express-session/-/express-session-1.8.2.tgz" + }, + "directories": {}, + "_resolved": "https://registry.npmjs.org/express-session/-/express-session-1.8.2.tgz" +} diff --git a/node_modules/express-session/session/cookie.js b/node_modules/express-session/session/cookie.js new file mode 100644 index 0000000..86591de --- /dev/null +++ b/node_modules/express-session/session/cookie.js @@ -0,0 +1,128 @@ + +/*! + * Connect - session - Cookie + * Copyright(c) 2010 Sencha Inc. + * Copyright(c) 2011 TJ Holowaychuk + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var merge = require('utils-merge') + , cookie = require('cookie'); + +/** + * Initialize a new `Cookie` with the given `options`. + * + * @param {IncomingMessage} req + * @param {Object} options + * @api private + */ + +var Cookie = module.exports = function Cookie(options) { + this.path = '/'; + this.maxAge = null; + this.httpOnly = true; + if (options) merge(this, options); + this.originalMaxAge = undefined == this.originalMaxAge + ? this.maxAge + : this.originalMaxAge; +}; + +/*! + * Prototype. + */ + +Cookie.prototype = { + + /** + * Set expires `date`. + * + * @param {Date} date + * @api public + */ + + set expires(date) { + this._expires = date; + this.originalMaxAge = this.maxAge; + }, + + /** + * Get expires `date`. + * + * @return {Date} + * @api public + */ + + get expires() { + return this._expires; + }, + + /** + * Set expires via max-age in `ms`. + * + * @param {Number} ms + * @api public + */ + + set maxAge(ms) { + this.expires = 'number' == typeof ms + ? new Date(Date.now() + ms) + : ms; + }, + + /** + * Get expires max-age in `ms`. + * + * @return {Number} + * @api public + */ + + get maxAge() { + return this.expires instanceof Date + ? this.expires.valueOf() - Date.now() + : this.expires; + }, + + /** + * Return cookie data object. + * + * @return {Object} + * @api private + */ + + get data() { + return { + originalMaxAge: this.originalMaxAge + , expires: this._expires + , secure: this.secure + , httpOnly: this.httpOnly + , domain: this.domain + , path: this.path + } + }, + + /** + * Return a serialized cookie string. + * + * @return {String} + * @api public + */ + + serialize: function(name, val){ + return cookie.serialize(name, val, this.data); + }, + + /** + * Return JSON representation of this cookie. + * + * @return {Object} + * @api private + */ + + toJSON: function(){ + return this.data; + } +}; diff --git a/node_modules/express-session/session/memory.js b/node_modules/express-session/session/memory.js new file mode 100644 index 0000000..4efe99d --- /dev/null +++ b/node_modules/express-session/session/memory.js @@ -0,0 +1,151 @@ + +/*! + * Connect - session - MemoryStore + * Copyright(c) 2010 Sencha Inc. + * Copyright(c) 2011 TJ Holowaychuk + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var Store = require('./store'); + +/** + * Shim setImmediate for node.js < 0.10 + */ + +/* istanbul ignore next */ +var defer = typeof setImmediate === 'function' + ? setImmediate + : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) } + +/** + * Initialize a new `MemoryStore`. + * + * @api public + */ + +var MemoryStore = module.exports = function MemoryStore() { + this.sessions = Object.create(null); +}; + +/** + * Inherit from `Store.prototype`. + */ + +MemoryStore.prototype.__proto__ = Store.prototype; + +/** + * Attempt to fetch session by the given `sid`. + * + * @param {String} sid + * @param {Function} fn + * @api public + */ + +MemoryStore.prototype.get = function(sid, fn){ + var self = this; + var sess = self.sessions[sid]; + + if (!sess) { + return defer(fn); + } + + // parse + sess = JSON.parse(sess); + + var expires = typeof sess.cookie.expires === 'string' + ? new Date(sess.cookie.expires) + : sess.cookie.expires; + + // destroy expired session + if (expires && expires <= Date.now()) { + return self.destroy(sid, fn); + } + + defer(fn, null, sess); +}; + +/** + * Commit the given `sess` object associated with the given `sid`. + * + * @param {String} sid + * @param {Session} sess + * @param {Function} fn + * @api public + */ + +MemoryStore.prototype.set = function(sid, sess, fn){ + this.sessions[sid] = JSON.stringify(sess); + fn && defer(fn); +}; + +/** + * Destroy the session associated with the given `sid`. + * + * @param {String} sid + * @api public + */ + +MemoryStore.prototype.destroy = function(sid, fn){ + delete this.sessions[sid]; + fn && defer(fn); +}; + +/** + * Invoke the given callback `fn` with all active sessions. + * + * @param {Function} fn + * @api public + */ + +MemoryStore.prototype.all = function(fn){ + var keys = Object.keys(this.sessions); + var now = Date.now(); + var obj = Object.create(null); + var sess; + var sid; + + for (var i = 0, len = keys.length; i < len; ++i) { + sid = keys[i]; + + // parse + sess = JSON.parse(this.sessions[sid]); + + expires = typeof sess.cookie.expires === 'string' + ? new Date(sess.cookie.expires) + : sess.cookie.expires; + + if (!expires || expires > now) { + obj[sid] = sess; + } + } + + fn && defer(fn, null, obj); +}; + +/** + * Clear all sessions. + * + * @param {Function} fn + * @api public + */ + +MemoryStore.prototype.clear = function(fn){ + this.sessions = {}; + fn && defer(fn); +}; + +/** + * Fetch number of sessions. + * + * @param {Function} fn + * @api public + */ + +MemoryStore.prototype.length = function(fn){ + var len = Object.keys(this.sessions).length; + defer(fn, null, len); +}; diff --git a/node_modules/express-session/session/session.js b/node_modules/express-session/session/session.js new file mode 100644 index 0000000..4647f9d --- /dev/null +++ b/node_modules/express-session/session/session.js @@ -0,0 +1,124 @@ + +/*! + * Connect - session - Session + * Copyright(c) 2010 Sencha Inc. + * Copyright(c) 2011 TJ Holowaychuk + * MIT Licensed + */ + +/** + * Expose Session. + */ + +module.exports = Session; + +/** + * Create a new `Session` with the given request and `data`. + * + * @param {IncomingRequest} req + * @param {Object} data + * @api private + */ + +function Session(req, data) { + Object.defineProperty(this, 'req', { value: req }); + Object.defineProperty(this, 'id', { value: req.sessionID }); + + if (typeof data === 'object' && data !== null) { + // merge data into this, ignoring prototype properties + for (var prop in data) { + if (!(prop in this)) { + this[prop] = data[prop] + } + } + } +} + +/** + * Update reset `.cookie.maxAge` to prevent + * the cookie from expiring when the + * session is still active. + * + * @return {Session} for chaining + * @api public + */ + +Session.prototype.touch = function(){ + return this.resetMaxAge(); +}; + +/** + * Reset `.maxAge` to `.originalMaxAge`. + * + * @return {Session} for chaining + * @api public + */ + +Session.prototype.resetMaxAge = function(){ + this.cookie.maxAge = this.cookie.originalMaxAge; + return this; +}; + +/** + * Save the session data with optional callback `fn(err)`. + * + * @param {Function} fn + * @return {Session} for chaining + * @api public + */ + +Session.prototype.save = function(fn){ + this.req.sessionStore.set(this.id, this, fn || function(){}); + return this; +}; + +/** + * Re-loads the session data _without_ altering + * the maxAge properties. Invokes the callback `fn(err)`, + * after which time if no exception has occurred the + * `req.session` property will be a new `Session` object, + * although representing the same session. + * + * @param {Function} fn + * @return {Session} for chaining + * @api public + */ + +Session.prototype.reload = function(fn){ + var req = this.req + , store = this.req.sessionStore; + store.get(this.id, function(err, sess){ + if (err) return fn(err); + if (!sess) return fn(new Error('failed to load session')); + store.createSession(req, sess); + fn(); + }); + return this; +}; + +/** + * Destroy `this` session. + * + * @param {Function} fn + * @return {Session} for chaining + * @api public + */ + +Session.prototype.destroy = function(fn){ + delete this.req.session; + this.req.sessionStore.destroy(this.id, fn); + return this; +}; + +/** + * Regenerate this request's session. + * + * @param {Function} fn + * @return {Session} for chaining + * @api public + */ + +Session.prototype.regenerate = function(fn){ + this.req.sessionStore.regenerate(this.req, fn); + return this; +}; diff --git a/node_modules/express-session/session/store.js b/node_modules/express-session/session/store.js new file mode 100644 index 0000000..54294cb --- /dev/null +++ b/node_modules/express-session/session/store.js @@ -0,0 +1,84 @@ + +/*! + * Connect - session - Store + * Copyright(c) 2010 Sencha Inc. + * Copyright(c) 2011 TJ Holowaychuk + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var EventEmitter = require('events').EventEmitter + , Session = require('./session') + , Cookie = require('./cookie'); + +/** + * Initialize abstract `Store`. + * + * @api private + */ + +var Store = module.exports = function Store(options){}; + +/** + * Inherit from `EventEmitter.prototype`. + */ + +Store.prototype.__proto__ = EventEmitter.prototype; + +/** + * Re-generate the given requests's session. + * + * @param {IncomingRequest} req + * @return {Function} fn + * @api public + */ + +Store.prototype.regenerate = function(req, fn){ + var self = this; + this.destroy(req.sessionID, function(err){ + self.generate(req); + fn(err); + }); +}; + +/** + * Load a `Session` instance via the given `sid` + * and invoke the callback `fn(err, sess)`. + * + * @param {String} sid + * @param {Function} fn + * @api public + */ + +Store.prototype.load = function(sid, fn){ + var self = this; + this.get(sid, function(err, sess){ + if (err) return fn(err); + if (!sess) return fn(); + var req = { sessionID: sid, sessionStore: self }; + sess = self.createSession(req, sess); + fn(null, sess); + }); +}; + +/** + * Create session from JSON `sess` data. + * + * @param {IncomingRequest} req + * @param {Object} sess + * @return {Session} + * @api private + */ + +Store.prototype.createSession = function(req, sess){ + var expires = sess.cookie.expires + , orig = sess.cookie.originalMaxAge; + sess.cookie = new Cookie(sess.cookie); + if ('string' == typeof expires) sess.cookie.expires = new Date(expires); + sess.cookie.originalMaxAge = orig; + req.session = new Session(req, sess); + return req.session; +}; diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..e6f282af041cbd0f42141f9d1bc6c06c3aa3a31e GIT binary patch literal 1406 zcmZQzU<5(|0R}M0U}azs1F|%L7$l?s#Ec9aK$3yMfe}n$5dZ)GXZUY#k0CxPFd71* sAut*O)D8hAD1e!Z&WDN9g9a9T4FBq};}84{3?Pgy-vBH}K^UYL0D9*ezyJUM literal 0 HcmV?d00001 diff --git a/routes/task.js b/routes/task.js new file mode 100644 index 0000000..d2bbe6a --- /dev/null +++ b/routes/task.js @@ -0,0 +1,31 @@ +var express = require('express'); +var router = express.Router(); + +/* GET list of tasks */ +router.get('/list', function(req, res) { + res.json([{}]); +}); + + +/** + * Task CRUD + */ +router.get('/:id', function(req, res) { + req.getConnection(function(err, connection) { + res.json({}); + }); +}); + +router.post('/', function(req, res) { + res.send('Error or success message'); +}); + +router.put('/:id', function(req, res) { + res.send('Error or success message'); +}); + +router.delete('/:id', function(req, res) { + res.send('Error or success message'); +}); + +module.exports = router; diff --git a/routes/tasks.js b/routes/tasks.js deleted file mode 100644 index 8b645fb..0000000 --- a/routes/tasks.js +++ /dev/null @@ -1,9 +0,0 @@ -var express = require('express'); -var router = express.Router(); - -/* GET list of tasks */ -router.get('/', function(req, res) { - res.json([{}]); -}); - -module.exports = router; diff --git a/routes/user.js b/routes/user.js new file mode 100644 index 0000000..1a28602 --- /dev/null +++ b/routes/user.js @@ -0,0 +1,25 @@ +var express = require('express'); +var router = express.Router(); + +/* GET users listing. */ +router.get('/list', function(req, res) { + res.send('respond with a resource'); +}); + +router.get('/:id', function(req, res) { + res.send('respond with a resource'); +}); + +router.post('/', function(req, res) { + res.send('respond with a resource'); +}); + +router.put('/:id', function(req, res) { + res.send('respond with a resource'); +}); + +router.delete('/:id', function(req, res) { + res.send('respond with a resource'); +}); + +module.exports = router; diff --git a/routes/users.js b/routes/users.js deleted file mode 100644 index b4e0fde..0000000 --- a/routes/users.js +++ /dev/null @@ -1,9 +0,0 @@ -var express = require('express'); -var router = express.Router(); - -/* GET users listing. */ -router.get('/', function(req, res) { - res.send('respond with a resource'); -}); - -module.exports = router; diff --git a/views/layout.dust b/views/layout.dust index 61f2b8e..b54c6ad 100644 --- a/views/layout.dust +++ b/views/layout.dust @@ -12,6 +12,7 @@ +