5f2d6eb7dd01acc332e855e4dc0251d2d7495186
[platform/upstream/nodejs.git] / deps / npm / node_modules / request / tests / test-digest-auth.js
1 var assert = require('assert')
2   , http = require('http')
3   , request = require('../index')
4   ;
5
6 // Test digest auth
7 // Using header values captured from interaction with Apache
8
9 var numDigestRequests = 0;
10
11 var digestServer = http.createServer(function (req, res) {
12   console.error('Digest auth server: ', req.method, req.url);
13   numDigestRequests++;
14
15   var ok;
16
17   if (req.headers.authorization) {
18     if (req.headers.authorization == 'Digest username="test", realm="Private", nonce="WpcHS2/TBAA=dffcc0dbd5f96d49a5477166649b7c0ae3866a93", uri="/test/", qop="auth", response="54753ce37c10cb20b09b769f0bed730e", nc="1", cnonce=""') {
19       ok = true;
20     } else {
21       // Bad auth header, don't send back WWW-Authenticate header
22       ok = false;
23     }
24   } else {
25     // No auth header, send back WWW-Authenticate header
26     ok = false;
27     res.setHeader('www-authenticate', 'Digest realm="Private", nonce="WpcHS2/TBAA=dffcc0dbd5f96d49a5477166649b7c0ae3866a93", algorithm=MD5, qop="auth"');
28   }
29
30   if (ok) {
31     console.log('request ok');
32     res.end('ok');
33   } else {
34     console.log('status=401');
35     res.statusCode = 401;
36     res.end('401');
37   }
38 });
39
40 digestServer.listen(6767);
41
42 request({
43   'method': 'GET',
44   'uri': 'http://localhost:6767/test/',
45   'auth': {
46     'user': 'test',
47     'pass': 'testing',
48     'sendImmediately': false
49   }
50 }, function(error, response, body) {
51   assert.equal(response.statusCode, 200);
52   assert.equal(numDigestRequests, 2);
53
54   // If we don't set sendImmediately = false, request will send basic auth
55   request({
56     'method': 'GET',
57     'uri': 'http://localhost:6767/test/',
58     'auth': {
59       'user': 'test',
60       'pass': 'testing'
61     }
62   }, function(error, response, body) {
63     assert.equal(response.statusCode, 401);
64     assert.equal(numDigestRequests, 3);
65
66     console.log('All tests passed');
67     digestServer.close();
68   });
69 });