diff --git a/.gitignore b/.gitignore index 0fcb4c5a..e03fdf4e 100644 --- a/.gitignore +++ b/.gitignore @@ -34,4 +34,7 @@ node_modules config/runtime.yaml # Netbeans project -nbproject/ \ No newline at end of file +nbproject/ + +# Env +config/env/development.js diff --git a/api/controllers/user.js b/api/controllers/user.js index 82f97147..5027d361 100644 --- a/api/controllers/user.js +++ b/api/controllers/user.js @@ -10,7 +10,8 @@ module.exports = { removeUser: removeUser, getUser: getUser, updateUser: updateUser, - loginUser: loginUser + loginUser: loginUser, + logoutUser: logoutUser }; function createUser(req, res) { @@ -40,7 +41,7 @@ function createUser(req, res) { } }); - res.status(200).json({ + return res.status(200).json({ success: 1, message: 'An email has been sent to you. Please check it to verify your account.' }); @@ -63,7 +64,7 @@ function activateUser(req, res) { message: 'ERROR: sending confirmation email FAILED ' + info }); } - res.status(200).json({ + return res.status(200).json({ success: 1, message: 'CONFIRMED!' }); @@ -144,27 +145,78 @@ function updateUser(req, res) { return res.status(200).json(users); }); } -function loginUser(args, res) { - var role = args.swagger.params.role.value; - var username = args.body.username; - var password = args.body.password; - console.log(role + username + password); +function loginUser(req, res) { + var role = req.swagger.params.role.value; + var username = req.body.username; + var password = req.body.password; if (role !== "user" && role !== "admin") { return res.status(400).json({ message: "Error: Role must be either admin or user" }); } - - if (username === "cboard_robot" && password === "youNIC4$" && role) { + User.authenticate(username, password, function (error, user) { + if (error || !user) { + return res.status(401).json({ + message: "Wrong email or password." + }); + } else { + req.session.userId = user._id; var tokenString = auth.issueToken(username, role); - res.status(200).json({ + user.authToken = tokenString; + user.save(function (err, user) { + if (err) { + return res.status(500).json({ + message: 'Error saving user ' + err + }); + } + if (!user) { + return res.status(404).json({ + message: 'Unable to find user. User id: ' + user._id + }); + } + }); + return res.status(200).json({ token: tokenString, message: "Token successfully generated" }); - } else { - res.status(403).json({ - message: "Error: Credentials incorrect" + } + }); +} +function logoutUser(req, res) { + var username = req.body.username; + var password = req.body.password; + User.authenticate(username, password, function (error, user) { + if (error || !user) { + return res.status(401).json({ + message: "Wrong email or password." + }); + } + if (req.session) { + // delete session object + req.session.destroy(function (err) { + if (err) { + return res.status(500).json({ + message: 'Error removing session ' + err + }); + } + }); + } + user.authToken = ''; + user.save(function (err, user) { + if (err) { + return res.status(500).json({ + message: 'Error saving user ' + err + }); + } + if (!user) { + return res.status(404).json({ + message: 'Unable to find user. User id: ' + user._id + }); + } + }); + return res.status(200).json({ + message: "User successfully logout" }); - } -} \ No newline at end of file + }); +} diff --git a/api/mail/index.js b/api/mail/index.js index 082f9510..1757ef56 100644 --- a/api/mail/index.js +++ b/api/mail/index.js @@ -44,10 +44,14 @@ module.exports = function (locale) { // emailing options transportOptions: { - service: 'Gmail', + from: 'martinbedouret@gmail.com', + host: 'smtp.sendgrid.net', + port: 465, + secure: true, + service: 'Sendgrid', auth: { - user: 'martinbedouret@gmail.com', - pass: 'pisco32065' + user: 'apikey', + pass: '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' } }, verifyMailOptions: { diff --git a/api/models/User.js b/api/models/User.js index c8a66179..4df1a7ce 100644 --- a/api/models/User.js +++ b/api/models/User.js @@ -1,7 +1,8 @@ 'use strict'; var mongoose = require('mongoose'); -const crypto = require('crypto'); +var bcrypt = require('bcrypt'); + var Schema = mongoose.Schema; @@ -14,14 +15,44 @@ const oAuthTypes = [ ]; const userSchema = new Schema({ - name: {type: String, default: ''}, - email: {type: String, default: ''}, - username: {type: String, default: ''}, - provider: {type: String, default: ''}, - locale: {type: String, default: 'en'}, - password: {type: String, default: ''}, - authToken: {type: String, default: ''}, - lastlogin: {type: Date, default: Date.now}, + name: { + type: String, + default: '' + }, + email: { + type: String, + unique: true, + required: true, + trim: true + }, + username: { + type: String, + unique: true, + required: true, + trim: true, + default: '' + }, + provider: { + type: String, + default: '' + }, + locale: { + type: String, + default: 'en' + }, + password: { + type: String, + required: true, + default: '' + }, + authToken: { + type: String, + default: '' + }, + lastlogin: { + type: Date, + default: Date.now + }, facebook: { id: String, token: String, @@ -104,50 +135,6 @@ userSchema.pre('save', function (next) { userSchema.methods = { - /** - * Authenticate - check if the passwords are the same - * - * @param {String} plainText - * @return {Boolean} - * @api public - */ - - authenticate: function (plainText) { - return this.encryptPassword(plainText) === this.hashed_password; - }, - - /** - * Make salt - * - * @return {String} - * @api public - */ - - makeSalt: function () { - return Math.round((new Date().valueOf() * Math.random())) + ''; - }, - - /** - * Encrypt password - * - * @param {String} password - * @return {String} - * @api public - */ - - encryptPassword: function (password) { - if (!password) - return ''; - try { - return crypto - .createHmac('sha1', this.salt) - .update(password) - .digest('hex'); - } catch (err) { - return ''; - } - }, - /** * Validation is not required if using OAuth */ @@ -176,8 +163,37 @@ userSchema.statics = { return this.findOne(options.criteria) .select(options.select) .exec(cb); - } -}; + }, + + /** + * Authenticate input against database + * + * @param {String} username + * @param {String} password + * @param {Function} callback + * @api private + */ + + authenticate: function (username, password, callback) { + this.findOne({ username: username }) + .exec(function (err, user) { + if (err) { + return callback(err); + } else if (!user) { + var err = new Error('User not found.'); + err.status = 401; + return callback(err); + } + bcrypt.compare(password, user.password, function (err, result) { + if (result === true) { + return callback(null, user); + } else { + return callback(); + } + }); + }); + } + }; var User = mongoose.model('User', userSchema); diff --git a/api/swagger/swagger.yaml b/api/swagger/swagger.yaml index d2a3f413..5764c642 100644 --- a/api/swagger/swagger.yaml +++ b/api/swagger/swagger.yaml @@ -230,6 +230,33 @@ paths: description: Error schema: $ref: "#/definitions/ErrorResponse" + /user/logout: + x-swagger-router-controller: user + post: + operationId: logoutUser + description: Destroys user session and authentication token. + security: + - Bearer: [] + x-security-scopes: + - admin + - user + parameters: + - name: info + description: User properties + in: body + required: true + schema: + $ref: "#/definitions/User" + responses: + "200": + description: Success + schema: + $ref: "#/definitions/LogoutResponse" + default: + description: Error + schema: + $ref: "#/definitions/ErrorResponse" + # complex objects have schema definitions definitions: User: @@ -304,5 +331,11 @@ definitions: properties: token: type: string + message: + type: string + LogoutResponse: + required: + - message + properties: message: type: string \ No newline at end of file diff --git a/app.js b/app.js index 1d016011..5af9d645 100644 --- a/app.js +++ b/app.js @@ -1,58 +1,49 @@ 'use strict'; -var SwaggerExpress = require('swagger-express-mw'); var app = require('express')(); var swaggerTools = require('swagger-tools'); var YAML = require('yamljs'); var auth = require("./api/helpers/auth"); +var swaggerConfig = YAML.load("./api/swagger/swagger.yaml"); +var db = require('./db'); +var session = require('express-session'); +var MongoStore = require('connect-mongo')(session); const config = require('./config'); -var swaggerConfig = YAML.load("./api/swagger/swagger.yaml"); - module.exports = app; // for testing -//var swaggerConfig = { -// appRoot: __dirname // required config, -//}; - -/*bbdd configuration in its own file*/ -require('./db'); - -swaggerTools.initializeMiddleware(swaggerConfig, function(middleware) { - //Serves the Swagger UI on /docs - app.use(middleware.swaggerMetadata()); // needs to go BEFORE swaggerSecurity - - app.use( - middleware.swaggerSecurity({ - //manage token function in the 'auth' module - Bearer: auth.verifyToken - }) - ); - - var routerConfig = { - controllers: "./api/controllers", - useStubs: false - }; - - app.use(middleware.swaggerRouter(routerConfig)); - - app.use(middleware.swaggerUi()); - - var port = process.env.PORT || 10010; - app.listen(port, function() { - console.log("Started server on port 10010"); - }); +swaggerTools.initializeMiddleware(swaggerConfig, function (middleware) { + //Serves the Swagger UI on /docs + app.use(middleware.swaggerMetadata()); // needs to go BEFORE swaggerSecurity + app.use(middleware.swaggerSecurity({ + //manage token function in the 'auth' module + Bearer: auth.verifyToken + }) + ); + //use sessions for tracking logins + app.use(session({ + secret: 'work hard', + resave: true, + saveUninitialized: false, + store: new MongoStore({ + mongooseConnection: db + }) + })); + + + var routerConfig = { + controllers: "./api/controllers", + useStubs: false + }; + + app.use(middleware.swaggerRouter(routerConfig)); + + app.use(middleware.swaggerUi()); + + var port = process.env.PORT || 10010; + app.listen(port, function () { + console.log("Started server on port " + port); + }); }); -// -//SwaggerExpress.create(swaggerConfig, function(err, swaggerExpress) { -// if (err) { throw err; } -// -// // install middleware -// swaggerExpress.register(app); -// -// var port = process.env.PORT || 10010; -// app.listen(port); -// -//}); diff --git a/app.yml b/app.yml new file mode 100644 index 00000000..68eb79a1 --- /dev/null +++ b/app.yml @@ -0,0 +1,7 @@ + + +runtime: nodejs +env: flex +env_variables: + SENDGRID_API_KEY: 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 + SENDGRID_SENDER: martinbedouret@gmail.com \ No newline at end of file diff --git a/config/env/production.js b/config/env/production.js new file mode 100644 index 00000000..fbc5138c --- /dev/null +++ b/config/env/production.js @@ -0,0 +1,5 @@ +module.exports = { + env: 'production', + databaseUrl: process.env.MONGO_URL || 'mongodb://martinbedouret:Muni1909@ds253587.mlab.com:53587/cboard', + jwt: { secret: process.env.JWT_SECRET || 'secret key for testing' } +}; \ No newline at end of file diff --git a/config/index.js b/config/index.js index 22ad01f2..9782bada 100644 --- a/config/index.js +++ b/config/index.js @@ -10,19 +10,6 @@ const defaults = { jwtSecret: 'asdfgASDFG12345' }; -var nodemailer = require('nodemailer'); -var smtpTransport = nodemailer.createTransport({ - from: 'martinbedouret@gmail.com', - options: { - host: 'smtp.gmail.com', - port: 465, - secure: true, - auth: { - user: 'martinbedouret@gmail.com', - pass: 'donttell' - } - } - }); /** * Expose */ diff --git a/db.js b/db.js index a88a388c..e28fa309 100644 --- a/db.js +++ b/db.js @@ -3,12 +3,14 @@ var mongoose = require('mongoose'); var config = require('./config'); -mongoose.connect(config.databaseUrl); -mongoose.connection.on('connected', () => console.log('Connected to database: ' + config.databaseUrl)); +mongoose.connect('mongodb://martinbedouret:Muni1909@ds253587.mlab.com:53587/cboard'); +mongoose.connection.on('connected', () => console.log('Connected to database ')); mongoose.connection.on('error',(err) => console.log('Database connection error: ' + err)); mongoose.connection.on('disconnected', () => console.log('Disconnected from database')); process.on('SIGINT', () => mongoose.connection.close( () => { console.log('Finished App and disconnected from database'); process.exit(0); -})); \ No newline at end of file +})); + +module.exports = mongoose.connection; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 10d28f22..26aec50f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,14 @@ { "name": "cboard-api", - "version": "0.0.1", + "version": "0.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "accepts": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", @@ -16,8 +21,7 @@ "addressparser": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-0.3.2.tgz", - "integrity": "sha1-WYc/Nej89sc2HBAjkmHXbhU0i7I=", - "dev": true + "integrity": "sha1-WYc/Nej89sc2HBAjkmHXbhU0i7I=" }, "ajv": { "version": "5.5.2", @@ -30,11 +34,30 @@ "json-schema-traverse": "0.3.1" } }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, "append-field": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-0.1.0.tgz", "integrity": "sha1-bdxY+gg8e8VF08WZWygwzCNm1Eo=" }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.7" + } + }, "argparse": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", @@ -59,9 +82,85 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", + "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", + "requires": { + "lodash": "4.17.4" + } + }, + "async.ensureasync": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.ensureasync/-/async.ensureasync-0.5.2.tgz", + "integrity": "sha1-w8fkpOmzHZaHXVa4UEWYRG4eMF0=", + "requires": { + "async.util.ensureasync": "0.5.2" + } + }, + "async.queue": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.queue/-/async.queue-0.5.2.tgz", + "integrity": "sha1-jV2QgS4UgQZrwJBOjMFxKxfDvXw=", + "requires": { + "async.util.queue": "0.5.2" + } + }, + "async.util.arrayeach": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.arrayeach/-/async.util.arrayeach-0.5.2.tgz", + "integrity": "sha1-WMTpgCjVXWm/sFrrOvROClVagpw=" + }, + "async.util.ensureasync": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.ensureasync/-/async.util.ensureasync-0.5.2.tgz", + "integrity": "sha1-EJB/LL0GegYfma5tIuCM7TDbDWg=", + "requires": { + "async.util.restparam": "0.5.2", + "async.util.setimmediate": "0.5.2" + } + }, + "async.util.isarray": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.isarray/-/async.util.isarray-0.5.2.tgz", + "integrity": "sha1-5i2sjyY29lh13PdSHC0k0N+yu98=" + }, + "async.util.map": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.map/-/async.util.map-0.5.2.tgz", + "integrity": "sha1-5YjvhuCzq18CfZevTWg10FXKadY=" + }, + "async.util.noop": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.noop/-/async.util.noop-0.5.2.tgz", + "integrity": "sha1-vdYrl8sKo/YLWGrRSEaGmJdeWLk=" + }, + "async.util.onlyonce": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.onlyonce/-/async.util.onlyonce-0.5.2.tgz", + "integrity": "sha1-uOb8AErckjFk154y8oE+5GXCT/I=" + }, + "async.util.queue": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.queue/-/async.util.queue-0.5.2.tgz", + "integrity": "sha1-V/Zavho83yc9MavSirlUJfgiLuU=", + "requires": { + "async.util.arrayeach": "0.5.2", + "async.util.isarray": "0.5.2", + "async.util.map": "0.5.2", + "async.util.noop": "0.5.2", + "async.util.onlyonce": "0.5.2", + "async.util.setimmediate": "0.5.2" + } + }, + "async.util.restparam": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.restparam/-/async.util.restparam-0.5.2.tgz", + "integrity": "sha1-A+/r88Ane5ciDlJaunUPXgT8gM0=" + }, + "async.util.setimmediate": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/async.util.setimmediate/-/async.util.setimmediate-0.5.2.tgz", + "integrity": "sha1-KBLrq/KlgCd1jUvHeT0cz68QJV8=" }, "asynckit": { "version": "0.4.0", @@ -90,6 +189,18 @@ "machinepack-http": "2.4.0", "mustache": "2.3.0", "pipeworks": "1.3.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + } } }, "balanced-match": { @@ -102,6 +213,22 @@ "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" }, + "bcrypt": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-1.0.3.tgz", + "integrity": "sha512-pRyDdo73C8Nim3jwFJ7DWe3TZCgwDfWZ6nHS5LSdU77kWbj1frruvdndP02AOavtD4y8v6Fp2dolbHgp4SDrfg==", + "requires": { + "nan": "2.6.2", + "node-pre-gyp": "0.6.36" + }, + "dependencies": { + "nan": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=" + } + } + }, "bcrypt-pbkdf": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", @@ -114,14 +241,20 @@ "bcryptjs": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=", - "dev": true + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "requires": { + "inherits": "2.0.3" + } }, "bluebird": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.10.2.tgz", - "integrity": "sha1-AkpVFylTCIV/FPkfEQb8O1VfRGs=", - "dev": true + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" }, "body-parser": { "version": "1.18.2", @@ -131,7 +264,7 @@ "bytes": "3.0.0", "content-type": "1.0.4", "debug": "2.6.9", - "depd": "1.1.1", + "depd": "1.1.2", "http-errors": "1.6.2", "iconv-lite": "0.4.19", "on-finished": "2.3.0", @@ -146,8 +279,20 @@ "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "requires": { "hoek": "4.2.0" + }, + "dependencies": { + "hoek": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" + } } }, + "bottleneck": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-1.16.0.tgz", + "integrity": "sha1-1s4TgIUnr8gLaQkvFWBmVeWyHxo=" + }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", @@ -158,13 +303,9 @@ } }, "bson": { - "version": "0.2.22", - "resolved": "https://registry.npmjs.org/bson/-/bson-0.2.22.tgz", - "integrity": "sha1-/NoQPybQwHTVpS1Qkn24D9ArSzk=", - "dev": true, - "requires": { - "nan": "1.8.4" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz", + "integrity": "sha1-k8ENOeqltYQVy8QFLz5T5WKwtyw=" }, "buffer-equal-constant-time": { "version": "1.0.1", @@ -174,14 +315,12 @@ "buffer-shims": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", - "dev": true + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" }, "buildmail": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-2.0.0.tgz", "integrity": "sha1-8LewpZ6aShtQZrv6BR0kjzgy7s4=", - "dev": true, "requires": { "addressparser": "0.3.2", "libbase64": "0.1.0", @@ -194,7 +333,6 @@ "version": "0.10.0", "resolved": "https://registry.npmjs.org/needle/-/needle-0.10.0.tgz", "integrity": "sha1-FqJNY/KmEVLrdMzh0Sr4XFB1d9Q=", - "dev": true, "requires": { "debug": "2.6.9", "iconv-lite": "0.4.19" @@ -247,14 +385,18 @@ "clone": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", - "dev": true + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=" }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, "combined-stream": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", @@ -264,9 +406,9 @@ } }, "commander": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", - "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==" + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" }, "component-emitter": { "version": "1.2.1", @@ -284,19 +426,33 @@ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.3", + "readable-stream": "2.2.7", "typedarray": "0.0.6" } }, "config": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/config/-/config-1.29.0.tgz", - "integrity": "sha1-+JGQCV7Iz+iG6lK309lsrfpXe38=", + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/config/-/config-1.29.2.tgz", + "integrity": "sha1-Lr3JJjnrnQb//TAvHuMuKtDpThE=", "requires": { "json5": "0.4.0", "os-homedir": "1.0.2" } }, + "connect-mongo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-1.3.2.tgz", + "integrity": "sha1-fL9Y3/8mdg5eAOAX0KhbS8kLnTc=", + "requires": { + "bluebird": "3.5.0", + "mongodb": "2.2.34" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -341,6 +497,11 @@ "vary": "1.1.2" } }, + "crc": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", + "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=" + }, "cryptiles": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", @@ -356,6 +517,11 @@ "requires": { "hoek": "4.2.0" } + }, + "hoek": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" } } }, @@ -375,15 +541,25 @@ "ms": "2.0.0" } }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, "destroy": { "version": "1.0.4", @@ -449,18 +625,54 @@ "version": "0.4.6", "resolved": "https://registry.npmjs.org/email-verification/-/email-verification-0.4.6.tgz", "integrity": "sha1-DFRXJ/1onS12hWZvUbaLRMc5QkA=", - "dev": true, "requires": { "mongoose": "3.8.40", "nodemailer": "1.11.0", "rand-token": "0.2.1" }, "dependencies": { + "bluebird": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.10.2.tgz", + "integrity": "sha1-AkpVFylTCIV/FPkfEQb8O1VfRGs=" + }, + "bson": { + "version": "0.2.22", + "resolved": "https://registry.npmjs.org/bson/-/bson-0.2.22.tgz", + "integrity": "sha1-/NoQPybQwHTVpS1Qkn24D9ArSzk=", + "requires": { + "nan": "1.8.4" + } + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + }, + "dependencies": { + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, + "mongodb": { + "version": "1.4.38", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-1.4.38.tgz", + "integrity": "sha1-jP/WGBAK86RkiplUmL/Py07Yq9I=", + "requires": { + "bson": "0.2.22", + "kerberos": "0.0.11", + "readable-stream": "2.3.3" + } + }, "mongoose": { "version": "3.8.40", "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-3.8.40.tgz", "integrity": "sha1-Ay9bpVWCSXVZqHwfP0s5WcJkBqc=", - "dev": true, "requires": { "hooks": "0.2.1", "mongodb": "1.4.38", @@ -473,17 +685,41 @@ "sliced": "0.0.5" } }, + "mpath": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.1.1.tgz", + "integrity": "sha1-I9qFK3wjLuCX9HWdKcDunNItXkY=" + }, + "mpromise": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/mpromise/-/mpromise-0.4.3.tgz", + "integrity": "sha1-7cR6daKhd7DpOCc121Lb7DgIzDM=" + }, + "mquery": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-1.10.0.tgz", + "integrity": "sha1-hgPwKwtSTResBTmoWZYSTuF7fLM=", + "requires": { + "bluebird": "2.10.2", + "debug": "2.2.0", + "regexp-clone": "0.0.1", + "sliced": "0.0.5" + } + }, "ms": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/ms/-/ms-0.1.0.tgz", - "integrity": "sha1-8h+sSQ2vHXZn/RgP6QdzicyUQrI=", - "dev": true + "integrity": "sha1-8h+sSQ2vHXZn/RgP6QdzicyUQrI=" + }, + "muri": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/muri/-/muri-1.1.0.tgz", + "integrity": "sha1-o6bXTmiogPQzokmnSWnLtmXMCt0=" }, "nodemailer": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-1.11.0.tgz", "integrity": "sha1-TmnLObAwFbHR7wx4qBVBK56Xb3k=", - "dev": true, "requires": { "libmime": "1.2.0", "mailcomposer": "2.1.0", @@ -495,8 +731,27 @@ "rand-token": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/rand-token/-/rand-token-0.2.1.tgz", - "integrity": "sha1-3GfIEjMGyRInstw/W+pz0wE3YiY=", - "dev": true + "integrity": "sha1-3GfIEjMGyRInstw/W+pz0wE3YiY=" + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "sliced": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz", + "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8=" } } }, @@ -505,11 +760,18 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "0.4.19" + } + }, "es6-promise": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", - "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=", - "dev": true + "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=" }, "escape-html": { "version": "1.0.3", @@ -539,7 +801,7 @@ "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.1", + "depd": "1.1.2", "encodeurl": "1.0.1", "escape-html": "1.0.3", "etag": "1.8.1", @@ -563,6 +825,22 @@ "vary": "1.1.2" } }, + "express-session": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz", + "integrity": "sha512-r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "crc": "3.4.4", + "debug": "2.6.9", + "depd": "1.1.2", + "on-headers": "1.0.1", + "parseurl": "1.3.2", + "uid-safe": "2.1.5", + "utils-merge": "1.0.1" + } + }, "extend": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", @@ -632,6 +910,42 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -653,19 +967,17 @@ "path-is-absolute": "1.0.1" } }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, "graphlib": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.5.tgz", "integrity": "sha512-XvtbqCcw+EM5SqQrIetIKKD+uZVNQtDPD1goIg7K73RuRZtVI5rYMdcCVSHm/AS1sCBZ7vt0p5WgXouucHQaOA==", "requires": { "lodash": "4.17.4" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" - } } }, "har-schema": { @@ -682,6 +994,11 @@ "har-schema": "2.0.0" } }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, "hawk": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", @@ -691,24 +1008,29 @@ "cryptiles": "3.1.2", "hoek": "4.2.0", "sntp": "2.1.0" + }, + "dependencies": { + "hoek": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" + } } }, "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" }, "hooks": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/hooks/-/hooks-0.2.1.tgz", - "integrity": "sha1-D1kbGzRL3LPfWXc/Yvu6+Fv0Aos=", - "dev": true + "integrity": "sha1-D1kbGzRL3LPfWXc/Yvu6+Fv0Aos=" }, "hooks-fixed": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-2.0.2.tgz", - "integrity": "sha512-YurCM4gQSetcrhwEtpQHhQ4M7Zo7poNGqY4kQGeBS6eZtOcT3tnNs01ThFa0jYBByAiYt1MjMjP/YApG0EnAvQ==", - "dev": true + "integrity": "sha512-YurCM4gQSetcrhwEtpQHhQ4M7Zo7poNGqY4kQGeBS6eZtOcT3tnNs01ThFa0jYBByAiYt1MjMjP/YApG0EnAvQ==" }, "http-errors": { "version": "1.6.2", @@ -721,6 +1043,11 @@ "statuses": "1.3.1" }, "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, "setprototypeof": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", @@ -757,11 +1084,24 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, "ipaddr.js": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -791,13 +1131,6 @@ "isemail": "1.2.0", "moment": "2.20.1", "topo": "1.1.0" - }, - "dependencies": { - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - } } }, "js-yaml": { @@ -820,7 +1153,7 @@ "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-2.1.7.tgz", "integrity": "sha1-uesB/in16j6Sh48VrqEK04taz4k=", "requires": { - "commander": "2.12.2", + "commander": "2.13.0", "graphlib": "2.1.5", "js-yaml": "3.10.0", "native-promise-only": "0.8.1", @@ -901,14 +1234,12 @@ "kareem": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/kareem/-/kareem-1.5.0.tgz", - "integrity": "sha1-4+QQHZ3P3imXadr0tNtk2JXRdEg=", - "dev": true + "integrity": "sha1-4+QQHZ3P3imXadr0tNtk2JXRdEg=" }, "kerberos": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/kerberos/-/kerberos-0.0.11.tgz", "integrity": "sha1-yymJHCHCKsGV8xQLl90SIE/qfcI=", - "dev": true, "optional": true, "requires": { "nan": "1.8.4" @@ -917,14 +1248,12 @@ "libbase64": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz", - "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=", - "dev": true + "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=" }, "libmime": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/libmime/-/libmime-1.2.0.tgz", "integrity": "sha1-jYS087Ils3BEECNu9JSQZDa6dCs=", - "dev": true, "requires": { "iconv-lite": "0.4.19", "libbase64": "0.1.0", @@ -934,13 +1263,12 @@ "libqp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz", - "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=", - "dev": true + "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=" }, "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" }, "lodash-compat": { "version": "3.10.2", @@ -1094,6 +1422,11 @@ "lodash._slice": "2.4.1" } }, + "lodash.chunk": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", + "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" + }, "lodash.clonedeep": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-2.4.1.tgz", @@ -1197,6 +1530,13 @@ "object-hash": "0.3.0", "rttc": "7.4.0", "switchback": "2.0.2" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + } } }, "machinepack-http": { @@ -1208,6 +1548,13 @@ "machine": "10.4.0", "machinepack-urls": "4.1.0", "request": "2.83.0" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + } } }, "machinepack-urls": { @@ -1219,6 +1566,11 @@ "machine": "9.1.2" }, "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + }, "machine": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/machine/-/machine-9.1.2.tgz", @@ -1261,12 +1613,22 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-2.1.0.tgz", "integrity": "sha1-plMYIomWFP7omckiJtgeK5y7GD0=", - "dev": true, "requires": { "buildmail": "2.0.0", "libmime": "1.2.0" } }, + "mailparser": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/mailparser/-/mailparser-0.6.2.tgz", + "integrity": "sha1-A8SGA5vfTfbNO2rcqqxBB9/bwGg=", + "requires": { + "encoding": "0.1.12", + "mime": "1.4.1", + "mimelib": "0.3.1", + "uue": "3.1.0" + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1300,6 +1662,22 @@ "mime-db": "1.30.0" } }, + "mimelib": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/mimelib/-/mimelib-0.3.1.tgz", + "integrity": "sha1-eHrdJBXYJ6yzr27EvKHqlZZBiFM=", + "requires": { + "addressparser": "1.0.1", + "encoding": "0.1.12" + }, + "dependencies": { + "addressparser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", + "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=" + } + } + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -1327,64 +1705,35 @@ "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==" }, "mongodb": { - "version": "1.4.38", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-1.4.38.tgz", - "integrity": "sha1-jP/WGBAK86RkiplUmL/Py07Yq9I=", - "dev": true, - "requires": { - "bson": "0.2.22", - "kerberos": "0.0.11", - "readable-stream": "2.3.3" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - } + "version": "2.2.34", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.34.tgz", + "integrity": "sha1-o09Zu+thdUrsQy3nLD/iFSakTBo=", + "requires": { + "es6-promise": "3.2.1", + "mongodb-core": "2.1.18", + "readable-stream": "2.2.7" } }, "mongodb-core": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.17.tgz", - "integrity": "sha1-pBizN6FKFJkPtRC5I97mqBMXPfg=", - "dev": true, + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.18.tgz", + "integrity": "sha1-TEYTm986HwMt7ZHbSfOO7AFlkFA=", "requires": { "bson": "1.0.4", "require_optional": "1.0.1" - }, - "dependencies": { - "bson": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz", - "integrity": "sha1-k8ENOeqltYQVy8QFLz5T5WKwtyw=", - "dev": true - } } }, "mongoose": { - "version": "4.13.8", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-4.13.8.tgz", - "integrity": "sha512-R9ixkKDaO/NYOxhWfv0igX51iHWPR6sA0M7sOhtDYhqjLlniQvcdaJhUNCk8nJrmnN2K75bMs5QYEzeJGTV9Jw==", - "dev": true, + "version": "4.13.9", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-4.13.9.tgz", + "integrity": "sha512-UGkSJR5iYHfHGlAyNNJS/mX5HoukDssQoy2pyJTpdyOXnxSw1ujYvMlxEuiIOQEWH2oZSAmHfjH+/igxG1MXLQ==", "requires": { "async": "2.1.4", "bson": "1.0.4", "hooks-fixed": "2.0.2", "kareem": "1.5.0", "lodash.get": "4.4.2", - "mongodb": "2.2.33", + "mongodb": "2.2.34", "mpath": "0.3.0", "mpromise": "0.5.5", "mquery": "2.3.3", @@ -1392,145 +1741,33 @@ "muri": "1.3.0", "regexp-clone": "0.0.1", "sliced": "1.0.1" - }, - "dependencies": { - "async": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", - "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", - "dev": true - }, - "bson": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz", - "integrity": "sha1-k8ENOeqltYQVy8QFLz5T5WKwtyw=", - "dev": true - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "mongodb": { - "version": "2.2.33", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.33.tgz", - "integrity": "sha1-tTfEcdNKZlG0jzb9vyl1A0Dgi1A=", - "dev": true, - "requires": { - "es6-promise": "3.2.1", - "mongodb-core": "2.1.17", - "readable-stream": "2.2.7" - } - }, - "mpath": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.3.0.tgz", - "integrity": "sha1-elj3iem1/TyUUgY0FXlg8mvV70Q=", - "dev": true - }, - "mpromise": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mpromise/-/mpromise-0.5.5.tgz", - "integrity": "sha1-9bJCWddjrMIlewoMjG2Gb9UXMuY=", - "dev": true - }, - "mquery": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-2.3.3.tgz", - "integrity": "sha512-NC8L14kn+qxJbbJ1gbcEMDxF0sC3sv+1cbRReXXwVvowcwY1y9KoVZFq0ebwARibsadu8lx8nWGvm3V0Pf0ZWQ==", - "dev": true, - "requires": { - "bluebird": "3.5.0", - "debug": "2.6.9", - "regexp-clone": "0.0.1", - "sliced": "0.0.5" - }, - "dependencies": { - "sliced": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz", - "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8=", - "dev": true - } - } - }, - "muri": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/muri/-/muri-1.3.0.tgz", - "integrity": "sha512-FiaFwKl864onHFFUV/a2szAl7X0fxVlSKNdhTf+BM8i8goEgYut8u5P9MqQqIYwvaMxjzVESsoEm/2kfkFH1rg==", - "dev": true - }, - "readable-stream": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", - "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=", - "dev": true - } } }, "mpath": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.1.1.tgz", - "integrity": "sha1-I9qFK3wjLuCX9HWdKcDunNItXkY=", - "dev": true + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.3.0.tgz", + "integrity": "sha1-elj3iem1/TyUUgY0FXlg8mvV70Q=" }, "mpromise": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/mpromise/-/mpromise-0.4.3.tgz", - "integrity": "sha1-7cR6daKhd7DpOCc121Lb7DgIzDM=", - "dev": true + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mpromise/-/mpromise-0.5.5.tgz", + "integrity": "sha1-9bJCWddjrMIlewoMjG2Gb9UXMuY=" }, "mquery": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-1.10.0.tgz", - "integrity": "sha1-hgPwKwtSTResBTmoWZYSTuF7fLM=", - "dev": true, + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-2.3.3.tgz", + "integrity": "sha512-NC8L14kn+qxJbbJ1gbcEMDxF0sC3sv+1cbRReXXwVvowcwY1y9KoVZFq0ebwARibsadu8lx8nWGvm3V0Pf0ZWQ==", "requires": { - "bluebird": "2.10.2", - "debug": "2.2.0", + "bluebird": "3.5.0", + "debug": "2.6.9", "regexp-clone": "0.0.1", "sliced": "0.0.5" }, "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true + "sliced": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz", + "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8=" } } }, @@ -1562,10 +1799,9 @@ } }, "muri": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/muri/-/muri-1.1.0.tgz", - "integrity": "sha1-o6bXTmiogPQzokmnSWnLtmXMCt0=", - "dev": true + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/muri/-/muri-1.3.0.tgz", + "integrity": "sha512-FiaFwKl864onHFFUV/a2szAl7X0fxVlSKNdhTf+BM8i8goEgYut8u5P9MqQqIYwvaMxjzVESsoEm/2kfkFH1rg==" }, "mustache": { "version": "2.3.0", @@ -1575,8 +1811,7 @@ "nan": { "version": "1.8.4", "resolved": "https://registry.npmjs.org/nan/-/nan-1.8.4.tgz", - "integrity": "sha1-PHa1OC6rM+RLdY0oE8qdkuk0LzQ=", - "dev": true + "integrity": "sha1-PHa1OC6rM+RLdY0oE8qdkuk0LzQ=" }, "native-promise-only": { "version": "0.8.1", @@ -1587,7 +1822,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/needle/-/needle-0.11.0.tgz", "integrity": "sha1-AqcbAI6vfVWuifuf12hbe4jXvCk=", - "dev": true, "requires": { "debug": "2.6.9", "iconv-lite": "0.4.19" @@ -1598,17 +1832,26 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, - "nodemailer": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.4.1.tgz", - "integrity": "sha512-1bnszJJXatcHJhLpxQ1XMkLDjCjPKvGKMtRQ73FOsoNln3UQjddEQmz6fAwM3aj0GtQ3dQX9qtMHPelz63GU7A==", - "dev": true + "node-pre-gyp": { + "version": "0.6.36", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz", + "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=", + "requires": { + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.2", + "rc": "1.2.4", + "request": "2.83.0", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "2.2.1", + "tar-pack": "3.4.1" + } }, "nodemailer-direct-transport": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-1.1.0.tgz", "integrity": "sha1-oveHCO5vFuoFc/yClJ0Tj/Fy9iQ=", - "dev": true, "requires": { "smtp-connection": "1.3.8" } @@ -1617,7 +1860,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-1.1.0.tgz", "integrity": "sha1-5sN/MYhaswgOfe089SjErX5pE5g=", - "dev": true, "requires": { "clone": "1.0.3", "nodemailer-wellknown": "0.1.10", @@ -1627,8 +1869,32 @@ "nodemailer-wellknown": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", - "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=", - "dev": true + "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=" + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "oauth-sign": { "version": "0.8.2", @@ -1653,6 +1919,11 @@ "ee-first": "1.1.1" } }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1666,6 +1937,20 @@ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", @@ -1707,7 +1992,7 @@ "methods": "1.1.2", "mime": "1.4.1", "qs": "6.5.1", - "readable-stream": "2.3.3" + "readable-stream": "2.2.7" } } } @@ -1754,8 +2039,12 @@ "rand-token": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/rand-token/-/rand-token-0.4.0.tgz", - "integrity": "sha512-FLNNsir2R+XY8LKsZ+8u/w0qZ4sGit7cpNdznsI77cAVob6UlVPueDKRyjJ3W1Q6FJLgAVH98JvlqqpSaL7NEQ==", - "dev": true + "integrity": "sha512-FLNNsir2R+XY8LKsZ+8u/w0qZ4sGit7cpNdznsI77cAVob6UlVPueDKRyjJ3W1Q6FJLgAVH98JvlqqpSaL7NEQ==" + }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" }, "range-parser": { "version": "1.2.0", @@ -1773,16 +2062,34 @@ "unpipe": "1.0.0" } }, + "rc": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.4.tgz", + "integrity": "sha1-oPYGyq4qO4YrvQ74VILAElsxX6M=", + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", + "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", "requires": { + "buffer-shims": "1.0.0", "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", "string_decoder": "1.0.3", "util-deprecate": "1.0.2" } @@ -1795,8 +2102,7 @@ "regexp-clone": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", - "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=", - "dev": true + "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" }, "request": { "version": "2.83.0", @@ -1824,24 +2130,30 @@ "stringstream": "0.0.5", "tough-cookie": "2.3.3", "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "uuid": "3.2.1" } }, "require_optional": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "dev": true, "requires": { "resolve-from": "2.0.0", - "semver": "5.4.1" + "semver": "5.5.0" } }, "resolve-from": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", - "dev": true + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "7.1.2" + } }, "rttc": { "version": "7.4.0", @@ -1849,6 +2161,13 @@ "integrity": "sha1-vJys1Grdkj3rYklaAZNOt+9hn7Q=", "requires": { "lodash": "3.10.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + } } }, "safe-buffer": { @@ -1857,10 +2176,9 @@ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" }, "send": { "version": "0.16.1", @@ -1868,7 +2186,7 @@ "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", "requires": { "debug": "2.6.9", - "depd": "1.1.1", + "depd": "1.1.2", "destroy": "1.0.4", "encodeurl": "1.0.1", "escape-html": "1.0.3", @@ -1882,6 +2200,25 @@ "statuses": "1.3.1" } }, + "sendgrid": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/sendgrid/-/sendgrid-4.10.0.tgz", + "integrity": "sha1-/WSuOz86lOFKoO5YfbKgEzOwf1M=", + "requires": { + "async.ensureasync": "0.5.2", + "async.queue": "0.5.2", + "bottleneck": "1.16.0", + "debug": "2.6.9", + "lodash.chunk": "4.2.0", + "mailparser": "0.6.2", + "sendgrid-rest": "2.4.0" + } + }, + "sendgrid-rest": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/sendgrid-rest/-/sendgrid-rest-2.4.0.tgz", + "integrity": "sha512-3VRHhTnln17jPQNzBjEHO6u2Y7kLlhVnOvX0aGjr7yRVZpq5LXo0ilAFMsaHUfKVH+jFdCrHMAVLOAdtu6wLJA==" + }, "serve-static": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", @@ -1893,6 +2230,11 @@ "send": "0.16.1" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", @@ -1902,7 +2244,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/should/-/should-7.1.1.tgz", "integrity": "sha1-ZGTEi298Hh8YrASDV4+i3VXCxuA=", - "dev": true, "requires": { "should-equal": "0.5.0", "should-format": "0.3.1", @@ -1913,7 +2254,6 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-0.5.0.tgz", "integrity": "sha1-x5fxNfMGf+tp6+zbMGscP+IbPm8=", - "dev": true, "requires": { "should-type": "0.2.0" } @@ -1922,7 +2262,6 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/should-format/-/should-format-0.3.1.tgz", "integrity": "sha1-LLt4JGFnCs5CkrKx7EaNuM+Z4zA=", - "dev": true, "requires": { "should-type": "0.2.0" } @@ -1930,8 +2269,12 @@ "should-type": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/should-type/-/should-type-0.2.0.tgz", - "integrity": "sha1-ZwfvlVKdmJ3MCY/gdTqx+RNrt/Y=", - "dev": true + "integrity": "sha1-ZwfvlVKdmJ3MCY/gdTqx+RNrt/Y=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "slash": { "version": "1.0.0", @@ -1939,16 +2282,14 @@ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" }, "sliced": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz", - "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8=", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" }, "smtp-connection": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-1.3.8.tgz", - "integrity": "sha1-VYMsIWDPswhuHc2H/RwZ+mG39TY=", - "dev": true + "integrity": "sha1-VYMsIWDPswhuHc2H/RwZ+mG39TY=" }, "sntp": { "version": "2.1.0", @@ -1956,6 +2297,13 @@ "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "requires": { "hoek": "4.2.0" + }, + "dependencies": { + "hoek": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" + } } }, "spark-md5": { @@ -1998,6 +2346,16 @@ "resolved": "https://registry.npmjs.org/string/-/string-3.3.3.tgz", "integrity": "sha1-XqIRzZLSKOGEKUmQpsyXs2anfLA=" }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", @@ -2011,6 +2369,19 @@ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, "superagent": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/superagent/-/superagent-1.8.5.tgz", @@ -2029,6 +2400,11 @@ "reduce-component": "1.0.1" }, "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, "cookiejar": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.0.6.tgz", @@ -2091,7 +2467,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/supertest/-/supertest-1.2.0.tgz", "integrity": "sha1-hQp5X5Bo0vrxngF5n/CZYuDOQ74=", - "dev": true, "requires": { "methods": "1.1.2", "superagent": "1.8.5" @@ -2119,7 +2494,7 @@ "integrity": "sha1-VwwCCq55e9Waqyr2kXK/XWE3aKQ=", "requires": { "bagpipes": "0.0.6", - "config": "1.29.0", + "config": "1.29.2", "cors": "2.8.4", "debug": "2.6.9", "js-yaml": "3.10.0", @@ -2127,6 +2502,11 @@ "swagger-tools": "0.9.16" }, "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, "body-parser": { "version": "1.12.4", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.12.4.tgz", @@ -2183,6 +2563,11 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + }, "ms": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", @@ -2232,7 +2617,7 @@ "requires": { "async": "1.5.2", "body-parser": "1.12.4", - "commander": "2.12.2", + "commander": "2.13.0", "debug": "2.6.9", "js-yaml": "3.10.0", "json-refs": "2.1.7", @@ -2259,7 +2644,7 @@ "requires": { "async": "2.6.0", "body-parser": "1.18.2", - "commander": "2.12.2", + "commander": "2.13.0", "debug": "3.1.0", "js-yaml": "3.10.0", "json-refs": "3.0.3", @@ -2315,11 +2700,6 @@ } } }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" - }, "path-to-regexp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.1.0.tgz", @@ -2344,7 +2724,7 @@ "methods": "1.1.2", "mime": "1.4.1", "qs": "6.5.1", - "readable-stream": "2.3.3" + "readable-stream": "2.2.7" } } } @@ -2355,6 +2735,38 @@ "integrity": "sha1-ls8ODTY7VZ0Lt/8htip6qRDsYHk=", "requires": { "lodash": "3.10.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + } + } + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.1.tgz", + "integrity": "sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg==", + "requires": { + "debug": "2.6.9", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.7", + "rimraf": "2.6.2", + "tar": "2.2.1", + "uid-number": "0.0.6" } }, "topo": { @@ -2363,13 +2775,6 @@ "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", "requires": { "hoek": "2.16.3" - }, - "dependencies": { - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - } } }, "tough-cookie": { @@ -2413,6 +2818,19 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=" + }, + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "1.0.0" + } + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -2443,10 +2861,18 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, - "uuid": { + "uue": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + "resolved": "https://registry.npmjs.org/uue/-/uue-3.1.0.tgz", + "integrity": "sha1-XWfTcDDmbv67tLiqxG2vm1W++/Y=", + "requires": { + "extend": "3.0.1" + } + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" }, "validator": { "version": "7.2.0", @@ -2468,6 +2894,14 @@ "extsprintf": "1.3.0" } }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "requires": { + "string-width": "1.0.2" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -2492,7 +2926,7 @@ "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.19.0.tgz", "integrity": "sha512-V94f3ODuluBS4kQLLjNhwoMek0dyIXCsvNu/A17dAyJ6sMhT5KkJQwSn07R0naByLIXJWMDk+ruMfI/3G3hS4Q==", "requires": { - "commander": "2.12.2", + "commander": "2.13.0", "lodash.get": "4.4.2", "lodash.isequal": "4.5.0", "validator": "9.2.0" diff --git a/package.json b/package.json index 6476d123..434ded08 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cboard-api", - "version": "0.0.1", + "version": "0.0.2", "private": true, "description": "New Swagger API Project", "keywords": [], @@ -16,19 +16,24 @@ "jsonwebtoken": "^7.3.0", "swagger-tools": "^0.10.1", "validator": "^7.0.0", - "yamljs": "^0.2.9" - }, - "devDependencies": { - "bcryptjs": "^2.3.0", - "email-verification": "^0.4.6", + "yamljs": "^0.2.9", + "connect-mongo": "^1.3.2", + "express-session": "^1.15.2", "mongoose": "^4.4.6", + "email-verification": "^0.4.6", "rand-token": "^0.4.0", + "bcryptjs": "^2.3.0", "should": "^7.1.0", "supertest": "^1.0.0", - "nodemailer": "^4.4.1" + "sendgrid": "^4.7.1", + "bcrypt": "^1.0.2" }, + "devDependencies": {}, "scripts": { "start": "node app.js", "test": "swagger project test" + }, + "engines": { + "node": ">=6.0" } }