123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- var assert = require('assert')
- , http = require('http')
- , request = require('../index')
- ;
- // Test digest auth
- // Using header values captured from interaction with Apache
- var numDigestRequests = 0;
- var digestServer = http.createServer(function (req, res) {
- console.error('Digest auth server: ', req.method, req.url);
- numDigestRequests++;
- var ok;
- if (req.url === '/test/') {
- if (req.headers.authorization) {
- if (/^Digest username="test", realm="Private", nonce="WpcHS2\/TBAA=dffcc0dbd5f96d49a5477166649b7c0ae3866a93", uri="\/test\/", qop=auth, response="[a-f0-9]{32}", nc=00000001, cnonce="[a-f0-9]{32}", algorithm=MD5, opaque="5ccc069c403ebaf9f0171e9517f40e41"$/.exec(req.headers.authorization)) {
- ok = true;
- } else {
- // Bad auth header, don't send back WWW-Authenticate header
- ok = false;
- }
- } else {
- // No auth header, send back WWW-Authenticate header
- ok = false;
- res.setHeader('www-authenticate', 'Digest realm="Private", nonce="WpcHS2/TBAA=dffcc0dbd5f96d49a5477166649b7c0ae3866a93", algorithm=MD5, qop="auth", opaque="5ccc069c403ebaf9f0171e9517f40e41"');
- }
- } else if (req.url === '/dir/index.html') {
- // RFC2069-compatible mode
- // check: http://www.rfc-editor.org/errata_search.php?rfc=2069
- if (req.headers.authorization) {
- if (/^Digest username="Mufasa", realm="testrealm@host.com", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", uri="\/dir\/index.html", response="[a-f0-9]{32}", opaque="5ccc069c403ebaf9f0171e9517f40e41"$/.exec(req.headers.authorization)) {
- ok = true;
- } else {
- // Bad auth header, don't send back WWW-Authenticate header
- ok = false;
- }
- } else {
- // No auth header, send back WWW-Authenticate header
- ok = false;
- res.setHeader('www-authenticate', 'Digest realm="testrealm@host.com", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="5ccc069c403ebaf9f0171e9517f40e41"');
- }
- }
- if (ok) {
- console.log('request ok');
- res.end('ok');
- } else {
- console.log('status=401');
- res.statusCode = 401;
- res.end('401');
- }
- });
- digestServer.listen(6767);
- request({
- 'method': 'GET',
- 'uri': 'http://localhost:6767/test/',
- 'auth': {
- 'user': 'test',
- 'pass': 'testing',
- 'sendImmediately': false
- }
- }, function(error, response, body) {
- assert.equal(response.statusCode, 200);
- assert.equal(numDigestRequests, 2);
- // If we don't set sendImmediately = false, request will send basic auth
- request({
- 'method': 'GET',
- 'uri': 'http://localhost:6767/test/',
- 'auth': {
- 'user': 'test',
- 'pass': 'testing'
- }
- }, function(error, response, body) {
- assert.equal(response.statusCode, 401);
- assert.equal(numDigestRequests, 3);
- request({
- 'method': 'GET',
- 'uri': 'http://localhost:6767/dir/index.html',
- 'auth': {
- 'user': 'Mufasa',
- 'pass': 'CircleOfLife',
- 'sendImmediately': false
- }
- }, function(error, response, body) {
- assert.equal(response.statusCode, 200);
- assert.equal(numDigestRequests, 5);
- console.log('All tests passed');
- digestServer.close();
- });
- });
- });
|