+16
| { | ||
| "rules": { | ||
| "curly": [2, "multi-line"], | ||
| "eol-last": [2], | ||
| "indent": [2, 4], | ||
| "quotes": [2, "single"], | ||
| "linebreak-style": [2, "unix"], | ||
| "max-len": [2, 80, 4], | ||
| "semi": [2, "always"], | ||
| "strict": [2, "never"] | ||
| }, | ||
| "env": { | ||
| "node": true | ||
| }, | ||
| "extends": "eslint:recommended" | ||
| } |
| /** | ||
| * HTTP basic authentication parser. Accepts Base-64 encoded string and | ||
| * returns an object containing the username and password. | ||
| * | ||
| * @param {string} input Base-64 encoded string | ||
| * | ||
| * @return {object} | ||
| */ | ||
| module.exports = function (input) { | ||
| var token = input.split(/\s+/).pop() || ''; | ||
| var auth = new Buffer(token, 'base64').toString(); | ||
| var parts = auth.split(/:/); | ||
| if (parts.length !== 2) { | ||
| parts[0] = undefined; | ||
| parts[1] = undefined; | ||
| } | ||
| return { | ||
| username: parts[0], | ||
| password: parts[1] | ||
| }; | ||
| }; |
| var test = require('tap').test; | ||
| var basic = require(__dirname + '/../../lib/index.js'); | ||
| // Mock | ||
| var auth = basic(function (user, pass, callback) { | ||
| if (user === 'foo' && pass === 'bar') return callback(null); | ||
| callback(401); | ||
| }); | ||
| var req = { | ||
| headers: { | ||
| 'Authorization': 'Basic Zn9vOmJhcg==' | ||
| } | ||
| }; | ||
| var res = {}; | ||
| // Test | ||
| auth(req, res, function (err) { | ||
| test('functional', function (t) { | ||
| t.equal(err, 401, 'error is of expected value'); | ||
| t.end(); | ||
| }); | ||
| }); |
| var test = require('tap').test; | ||
| var basic = require(__dirname + '/../../lib/index.js'); | ||
| // Mock | ||
| var auth = basic(function (user, pass, callback) { | ||
| if (user === 'foo' && pass === 'bar') return callback(null); | ||
| callback(401); | ||
| }); | ||
| var req = { | ||
| headers: { | ||
| 'Authorization': 'Basic Zm9vOmJhcg==' | ||
| } | ||
| }; | ||
| var res = {}; | ||
| // Test | ||
| auth(req, res, function (err) { | ||
| test('functional', function (t) { | ||
| t.equal(err, null, 'error object is null'); | ||
| t.end(); | ||
| }); | ||
| }); |
| var test = require('tap').test; | ||
| var basic = require('../../lib/index'); | ||
| test('spec', function (t) { | ||
| var func = function () {}; | ||
| t.equal(typeof basic, 'function'); | ||
| t.equal(typeof basic(), 'function'); | ||
| t.equal(typeof basic(func), 'function'); | ||
| t.equal(typeof basic('foo'), 'function'); | ||
| t.end(); | ||
| }); |
| var test = require('tap').test; | ||
| var parser = require('../../lib/parser'); | ||
| test('spec', function (t) { | ||
| t.equal(typeof parser, 'function'); | ||
| t.end(); | ||
| }); | ||
| test('ok', function (t) { | ||
| var result = parser('Zm9vOmJhcg=='); | ||
| t.equal(typeof result, 'object'); | ||
| t.equal(typeof result.username, 'string'); | ||
| t.equal(typeof result.password, 'string'); | ||
| t.equal(result.username, 'foo'); | ||
| t.equal(result.password, 'bar'); | ||
| t.end(); | ||
| }); | ||
| test('invalid', function (t) { | ||
| var result = parser('Zm9vYmFy'); | ||
| t.equal(typeof result, 'object'); | ||
| t.equal(result.username, undefined); | ||
| t.equal(result.password, undefined); | ||
| t.end(); | ||
| }); |
+4
-1
| language: node_js | ||
| node_js: | ||
| - "0.8" | ||
| - "0.10" | ||
| - "0.10" | ||
| - "0.12" | ||
| - "4.0" | ||
| - "4.1" |
+9
-15
@@ -0,16 +1,10 @@ | ||
| var parser = require('./parser'); | ||
| /** | ||
| * HTTP Basic Auth for Node.js | ||
| * HTTP Basic Auth middleware provider. | ||
| * | ||
| * @package basic | ||
| * @author Andrew Sliwinski <andrew@diy.org> | ||
| * @param {function} handler Function used to evaluate username & password | ||
| * | ||
| * @return {function} | ||
| */ | ||
| /** | ||
| * Dependencies | ||
| */ | ||
| var basic = require('./basic'); | ||
| /** | ||
| * Export | ||
| */ | ||
| module.exports = function (handler) { | ||
@@ -28,10 +22,10 @@ // Default handler method | ||
| if (!header) { | ||
| var denied = new Error('access denied') | ||
| denied.status = denied.statusCode = 401 | ||
| var denied = new Error('access denied'); | ||
| denied.status = denied.statusCode = 401; | ||
| return callback(denied); | ||
| } | ||
| var auth = basic(header); | ||
| var auth = parser(header); | ||
| handler(auth.username, auth.password, callback); | ||
| }; | ||
| }; |
+22
-3
@@ -0,5 +1,24 @@ | ||
| ESLINT=./node_modules/.bin/eslint | ||
| TAP=./node_modules/.bin/tap | ||
| # ------------------------------------------------------------------------------ | ||
| lint: | ||
| $(ESLINT) ./*.js | ||
| $(ESLINT) ./lib/*.js | ||
| $(ESLINT) ./test/**/*.js | ||
| unit: | ||
| $(TAP) ./test/unit/*.js | ||
| functional: | ||
| $(TAP) ./test/functional/*.js | ||
| test: | ||
| tap test/governance/*.js | ||
| tap test/functional/*.js | ||
| @make lint | ||
| @make unit | ||
| @make functional | ||
| .PHONY: test | ||
| # ------------------------------------------------------------------------------ | ||
| .PHONY: lint unit functional test |
+3
-4
@@ -5,3 +5,3 @@ { | ||
| "description": "HTTP Basic Auth for Node.js", | ||
| "version": "0.0.3", | ||
| "version": "1.0.0", | ||
| "homepage": "https://github.com/thisandagain/basic", | ||
@@ -19,5 +19,4 @@ "license": "MIT", | ||
| "devDependencies": { | ||
| "codebux": "~0.1.2", | ||
| "jshint-tap-simple": "~1.0.2", | ||
| "tap": "~0.3.1" | ||
| "eslint": "1.10.3", | ||
| "tap": "2.3.3" | ||
| }, | ||
@@ -24,0 +23,0 @@ "optionalDependencies": {}, |
+3
-3
@@ -11,6 +11,6 @@ ## basic | ||
| ```javascript | ||
| var basic = require('basic'), | ||
| http = require('http'); | ||
| var http = require('http'); | ||
| var basic = require('../../lib/index'); | ||
| var auth = basic(function (user, pass, callback) { | ||
| var auth = basic(function (user, pass, callback) { | ||
| if (user === 'let' && pass === 'me in') return callback(null); | ||
@@ -17,0 +17,0 @@ callback(401); |
@@ -1,6 +0,5 @@ | ||
| var basic = require('../../lib/index'), | ||
| http = require('http'); | ||
| var http = require('http'); | ||
| var basic = require('../../lib/index'); | ||
| var auth = basic(function (user, pass, callback) { | ||
| var auth = basic(function (user, pass, callback) { | ||
| if (user === 'let' && pass === 'me in') return callback(null); | ||
@@ -12,5 +11,8 @@ callback(401); | ||
| auth(req, res, function (err) { | ||
| res.writeHead(err || 200); | ||
| var head = {}; | ||
| if (err) head = {'WWW-Authenticate': 'Basic realm="Secure Area"'}; | ||
| res.writeHead(err || 200, head); | ||
| res.end(); | ||
| }); | ||
| }).listen(8000); | ||
| }).listen(8000); |
-24
| /** | ||
| * HTTP basic authentication parser. | ||
| * | ||
| * @package basic | ||
| * @author Andrew Sliwinski <andrew@diy.org> | ||
| */ | ||
| /** | ||
| * Dependencies | ||
| */ | ||
| /** | ||
| * Export | ||
| */ | ||
| module.exports = function (input) { | ||
| var token = input.split(/\s+/).pop() || ''; | ||
| var auth = new Buffer(token, 'base64').toString(); | ||
| var parts = auth.split(/:/); | ||
| return { | ||
| username: parts[0], | ||
| password: parts[1] | ||
| }; | ||
| }; |
| var test = require('tap').test, | ||
| basic = require(__dirname + '/../../lib/index.js'); | ||
| // Mock | ||
| var auth = basic(function (user, pass, callback) { | ||
| if (user === 'foo' && pass === 'bar') return callback(null); | ||
| callback(401); | ||
| }); | ||
| var req = { | ||
| headers: { | ||
| 'Authorization': 'Basic Zn9vOmJhcg==' | ||
| } | ||
| }; | ||
| var res = {}; | ||
| // Test | ||
| auth(req, res, function (err) { | ||
| test('functional', function (t) { | ||
| t.equal(err, 401, 'error is of expected value'); | ||
| t.end(); | ||
| }); | ||
| }); |
| var test = require('tap').test, | ||
| basic = require(__dirname + '/../../lib/index.js'); | ||
| // Mock | ||
| var auth = basic(function (user, pass, callback) { | ||
| if (user === 'foo' && pass === 'bar') return callback(null); | ||
| callback(401); | ||
| }); | ||
| var req = { | ||
| headers: { | ||
| 'Authorization': 'Basic Zm9vOmJhcg==' | ||
| } | ||
| }; | ||
| var res = {}; | ||
| // Test | ||
| auth(req, res, function (err) { | ||
| test('functional', function (t) { | ||
| t.equal(err, null, 'error object is null'); | ||
| t.end(); | ||
| }); | ||
| }); |
| var test = require('tap').test, | ||
| bux = require('codebux'); | ||
| bux(__dirname + '/../../lib/index.js', function (err, debt) { | ||
| test('governance', function (t) { | ||
| t.equal(err, null, 'error object should be null'); | ||
| t.type(debt, 'number', 'result should be a number'); | ||
| t.ok(debt > 50, 'result should be greater than 50'); | ||
| t.end(); | ||
| }); | ||
| }); |
| require('jshint-tap-simple').run(__dirname + '/../../lib/*.js'); |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
7179
26.88%2
-33.33%14
7.69%134
21.82%0
-100%