diff --git a/.eslintrc.json b/.eslintrc.json index 14152dfcb9ae24e77005322efbbfbe811504ae58..bac0de40f23bdc06babf20e5c715f05b3f8b6c41 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -7,6 +7,8 @@ "import" ], "rules": { + "jsx-a11y/heading-has-content": [ "off" ], + "jsx-a11y/anchor-has-content": [ "off" ], "indent": [ "error", 4 ], "no-unused-vars": [ "error", { "args": "none" }], "no-param-reassign": [ "off" ] diff --git a/gulpfile.babel.js b/gulpfile.babel.js index acc0e918ad5bea19aad613165a84e547648520a6..e67a5244b4d90816abe3d27d350be349695ea7ad 100644 --- a/gulpfile.babel.js +++ b/gulpfile.babel.js @@ -47,16 +47,17 @@ gulp.task('compile', ['lint'], () => { .pipe(babel()) // compile only modified files // .pipe(cache.cache()) // cache compiled files .pipe(gulp.dest('build')); // move compiled files to build directory +}); +gulp.task('build', ['compile'], () => { + var filesToCopy = [ 'config.json', 'package.json' ]; // copy configuration file to build directory - gulp.src('config.json') + gulp.src(filesToCopy) .pipe(gulp.dest('build')); createLogDir(); }); -gulp.task('build', ['compile']); - gulp.task('docco', () => { gulp.src('./src/**/*.js') .pipe(docco()) diff --git a/package.json b/package.json index a7056dc915f19875538b5f4de96bda8d4fa764d9..d923ed1f1a30bd1b7753d665a08407233a5bb3e0 100644 --- a/package.json +++ b/package.json @@ -4,32 +4,37 @@ "author": "C3SL", "description": "Simulador custo aluno-qualidade", "private": true, + "engines": { + "node": ">= 6.8.1" + }, + "engineStrict": true, "scripts": { "start": "cd build && forever start server.js || node server.js", "test": "cd build && mocha" }, "dependencies": { - "apicache": "0.0.14", - "bcrypt": "^0.8.7", + "apicache": "0.7.0", + "bcrypt-nodejs": "0.0.3", "body-parser": "^1.13.1", "chai": "^3.5.0", "chai-http": "^3.0.0", + "chalk": "^1.1.3", "compression": "^1.6.2", "cookie-parser": "^1.3.5", "cors": "^2.7.1", "csv-express": "^1.1.0", - "debug": "~2.0.x", + "debug": "~2.3.x", "dirty-chai": "^1.2.2", "express": "^4.13.0", - "faker": "^2.1.5", + "faker": "^3.1.0", "forever": "^0.15.2", - "js2xmlparser": "^1.0.0", + "js2xmlparser": "^2.0.2", "jwt-simple": "^0.5.0", "method-override": "^2.3.3", - "mocha": "^2.5.3", + "mocha": "^3.1.2", "monetdb-pool": "0.0.8", "mongoose": "^4.6.0", - "nconf": "^0.6.x", + "nconf": "^0.8.x", "passport": "^0.3.2", "squel": "^5.4.2", "winston": "^2.2.0" @@ -45,9 +50,9 @@ "chai-xml": "^0.3.1", "docdash": "^0.4.0", "eslint": "^3.3.1", - "eslint-config-airbnb": "^10.0.1", - "eslint-plugin-import": "^1.13.0", - "eslint-plugin-jsx-a11y": "^2.1.0", + "eslint-config-airbnb": "^13.0.0", + "eslint-plugin-import": "^2.2.0", + "eslint-plugin-jsx-a11y": "^2.2.3", "eslint-plugin-react": "^6.1.1", "gulp": "^3.9.1", "gulp-babel": "^6.1.2", @@ -55,9 +60,9 @@ "gulp-docco": "0.0.4", "gulp-eslint": "^3.0.1", "gulp-file-cache": "0.0.1", - "gulp-function": "^1.3.6", + "gulp-function": "^2.2.0", "gulp-istanbul": "^1.1.1", - "gulp-jsdoc3": "^0.3.0", + "gulp-jsdoc3": "^1.0.1", "gulp-mocha": "^3.0.1", "gulp-nodemon": "^2.1.0", "gulp-plumber": "^1.1.0", diff --git a/src/libs/middlewares/checkVersion.js b/src/libs/middlewares/checkVersion.js new file mode 100644 index 0000000000000000000000000000000000000000..c3187adba9081e2a992d09df36e839efc23dfca0 --- /dev/null +++ b/src/libs/middlewares/checkVersion.js @@ -0,0 +1,22 @@ +const curPath = process.cwd(); +const libs = `${process.cwd()}/libs`; +const log = require(`${libs}/log`)(module); +const chalk = require('chalk'); +const packageConf = require(`${curPath}/package.json`); + +module.exports = () => { + // Parse version number from strings such as 'v4.2.0' or `>=4.0.0' + function parseVersionNumber(versionString) { + return parseFloat(versionString.replace(/[^\d\.]/g, '')); + } + // Ensure minimum supported node version is used + const minNodeVersion = parseVersionNumber(packageConf.engines.node); + const currentNodeVersion = parseVersionNumber(process.version); + if (minNodeVersion > currentNodeVersion) { + log.error(chalk.red(`You must upgrade node to >=${minNodeVersion}.x to use simcaq-node!`)); + return false; + } else { + log.info('Node version should work!'); + return true; + } +}; diff --git a/src/libs/middlewares/response.js b/src/libs/middlewares/response.js index 580c16f5bd7470d20c622565954234f873f56b54..cb2f4ca3a14bf9b2240ce1ebeeec3e89c05746c4 100644 --- a/src/libs/middlewares/response.js +++ b/src/libs/middlewares/response.js @@ -12,7 +12,7 @@ function response(value) { res.attachment(`${value}.csv`); res.csv(req.result); } else if (req.query.format === 'xml') { - res.send(xml('result', JSON.stringify({ [value]: req.result }))); + res.send(xml.parse('result', { [value]: req.result })); } else { res.json({ result: req.result }); } diff --git a/src/libs/models/user.js b/src/libs/models/user.js index 8c4f92a204ef9c3b410fb656c16c4af9ad6c7152..83315b8238e97ce11daf02a8234824ff660f3d7b 100644 --- a/src/libs/models/user.js +++ b/src/libs/models/user.js @@ -1,5 +1,5 @@ const mongoose = require('mongoose'); -const bcrypt = require('bcrypt'); +const bcrypt = require('bcrypt-nodejs'); const libs = `${process.cwd()}/libs`; const log = require(`${libs}/log`)(module); const Schema = mongoose.Schema; diff --git a/src/server.js b/src/server.js index 2ebb897dace886c2352ad63737f1634eacc40b38..ccc5e884702641fca04e0fc0480860a4b72300ef 100644 --- a/src/server.js +++ b/src/server.js @@ -8,6 +8,13 @@ const log = require(`${libs}/log`)(module); const app = require(`${libs}/app`); +const compatVersion = require(`${libs}/middlewares/checkVersion`); + +// Check if Node version is compatible +if (!compatVersion()) { + process.exit(1); +} + // Set default port: first environment variable PORT, then configuration and last 3000 app.set('port', process.env.PORT || config.port || 3000); process.env.NODE_ENV = process.env.NODE_ENV || 'development';