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 | }); |
---|