diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..51a7893 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,9 @@ +{ + "env": { + "node": true + }, + "rules": { + "indent": [2, 2], + "quotes": "single" + } +} diff --git a/lib/index.js b/lib/index.js index f933f5c..55162fe 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,12 +1,10 @@ -/*jslint indent: 2*/ -/*global require: true, module: true*/ - (function () { 'use strict'; - var vary = require('vary'), - defaults = { + var vary = require('vary'); + + var defaults = { origin: '*', methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', preflightContinue: false @@ -15,20 +13,22 @@ function varyHeadersOn(vary, headers) { vary = Array.isArray(vary) ? vary : [vary]; headers = Array.isArray(headers) ? headers.slice(0) : [headers]; - for (var i = 0; i < vary.length; ++i) + for (var i = 0; i < vary.length; ++i) { headers.push({ key: 'Vary', value: vary[i] }); + } return headers; } - + function isString(what) { return typeof what === 'string' || what instanceof String; } - + function matchOrigin(origin, check) { if (Array.isArray(check)) { for (var i = 0; i < check.length; ++i) { - if (matchOrigin(origin, check[i])) + if (matchOrigin(origin, check[i])) { return true; + } } return false; } else if (isString(check)) { @@ -100,7 +100,7 @@ return null; } - function configureExposedHeaders(options, req) { + function configureExposedHeaders(options) { var headers = options.exposedHeaders; if (!headers) { return null; @@ -192,11 +192,9 @@ if (typeof o === 'function') { optionsCallback = o; } else { - /*jslint unparam: true*/ // `req` is part of the signature, but isn't used for this stub optionsCallback = function (req, cb) { cb(null, o); }; - /*jslint unparam: false*/ } return function (req, res, next) { @@ -208,17 +206,15 @@ if (options.origin && typeof options.origin === 'function') { originCallback = options.origin; } else if (options.origin) { - /*jslint unparam: true*/ // `origin` is part of the signature, but isn't used for this stub originCallback = function (origin, cb) { cb(null, options.origin); }; - /*jslint unparam: false*/ } if (originCallback) { - originCallback(req.headers.origin, function (err, origin) { - if (err || !origin) { - next(err); + originCallback(req.headers.origin, function (err2, origin) { + if (err2 || !origin) { + next(err2); } else { var corsOptions = Object.create(options); corsOptions.origin = origin; diff --git a/package.json b/package.json index a3c5b20..e3fb748 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cors", - "version": "2.6.1", + "version": "2.7.0", "author": "Troy Goode (https://github.com/troygoode/)", "description": "middleware for dynamically or statically enabling CORS in express/connect applications", "keywords": ["cors", "express", "connect", "middleware"], @@ -26,16 +26,16 @@ "vary": "^1" }, "devDependencies": { - "basic-auth-connect": "^1", - "body-parser": "^1.4.3", - "express": "^4", - "lint": "^1.1.2", - "mocha": "^1.18.2", - "should": "^3.3.1", - "supertest": "^0.12" + "basic-auth-connect": "^1.0.0", + "body-parser": "^1.12.4", + "eslint": "^0.21.2", + "express": "^4.12.4", + "mocha": "^2.2.5", + "should": "^6.0.3", + "supertest": "^1.0.1" }, "scripts": { - "test": "./node_modules/mocha/bin/mocha", - "lint": "./node_modules/lint/bin/node-lint lib test" + "test": "npm run lint && ./node_modules/mocha/bin/mocha", + "lint": "./node_modules/eslint/bin/eslint.js lib test" } } diff --git a/test/basic-auth.js b/test/basic-auth.js index bba15d5..1323f42 100644 --- a/test/basic-auth.js +++ b/test/basic-auth.js @@ -1,7 +1,5 @@ -/*jslint indent: 2*/ -/*global require: true, module: true, describe: true, it: true, setTimeout: true*/ - (function () { + /*global describe, it*/ 'use strict'; @@ -9,19 +7,18 @@ express = require('express'), supertest = require('supertest'), basicAuth = require('basic-auth-connect'), - cors = require('../lib'), - app; + cors = require('../lib'); + + var app; /* -------------------------------------------------------------------------- */ app = express(); app.use(basicAuth('username', 'password')); app.use(cors()); - /*jslint unparam: true*/ // `req` is part of the signature, but not used in these routes app.post('/', function (req, res) { res.send('hello world'); }); - /*jslint unparam: false*/ /* -------------------------------------------------------------------------- */ @@ -41,4 +38,3 @@ }); }()); - diff --git a/test/body-events.js b/test/body-events.js index 05980f0..99d582b 100644 --- a/test/body-events.js +++ b/test/body-events.js @@ -1,7 +1,5 @@ -/*jslint indent: 2*/ -/*global require: true, module: true, describe: true, it: true, setTimeout: true*/ - (function () { + /*global describe, it*/ 'use strict'; @@ -9,8 +7,9 @@ express = require('express'), supertest = require('supertest'), bodyParser = require('body-parser'), - cors = require('../lib'), - dynamicOrigin, + cors = require('../lib'); + + var dynamicOrigin, app1, app2, text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed justo turpis, tempor id sem fringilla, cursus tristique purus. Mauris a sollicitudin magna. Etiam dui lacus, vehicula non dictum at, cursus vitae libero. Curabitur lorem nulla, sollicitudin id enim ut, vehicula rhoncus felis. Ut nec iaculis velit. Vivamus at augue nulla. Fusce at molestie arcu. Duis at dui at tellus mattis tincidunt. Vestibulum sit amet dictum metus. Curabitur nec pretium ante. Proin vulputate elit ac lorem gravida, sit amet placerat lorem fringilla. Mauris fermentum, diam et volutpat auctor, ante enim imperdiet purus, sit amet tincidunt ipsum nulla nec est. Fusce id ipsum in sem malesuada laoreet vitae non magna. Praesent commodo turpis in nulla egestas, eu posuere magna venenatis. Integer in aliquam sem. Fusce quis lorem tincidunt eros rutrum lobortis.\n\nNam aliquam cursus ipsum, a hendrerit purus. Cras ultrices viverra nunc ac lacinia. Sed sed diam orci. Vestibulum ut orci a nibh scelerisque pretium. Sed suscipit vestibulum metus, ac ultricies leo sodales a. Aliquam erat volutpat. Vestibulum mauris massa, luctus et libero vel, cursus suscipit nulla. Cras sed erat quis massa fermentum congue. Mauris ultrices sem ligula, id malesuada lectus tincidunt eget. Donec sed nisl elit. Aenean ac lobortis massa. Phasellus felis nisl, dictum a dui volutpat, dictum sagittis diam. Vestibulum lacinia tellus vel commodo consequat.\n\nNulla at varius nibh, non posuere enim. Curabitur urna est, ultrices vel sem nec, consequat molestie nisi. Aliquam sed augue sit amet ante viverra pretium. Cras aliquam turpis vitae eros gravida egestas. Etiam quis dolor non quam suscipit iaculis. Sed euismod est libero, ac ullamcorper elit hendrerit vitae. Vivamus sollicitudin nulla dolor, vitae porta lacus suscipit ac.\n\nSed volutpat, magna in scelerisque dapibus, eros ante volutpat nisi, ac condimentum diam sem sed justo. Aenean justo risus, bibendum vitae blandit ac, mattis quis nunc. Quisque non felis nec justo auctor accumsan non id odio. Mauris vel dui feugiat dolor dapibus convallis in et neque. Phasellus fermentum sollicitudin tortor ac pretium. Proin tristique accumsan nulla eu venenatis. Cras porta lorem ac arcu accumsan pulvinar. Sed dignissim leo augue, a pretium ante viverra id. Phasellus blandit at purus a malesuada. Nam et cursus mauris. Vivamus accumsan augue laoreet lectus lacinia eleifend. Fusce sit amet felis nunc. Pellentesque eu turpis nisl.\n\nPellentesque vitae quam feugiat, volutpat lectus et, faucibus massa. Maecenas consectetur quis nisi eu aliquam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Etiam laoreet condimentum laoreet. Praesent sit amet massa sit amet dui porta condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed volutpat massa nec risus malesuada hendrerit.'; @@ -28,22 +27,18 @@ app1 = express(); app1.use(cors({origin: dynamicOrigin})); app1.use(bodyParser.json()); - /*jslint unparam: true*/ // `req` is part of the signature, but not used in these routes app1.post('/', function (req, res) { res.send(req.body); }); - /*jslint unparam: false*/ /* -------------------------------------------------------------------------- */ app2 = express(); app2.use(bodyParser.json()); app2.use(cors({origin: dynamicOrigin})); - /*jslint unparam: true*/ // `req` is part of the signature, but not used in these routes app2.post('/', function (req, res) { res.send(req.body); }); - /*jslint unparam: false*/ /* -------------------------------------------------------------------------- */ @@ -84,4 +79,3 @@ }); }()); - diff --git a/test/cors.js b/test/cors.js index f369863..7fb4992 100644 --- a/test/cors.js +++ b/test/cors.js @@ -1,13 +1,12 @@ -/*jslint indent: 2*/ -/*global require: true, module: true, describe: true, it: true*/ - (function () { + /*global describe, it*/ 'use strict'; var should = require('should'), - cors = require('../lib'), - fakeRequest = function (headers) { + cors = require('../lib'); + + var fakeRequest = function (headers) { return { headers: headers || { 'origin': 'request.com', @@ -197,7 +196,7 @@ return done(); }); }); - + it('matches request origin against array of origin checks', function(done) { var req = fakeRequest(); var res = fakeResponse(); @@ -598,13 +597,11 @@ it('handles options specified via callback', function (done) { // arrange var req, res, next, delegate; - /*jslint unparam: true*/ // `req` is part of the signature, but not used in this route - delegate = function (req, cb) { + delegate = function (req2, cb) { cb(null, { origin: 'delegate.com' }); }; - /*jslint unparam: false*/ req = fakeRequest(); res = fakeResponse(); next = function () { @@ -620,11 +617,9 @@ it('handles error specified via callback', function (done) { // arrange var req, res, next, delegate; - /*jslint unparam: true*/ // `req` is part of the signature, but not used in this route - delegate = function (req, cb) { + delegate = function (req2, cb) { cb('some error'); }; - /*jslint unparam: false*/ req = fakeRequest(); res = fakeResponse(); next = function (err) { @@ -640,4 +635,3 @@ }); }()); - diff --git a/test/error-response.js b/test/error-response.js index c900de2..e751b96 100644 --- a/test/error-response.js +++ b/test/error-response.js @@ -1,40 +1,32 @@ -/*jslint indent: 2*/ -/*global require: true, module: true, describe: true, it: true, setTimeout: true*/ - (function () { + /*global describe, it*/ 'use strict'; var should = require('should'), express = require('express'), supertest = require('supertest'), - cors = require('../lib'), - app; + cors = require('../lib'); + + var app; /* -------------------------------------------------------------------------- */ app = express(); app.use(cors()); - /*jslint unparam: true*/ // `req` is part of the signature, but not used in these routes app.post('/five-hundred', function (req, res, next) { next(new Error('nope')); }); - /*jslint unparam: false*/ - /*jslint unparam: true*/ // `req` is part of the signature, but not used in these routes app.post('/four-oh-one', function (req, res, next) { next(new Error('401')); }); - /*jslint unparam: false*/ - /*jslint unparam: true*/ // `req` is part of the signature, but not used in these routes app.post('/four-oh-four', function (req, res, next) { next(); }); - /*jslint unparam: false*/ - /*jslint unparam: true*/ // `req` is part of the signature, but not used in these routes app.use(function (err, req, res, next) { if (err.message === '401') { res.status(401).send('unauthorized'); @@ -42,7 +34,6 @@ next(err); } }); - /*jslint unparam: false*/ /* -------------------------------------------------------------------------- */ @@ -84,4 +75,3 @@ }); }()); - diff --git a/test/example-app.js b/test/example-app.js index 656c648..590cb31 100644 --- a/test/example-app.js +++ b/test/example-app.js @@ -1,21 +1,19 @@ -/*jslint indent: 2*/ -/*global require: true, module: true, describe: true, it: true*/ - (function () { + /*global describe, it*/ 'use strict'; var should = require('should'), express = require('express'), supertest = require('supertest'), - cors = require('../lib'), - simpleApp, + cors = require('../lib'); + + var simpleApp, complexApp; /* -------------------------------------------------------------------------- */ simpleApp = express(); - /*jslint unparam: true*/ // `req` is part of the signature, but not used in these routes simpleApp.head('/', cors(), function (req, res) { res.status(204).send(); }); @@ -25,17 +23,14 @@ simpleApp.post('/', cors(), function (req, res) { res.send('Hello World (Post)'); }); - /*jslint unparam: false*/ /* -------------------------------------------------------------------------- */ complexApp = express(); complexApp.options('/', cors()); - /*jslint unparam: true*/ // `req` is part of the signature, but not used in this route complexApp.delete('/', cors(), function (req, res) { res.send('Hello World (Delete)'); }); - /*jslint unparam: false*/ /* -------------------------------------------------------------------------- */ @@ -101,4 +96,3 @@ }); }()); - diff --git a/test/issue-2.js b/test/issue-2.js index 52d4a96..0784bcd 100644 --- a/test/issue-2.js +++ b/test/issue-2.js @@ -1,15 +1,14 @@ -/*jslint indent: 2*/ -/*global require: true, module: true, describe: true, it: true*/ - (function () { + /*global describe, it*/ 'use strict'; var should = require('should'), express = require('express'), supertest = require('supertest'), - cors = require('../lib'), - app, + cors = require('../lib'); + + var app, corsOptions; /* -------------------------------------------------------------------------- */ @@ -22,11 +21,9 @@ maxAge: 3600 }; app.options('/api/login', cors(corsOptions)); - /*jslint unparam: true*/ // `req` is part of the signature, but not used in this route app.post('/api/login', cors(corsOptions), function (req, res) { res.send('LOGIN'); }); - /*jslint unparam: false*/ /* -------------------------------------------------------------------------- */ @@ -57,4 +54,3 @@ }); }()); - diff --git a/test/issue-31.js b/test/issue-31.js index 351dd19..4f678fe 100644 --- a/test/issue-31.js +++ b/test/issue-31.js @@ -1,26 +1,25 @@ -/*jslint indent: 2*/ -/*global require: true, module: true, describe: true, it: true*/ - (function () { + /*global describe, it*/ 'use strict'; var should = require('should'), express = require('express'), supertest = require('supertest'), - cors = require('../lib'), - app, + cors = require('../lib'); + + var app, mainRouter, itemsRouter; /* -------------------------------------------------------------------------- */ - itemsRouter = express.Router(); + itemsRouter = new express.Router(); itemsRouter.get('/', function (req, res) { res.send('hello world'); }); - mainRouter = express.Router(); + mainRouter = new express.Router(); mainRouter.use('/items', itemsRouter); app = express(); @@ -57,4 +56,3 @@ }); }()); -