test-bearer-auth.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. var assert = require('assert')
  2. , http = require('http')
  3. , request = require('../index')
  4. ;
  5. var numBasicRequests = 0;
  6. var basicServer = http.createServer(function (req, res) {
  7. console.error('Bearer auth server: ', req.method, req.url);
  8. numBasicRequests++;
  9. var ok;
  10. if (req.headers.authorization) {
  11. if (req.headers.authorization == 'Bearer theToken') {
  12. ok = true;
  13. } else {
  14. // Bad auth header, don't send back WWW-Authenticate header
  15. ok = false;
  16. }
  17. } else {
  18. // No auth header, send back WWW-Authenticate header
  19. ok = false;
  20. res.setHeader('www-authenticate', 'Bearer realm="Private"');
  21. }
  22. if (req.url == '/post/') {
  23. var expectedContent = 'data_key=data_value';
  24. req.on('data', function(data) {
  25. assert.equal(data, expectedContent);
  26. console.log('received request data: ' + data);
  27. });
  28. assert.equal(req.method, 'POST');
  29. assert.equal(req.headers['content-length'], '' + expectedContent.length);
  30. assert.equal(req.headers['content-type'], 'application/x-www-form-urlencoded; charset=utf-8');
  31. }
  32. if (ok) {
  33. console.log('request ok');
  34. res.end('ok');
  35. } else {
  36. console.log('status=401');
  37. res.statusCode = 401;
  38. res.end('401');
  39. }
  40. });
  41. basicServer.listen(6767);
  42. var tests = [
  43. function(next) {
  44. request({
  45. 'method': 'GET',
  46. 'uri': 'http://localhost:6767/test/',
  47. 'auth': {
  48. 'bearer': 'theToken',
  49. 'sendImmediately': false
  50. }
  51. }, function(error, res, body) {
  52. assert.equal(res.statusCode, 200);
  53. assert.equal(numBasicRequests, 2);
  54. next();
  55. });
  56. },
  57. function(next) {
  58. // If we don't set sendImmediately = false, request will send bearer auth
  59. request({
  60. 'method': 'GET',
  61. 'uri': 'http://localhost:6767/test2/',
  62. 'auth': {
  63. 'bearer': 'theToken'
  64. }
  65. }, function(error, res, body) {
  66. assert.equal(res.statusCode, 200);
  67. assert.equal(numBasicRequests, 3);
  68. next();
  69. });
  70. },
  71. function(next) {
  72. request({
  73. 'method': 'POST',
  74. 'form': { 'data_key': 'data_value' },
  75. 'uri': 'http://localhost:6767/post/',
  76. 'auth': {
  77. 'bearer': 'theToken',
  78. 'sendImmediately': false
  79. }
  80. }, function(error, res, body) {
  81. assert.equal(res.statusCode, 200);
  82. assert.equal(numBasicRequests, 5);
  83. next();
  84. });
  85. },
  86. function (next) {
  87. request
  88. .get('http://localhost:6767/test/')
  89. .auth(null,null,false,"theToken")
  90. .on('response', function (res) {
  91. assert.equal(res.statusCode, 200);
  92. assert.equal(numBasicRequests, 7);
  93. next();
  94. })
  95. },
  96. function (next) {
  97. request
  98. .get('http://localhost:6767/test/')
  99. .auth(null,null,true,"theToken")
  100. .on('response', function (res) {
  101. assert.equal(res.statusCode, 200);
  102. assert.equal(numBasicRequests, 8);
  103. next();
  104. })
  105. },
  106. function(next) {
  107. request({
  108. 'method': 'GET',
  109. 'uri': 'http://localhost:6767/test/',
  110. 'auth': {
  111. 'bearer': function() { return 'theToken' },
  112. 'sendImmediately': false
  113. }
  114. }, function(error, res, body) {
  115. assert.equal(res.statusCode, 200);
  116. assert.equal(numBasicRequests, 10);
  117. next();
  118. });
  119. },
  120. function(next) {
  121. // If we don't set sendImmediately = false, request will send bearer auth
  122. request({
  123. 'method': 'GET',
  124. 'uri': 'http://localhost:6767/test2/',
  125. 'auth': {
  126. 'bearer': function() { return 'theToken' }
  127. }
  128. }, function(error, res, body) {
  129. assert.equal(res.statusCode, 200);
  130. assert.equal(numBasicRequests, 11);
  131. next();
  132. });
  133. },
  134. ];
  135. function runTest(i) {
  136. if (i < tests.length) {
  137. tests[i](function() {
  138. runTest(i + 1);
  139. });
  140. } else {
  141. console.log('All tests passed');
  142. basicServer.close();
  143. }
  144. }
  145. runTest(0);