From 5d20988b10bceeff3c452f689189c997bf220e8e Mon Sep 17 00:00:00 2001 From: Liran Tal Date: Tue, 14 Oct 2014 12:14:17 +0300 Subject: [PATCH 01/81] adding support for configurable session cookie parameters for express --- config/env/all.js | 23 +++++++++++++++++++++++ config/express.js | 4 +++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/config/env/all.js b/config/env/all.js index 33ca9948..17792288 100644 --- a/config/env/all.js +++ b/config/env/all.js @@ -8,8 +8,31 @@ module.exports = { }, port: process.env.PORT || 3000, templateEngine: 'swig', + + // The secret should be set to a non-guessable string that + // is used to compute a session hash sessionSecret: 'MEAN', + + // The name of the MongoDB collection to store sessions in sessionCollection: 'sessions', + + // The session cookie settings + sessionCookie: { + path: '/', + httpOnly: true, + // If secure is set to true then it will cause the cookie to be set + // only when SSL-enabled (HTTPS) is used, and otherwise it won't + // set a cookie. 'true' is recommended yet it requires the above + // mentioned pre-requisite. + secure: false, + // Only set the maxAge to null if the cookie shouldn't be expired + // at all. The cookie will expunge when the browser is closed. + maxAge: null + }, + + // The session cookie name + sessionName: 'connect.sid', + assets: { lib: { css: [ diff --git a/config/express.js b/config/express.js index bea1c88d..2a577ce9 100755 --- a/config/express.js +++ b/config/express.js @@ -93,7 +93,9 @@ module.exports = function(db) { store: new mongoStore({ db: db.connection.db, collection: config.sessionCollection - }) + }), + cookie: config.sessionCookie, + name: config.sessionName })); // use passport session From 84efda1eb04209fe83e08e7e1b6f25d2ba3aad16 Mon Sep 17 00:00:00 2001 From: Liran Tal Date: Tue, 14 Oct 2014 12:18:06 +0300 Subject: [PATCH 02/81] fixing identations --- config/env/all.js | 30 +++++++++++++++--------------- config/express.js | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/config/env/all.js b/config/env/all.js index 17792288..eee7db53 100644 --- a/config/env/all.js +++ b/config/env/all.js @@ -10,28 +10,28 @@ module.exports = { templateEngine: 'swig', // The secret should be set to a non-guessable string that - // is used to compute a session hash + // is used to compute a session hash sessionSecret: 'MEAN', // The name of the MongoDB collection to store sessions in sessionCollection: 'sessions', // The session cookie settings - sessionCookie: { - path: '/', - httpOnly: true, - // If secure is set to true then it will cause the cookie to be set - // only when SSL-enabled (HTTPS) is used, and otherwise it won't - // set a cookie. 'true' is recommended yet it requires the above - // mentioned pre-requisite. - secure: false, - // Only set the maxAge to null if the cookie shouldn't be expired - // at all. The cookie will expunge when the browser is closed. - maxAge: null - }, + sessionCookie: { + path: '/', + httpOnly: true, + // If secure is set to true then it will cause the cookie to be set + // only when SSL-enabled (HTTPS) is used, and otherwise it won't + // set a cookie. 'true' is recommended yet it requires the above + // mentioned pre-requisite. + secure: false, + // Only set the maxAge to null if the cookie shouldn't be expired + // at all. The cookie will expunge when the browser is closed. + maxAge: null + }, - // The session cookie name - sessionName: 'connect.sid', + // The session cookie name + sessionName: 'connect.sid', assets: { lib: { diff --git a/config/express.js b/config/express.js index 2a577ce9..30d05b4a 100755 --- a/config/express.js +++ b/config/express.js @@ -95,7 +95,7 @@ module.exports = function(db) { collection: config.sessionCollection }), cookie: config.sessionCookie, - name: config.sessionName + name: config.sessionName })); // use passport session From 619c7f2642ffe726dcaa61296dcbfe8eafb8bb6e Mon Sep 17 00:00:00 2001 From: Urs Wolfer Date: Thu, 23 Oct 2014 12:34:52 +0200 Subject: [PATCH 03/81] Show error message when sending password request mail fails It used to fail silently (client only displays error when a message is available). --- app/controllers/users/users.password.server.controller.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/controllers/users/users.password.server.controller.js b/app/controllers/users/users.password.server.controller.js index 7ffb04e8..0934e64f 100644 --- a/app/controllers/users/users.password.server.controller.js +++ b/app/controllers/users/users.password.server.controller.js @@ -77,6 +77,10 @@ exports.forgot = function(req, res, next) { res.send({ message: 'An email has been sent to ' + user.email + ' with further instructions.' }); + } else { + return res.status(400).send({ + message: 'Failure sending email' + }); } done(err); From 86d38df702b81f29ce0b496c4af30b6f2397dfc5 Mon Sep 17 00:00:00 2001 From: Dan Bunker Date: Mon, 3 Nov 2014 12:43:52 -0700 Subject: [PATCH 04/81] typo removed extra comma --- gruntfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gruntfile.js b/gruntfile.js index 9bd7a8c6..9d4a0704 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -31,7 +31,7 @@ module.exports = function(grunt) { clientViews: { files: watchFiles.clientViews, options: { - livereload: true, + livereload: true } }, clientJS: { From 7174625bc1f43295dff81443b1aef162cad079c5 Mon Sep 17 00:00:00 2001 From: Liran Tal Date: Mon, 3 Nov 2014 23:20:28 +0200 Subject: [PATCH 05/81] added domain configuration option if required to set the cookie for a specific host --- config/env/all.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/config/env/all.js b/config/env/all.js index eee7db53..ec52a09b 100644 --- a/config/env/all.js +++ b/config/env/all.js @@ -27,7 +27,10 @@ module.exports = { secure: false, // Only set the maxAge to null if the cookie shouldn't be expired // at all. The cookie will expunge when the browser is closed. - maxAge: null + maxAge: null, + // To set the cookie in a specific domain uncomment the following + // setting: + // domain: 'yourdomain.com' }, // The session cookie name From d27baeac1fefc93450792e84120757c3dcf05a3d Mon Sep 17 00:00:00 2001 From: Andrew McKinlay Date: Mon, 3 Nov 2014 19:10:37 -0500 Subject: [PATCH 06/81] Remove unecessary comment in karma.conf.js --- karma.conf.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/karma.conf.js b/karma.conf.js index e85f39b7..0f5ab311 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -16,7 +16,6 @@ module.exports = function(config) { // Test results reporter to use // Possible values: 'dots', 'progress', 'junit', 'growl', 'coverage' - //reporters: ['progress'], reporters: ['progress'], // Web server port @@ -49,4 +48,4 @@ module.exports = function(config) { // If true, it capture browsers, run tests and exit singleRun: true }); -}; \ No newline at end of file +}; From 325a19e2763dcd1be5683d98ce95f9ac343a2a9d Mon Sep 17 00:00:00 2001 From: Rupert Muchembled Date: Wed, 5 Nov 2014 20:33:01 +0000 Subject: [PATCH 07/81] Correctly encode and decode password salt The user password salt should be encoded with Base64 before being saved to the database. The current code adds an unecessary step of converting the result of crypto.randomBytes() (which already returns a SlowBuffer) to a Base64 string and back again to a Buffer, and misses the final step of converting the Buffer's bytes back to a Base64 string. Because of this, the salt stored in the database is garbled. This is inconvenient when manipulating the data in a terminal or text editor. When generating the password hash, the crypto.pbkdf2Sync() method creates a new Buffer directly from the data supplied. Due to the incorrect encoding of the salt, entropy is lost at this step, weakening the security of stored passwords against brute force attacks. --- app/models/user.server.model.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/user.server.model.js b/app/models/user.server.model.js index 9370da01..98c308f0 100755 --- a/app/models/user.server.model.js +++ b/app/models/user.server.model.js @@ -96,7 +96,7 @@ var UserSchema = new Schema({ */ UserSchema.pre('save', function(next) { if (this.password && this.password.length > 6) { - this.salt = new Buffer(crypto.randomBytes(16).toString('base64'), 'base64'); + this.salt = crypto.randomBytes(16).toString('base64'); this.password = this.hashPassword(this.password); } @@ -108,7 +108,7 @@ UserSchema.pre('save', function(next) { */ UserSchema.methods.hashPassword = function(password) { if (this.salt && password) { - return crypto.pbkdf2Sync(password, this.salt, 10000, 64).toString('base64'); + return crypto.pbkdf2Sync(password, new Buffer(this.salt, 'base64'), 10000, 64).toString('base64'); } else { return password; } From 30fd05c5c21fc6e28446eb67dcd122d58b60f4a3 Mon Sep 17 00:00:00 2001 From: Ilan Biala Date: Mon, 10 Nov 2014 09:42:59 -0500 Subject: [PATCH 08/81] Update package.json --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 80638c37..7807d271 100755 --- a/package.json +++ b/package.json @@ -9,8 +9,8 @@ "url": "https://github.com/meanjs/mean.git" }, "engines": { - "node": "0.10.x", - "npm": "1.4.x" + "node": ">=0.10.28", + "npm": ">=1.4.28" }, "scripts": { "start": "grunt", @@ -70,4 +70,4 @@ "karma-firefox-launcher": "~0.1.3", "karma-phantomjs-launcher": "~0.1.2" } -} \ No newline at end of file +} From d5cf18a1f54deb322205ad33d2eb579bc587bcc7 Mon Sep 17 00:00:00 2001 From: Lawrence Date: Mon, 10 Nov 2014 17:23:45 +0000 Subject: [PATCH 09/81] Abstract nodemailer createTransport Currently createTransport is unnecessarily called upon every time a password request is made. --- app/controllers/users/users.password.server.controller.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/users/users.password.server.controller.js b/app/controllers/users/users.password.server.controller.js index 1d4ae65e..a80f5553 100644 --- a/app/controllers/users/users.password.server.controller.js +++ b/app/controllers/users/users.password.server.controller.js @@ -12,6 +12,8 @@ var _ = require('lodash'), nodemailer = require('nodemailer'), async = require('async'), crypto = require('crypto'); + +var smtpTransport = nodemailer.createTransport(config.mailer.options); /** * Forgot for reset password (forgot POST) @@ -65,7 +67,6 @@ exports.forgot = function(req, res, next) { }, // If valid email, send reset email using service function(emailHTML, user, done) { - var smtpTransport = nodemailer.createTransport(config.mailer.options); var mailOptions = { to: user.email, from: config.mailer.from, @@ -167,7 +168,6 @@ exports.reset = function(req, res, next) { }, // If valid email, send reset email using service function(emailHTML, user, done) { - var smtpTransport = nodemailer.createTransport(config.mailer.options); var mailOptions = { to: user.email, from: config.mailer.from, @@ -242,4 +242,4 @@ exports.changePassword = function(req, res) { message: 'User is not signed in' }); } -}; \ No newline at end of file +}; From fd98f266dbf20ed02e225beebbc7691de08d5637 Mon Sep 17 00:00:00 2001 From: Ilan Biala Date: Tue, 11 Nov 2014 16:39:10 -0500 Subject: [PATCH 10/81] Update .travis.yml --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 0abd7e4b..708607e3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,8 @@ language: node_js node_js: - "0.10" + - "0.11" env: - NODE_ENV=travis services: - - mongodb \ No newline at end of file + - mongodb From 959d7e7423201c4310467e6fe0ba55532a9ee00b Mon Sep 17 00:00:00 2001 From: Wesley Smith Date: Sat, 15 Nov 2014 18:39:27 -0700 Subject: [PATCH 11/81] Fixed two tiny typos. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6f7d5f4f..5561c4fb 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ $ npm install This command does a few things: * First it will install the dependencies needed for the application to run. * If you're running in a development environment, it will then also install development dependencies needed for testing and running your application. -* Finally, when the install process is over, npm will initiate a bower install command to install all the front-end modules needed for the application +* Finally, when the install process is over, npm will initiate a bower install command to install all the front-end modules needed for the application. ## Running Your Application After the install process is over, you'll be able to run your application using Grunt, just run grunt default task: @@ -110,7 +110,7 @@ Windows users can follow instructions found [here](http://www.websense.com/suppo To generate the key and certificate and place them in the *config/sslcert* folder. ## Getting Started With MEAN.JS -You have your application running but there are a lot of stuff to understand, we recommend you'll go over the [Official Documentation](http://meanjs.org/docs.html). +You have your application running but there is a lot of stuff to understand, we recommend you'll go over the [Official Documentation](http://meanjs.org/docs.html). In the docs we'll try to explain both general concepts of MEAN components and give you some guidelines to help you improve your development process. We tried covering as many aspects as possible, and will keep update it by your request, you can also help us develop the documentation better by checking out the *gh-pages* branch of this repository. ## Community From 873e91f9e2505bc06b43d6febbb314fbd70eada4 Mon Sep 17 00:00:00 2001 From: Wesley Smith Date: Sun, 16 Nov 2014 19:14:13 -0700 Subject: [PATCH 12/81] Fixed error message for non-unique username. --- app/models/user.server.model.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/user.server.model.js b/app/models/user.server.model.js index 9370da01..840464af 100755 --- a/app/models/user.server.model.js +++ b/app/models/user.server.model.js @@ -50,7 +50,7 @@ var UserSchema = new Schema({ }, username: { type: String, - unique: 'testing error message', + unique: 'Username already exists', required: 'Please fill in a username', trim: true }, From e4519bc40759b1c3ae8a4d45443fcd781d3335f9 Mon Sep 17 00:00:00 2001 From: Wesley Smith Date: Mon, 17 Nov 2014 01:53:51 -0700 Subject: [PATCH 13/81] Removed unneeded comas from gruntfile. --- gruntfile.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gruntfile.js b/gruntfile.js index 45554857..fd0b02a2 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -31,7 +31,7 @@ module.exports = function(grunt) { clientViews: { files: watchFiles.clientViews, options: { - livereload: true, + livereload: true } }, clientJS: { @@ -59,7 +59,7 @@ module.exports = function(grunt) { }, csslint: { options: { - csslintrc: '.csslintrc', + csslintrc: '.csslintrc' }, all: { src: watchFiles.clientCSS From 374b45c1260cab3a8c26706241a0496152f0856d Mon Sep 17 00:00:00 2001 From: Liran Tal Date: Tue, 18 Nov 2014 23:00:52 +0200 Subject: [PATCH 14/81] providing more verbose output for current nodejs app configuration on application startup --- server.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/server.js b/server.js index 98d108bb..a88f8fec 100755 --- a/server.js +++ b/server.js @@ -33,4 +33,9 @@ app.listen(config.port); exports = module.exports = app; // Logging initialization -console.log('MEAN.JS application started on port ' + config.port); \ No newline at end of file +console.log('--'); +console.log(chalk.green(config.app.title + ' application started')); +console.log(chalk.green('Environment:\t\t\t' + process.env.NODE_ENV)); +console.log(chalk.green('Port:\t\t\t\t' + config.port)); +console.log(chalk.green('Database:\t\t\t' + config.db)); +console.log('--'); \ No newline at end of file From adf6e0ce65d35e280db85d868e9bca98f2e2d20c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Je=CC=81ro=CC=82me=20Gagnon-Voyer?= Date: Wed, 19 Nov 2014 17:17:55 -0500 Subject: [PATCH 15/81] update to angular-bootstrap 0.12.0 + fix breaking changes details on breaking changes: https://github.com/angular-ui/bootstrap/blob/eec68d81f4f72363d37493c495b 892347bdb9e1b/CHANGELOG.md Conflicts: bower.json --- bower.json | 3 ++- public/modules/core/views/header.client.view.html | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/bower.json b/bower.json index 3d7a7451..a49e0339 100644 --- a/bower.json +++ b/bower.json @@ -9,7 +9,8 @@ "angular-animate": "~1.2", "angular-mocks": "~1.2", "angular-bootstrap": "~0.11.2", + "angular-bootstrap": "~0.12.0", "angular-ui-utils": "~0.1.1", "angular-ui-router": "~0.2.11" } -} \ No newline at end of file +} diff --git a/public/modules/core/views/header.client.view.html b/public/modules/core/views/header.client.view.html index eb6ac6df..541aa3a8 100644 --- a/public/modules/core/views/header.client.view.html +++ b/public/modules/core/views/header.client.view.html @@ -11,7 +11,7 @@ - \ No newline at end of file + diff --git a/modules/core/server/views/layout.server.view.html b/modules/core/server/views/layout.server.view.html index c5b35046..8fefeb6c 100644 --- a/modules/core/server/views/layout.server.view.html +++ b/modules/core/server/views/layout.server.view.html @@ -72,4 +72,4 @@ {% endif %} - \ No newline at end of file + diff --git a/modules/users/server/config/users.server.config.js b/modules/users/server/config/users.server.config.js index 84d20558..fa883bd2 100644 --- a/modules/users/server/config/users.server.config.js +++ b/modules/users/server/config/users.server.config.js @@ -34,4 +34,4 @@ module.exports = function(app, db) { // Add passport's middleware app.use(passport.initialize()); app.use(passport.session()); -}; \ No newline at end of file +}; diff --git a/package.json b/package.json index 407d9a5d..ba7f71c7 100644 --- a/package.json +++ b/package.json @@ -95,4 +95,4 @@ "karma-firefox-launcher": "~0.1.3", "karma-phantomjs-launcher": "~0.1.2" } -} \ No newline at end of file +} diff --git a/server.js b/server.js index 4e697a2b..fd0a06d3 100644 --- a/server.js +++ b/server.js @@ -31,4 +31,4 @@ mongoose.connect(function (db) { console.log(chalk.green('HTTPs:\t\t\t\ton')); } console.log('--'); -}); \ No newline at end of file +}); From 75aad2e0ba9d9be2ca3a7de847bf5bafa8f2bfac Mon Sep 17 00:00:00 2001 From: Mikael Korpela Date: Sun, 5 Jul 2015 23:09:53 +0300 Subject: [PATCH 71/81] Sorting out .gitignore - remove access.log (*.log is enough) - Move local.js config under MEAN.JS - Rename iOS/Apple => OS (this is a mix of windows/osx stuff anyways) --- .gitignore | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 142f28da..0d310988 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,9 @@ -# iOS / Apple +# OS # =========== .DS_Store ehthumbs.db Icon? Thumbs.db -config/env/local.js # Node and related ecosystem # ========================== @@ -18,11 +17,10 @@ app/tests/coverage/ # MEAN.js app and assets # ====================== -config/sslcerts/*.pem -access.log public/dist/ uploads modules/users/client/img/profile/uploads +config/env/local.js *.pem # Sublime editor From d4c880b89ce8fba3a85676b45da044b49028fe6d Mon Sep 17 00:00:00 2001 From: Ryan Hutchison Date: Sun, 5 Jul 2015 16:15:06 -0400 Subject: [PATCH 72/81] update dependencies --- package.json | 138 +++++++++++++++++++++++++-------------------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/package.json b/package.json index ba7f71c7..f1517813 100644 --- a/package.json +++ b/package.json @@ -18,81 +18,81 @@ "postinstall": "bower install --config.interactive=false" }, "dependencies": { - "express": "~4.12.3", - "express-session": "~1.10.4", - "serve-favicon": "~2.1.6", - "body-parser": "~1.12.2", - "cookie-parser": "~1.3.2", - "compression": "~1.4.3", - "method-override": "~2.3.0", - "morgan": "~1.5.2", - "multer": "0.1.6", - "connect-mongo": "~0.8.0", - "connect-flash": "~0.1.1", - "helmet": "~0.7.1", - "consolidate": "~0.11.0", - "swig": "~1.4.1", - "mongoose": "~3.8.8", - "passport": "~0.2.0", - "passport-local": "~1.0.0", - "passport-facebook": "~1.0.2", - "passport-twitter": "~1.0.2", - "passport-linkedin": "~0.1.3", - "passport-google-oauth": "~0.1.5", - "passport-github": "~0.1.5", "acl": "~0.4.4", - "socket.io": "~1.1.0", - "lodash": "~2.4.1", - "forever": "~0.11.0", - "bower": "~1.3.8", + "async": "^1.3.0", + "body-parser": "^1.13.1", + "bower": "^1.4.1", + "chalk": "^1.1.0", + "compression": "^1.5.0", + "connect-flash": "~0.1.1", + "connect-mongo": "~0.8.1", + "consolidate": "~0.13.1", + "cookie-parser": "^1.3.2", + "express": "^4.13.0", + "express-session": "^1.11.3", + "forever": "~0.14.2", + "glob": "^5.0.13", "grunt-cli": "~0.1.13", - "chalk": "~0.5.1", - "glob": "~5.0.0", - "async": "~0.9.0", - "nodemailer": "~1.3.0" + "helmet": "~0.9.1", + "lodash": "^3.10.0", + "method-override": "^2.3.3", + "mongoose": "^4.0.6", + "morgan": "^1.6.1", + "multer": "0.1.8", + "nodemailer": "^1.4.0", + "passport": "~0.2.2", + "passport-facebook": "^2.0.0", + "passport-github": "~0.1.5", + "passport-google-oauth": "~0.2.0", + "passport-linkedin": "~0.1.3", + "passport-local": "^1.0.0", + "passport-twitter": "^1.0.2", + "serve-favicon": "^2.3.0", + "socket.io": "^1.3.5", + "swig": "^1.4.2" }, "devDependencies": { - "supertest": "~0.14.0", - "should": "~4.1.0", - "grunt-env": "~0.4.1", - "grunt-node-inspector": "~0.1.3", + "grunt-concurrent": "^2.0.0", + "grunt-contrib-copy": "~0.8.0", + "grunt-contrib-csslint": "~0.4.0", + "grunt-contrib-cssmin": "~0.12.3", + "grunt-contrib-jshint": "~0.11.2", + "grunt-contrib-less": "^1.0.1", + "grunt-contrib-sass": "~0.9.2", + "grunt-contrib-uglify": "~0.9.1", "grunt-contrib-watch": "~0.6.1", - "grunt-contrib-jshint": "~0.10.0", - "grunt-contrib-csslint": "^0.3.1", - "grunt-ng-annotate": "~0.4.0", - "grunt-contrib-uglify": "~0.6.0", - "grunt-contrib-cssmin": "~0.10.0", - "grunt-nodemon": "~0.3.0", - "grunt-contrib-copy": "0.8", - "grunt-concurrent": "~1.0.0", - "grunt-mocha-test": "~0.12.1", - "grunt-karma": "~0.9.0", - "grunt-protractor-runner": "1.1.4", - "grunt-contrib-sass": "~0.8.1", - "grunt-contrib-less": "~0.12.0", - "load-grunt-tasks": "~1.0.0", - "gulp": "~3.8.9", - "run-sequence": "~1.0.1", - "gulp-rename": "~1.2.0", - "gulp-concat": "~2.4.1", - "gulp-nodemon": "~1.0.4", - "gulp-livereload": "~2.1.1", - "gulp-jshint": "~1.8.6", + "grunt-env": "~0.4.4", + "grunt-karma": "~0.11.2", + "grunt-mocha-test": "~0.12.7", + "grunt-ng-annotate": "^1.0.1", + "grunt-node-inspector": "~0.2.0", + "grunt-nodemon": "~0.4.0", + "grunt-protractor-runner": "^2.0.0", + "gulp": "^3.9.0", + "gulp-concat": "^2.6.0", "gulp-csslint": "~0.1.5", - "gulp-ng-annotate": "~0.3.3", - "gulp-uglify": "~1.0.1", - "gulp-cssmin": "~0.1.6", - "gulp-mocha": "~1.1.1", + "gulp-cssmin": "~0.1.7", + "gulp-jshint": "^1.11.2", "gulp-karma": "~0.0.4", - "gulp-protractor": "~0.0.11", - "gulp-sass": "~1.3.3", - "gulp-less": "~1.3.6", - "gulp-load-plugins": "~0.7.0", - "karma": "~0.12.0", - "karma-jasmine": "~0.2.1", - "karma-coverage": "~0.2.0", - "karma-chrome-launcher": "~0.1.2", - "karma-firefox-launcher": "~0.1.3", - "karma-phantomjs-launcher": "~0.1.2" + "gulp-less": "^3.0.3", + "gulp-livereload": "^3.8.0", + "gulp-load-plugins": "^1.0.0-rc.1", + "gulp-mocha": "^2.1.2", + "gulp-ng-annotate": "^1.0.0", + "gulp-nodemon": "^2.0.3", + "gulp-protractor": "^1.0.0", + "gulp-rename": "^1.2.2", + "gulp-sass": "^2.0.3", + "gulp-uglify": "^1.2.0", + "karma": "~0.12.37", + "karma-chrome-launcher": "~0.2.0", + "karma-coverage": "~0.4.2", + "karma-firefox-launcher": "~0.1.6", + "karma-jasmine": "~0.3.6", + "karma-phantomjs-launcher": "~0.2.0", + "load-grunt-tasks": "^3.2.0", + "run-sequence": "^1.1.1", + "should": "^7.0.1", + "supertest": "^1.0.1" } } From 7d8cea159bffd5cfe53d24dcb8d0d7af181cc2b1 Mon Sep 17 00:00:00 2001 From: Ryan Hutchison Date: Sun, 5 Jul 2015 17:50:41 -0400 Subject: [PATCH 73/81] load bootstrap (doh) --- config/assets/default.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/assets/default.js b/config/assets/default.js index 42f1b106..cb56bf99 100644 --- a/config/assets/default.js +++ b/config/assets/default.js @@ -8,6 +8,8 @@ module.exports = { 'public/lib/bootstrap/dist/css/bootstrap-theme.css' ], js: [ + 'public/lib/jquery/dist/jquery.js', + 'public/lib/bootstrap/dist/js/bootstrap.js', 'public/lib/angular/angular.js', 'public/lib/angular-resource/angular-resource.js', 'public/lib/angular-animate/angular-animate.js', From 30c916030eb7e4152ea3e8f58bab2c45ed7a7082 Mon Sep 17 00:00:00 2001 From: Ryan Hutchison Date: Sun, 5 Jul 2015 17:51:04 -0400 Subject: [PATCH 74/81] setup dropdown menu --- modules/core/client/views/header.client.view.html | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/modules/core/client/views/header.client.view.html b/modules/core/client/views/header.client.view.html index dec84ff9..d63c3783 100644 --- a/modules/core/client/views/header.client.view.html +++ b/modules/core/client/views/header.client.view.html @@ -10,11 +10,8 @@