test-oauth.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. try {
  2. require('oauth-sign')
  3. } catch (e) {
  4. console.error('oauth-sign must be installed to run this test.')
  5. console.error('skipping this test. please install oauth-sign and run again if you need to test this feature.')
  6. process.exit(0)
  7. }
  8. var hmacsign = require('oauth-sign').hmacsign
  9. , assert = require('assert')
  10. , qs = require('querystring')
  11. , request = require('../index')
  12. ;
  13. function getsignature (r) {
  14. var sign
  15. r.headers.Authorization.slice('OAuth '.length).replace(/,\ /g, ',').split(',').forEach(function (v) {
  16. if (v.slice(0, 'oauth_signature="'.length) === 'oauth_signature="') sign = v.slice('oauth_signature="'.length, -1)
  17. })
  18. return decodeURIComponent(sign)
  19. }
  20. // Tests from Twitter documentation https://dev.twitter.com/docs/auth/oauth
  21. var reqsign = hmacsign('POST', 'https://api.twitter.com/oauth/request_token',
  22. { oauth_callback: 'http://localhost:3005/the_dance/process_callback?service_provider_id=11'
  23. , oauth_consumer_key: 'GDdmIQH6jhtmLUypg82g'
  24. , oauth_nonce: 'QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk'
  25. , oauth_signature_method: 'HMAC-SHA1'
  26. , oauth_timestamp: '1272323042'
  27. , oauth_version: '1.0'
  28. }, "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98")
  29. console.log(reqsign)
  30. console.log('8wUi7m5HFQy76nowoCThusfgB+Q=')
  31. assert.equal(reqsign, '8wUi7m5HFQy76nowoCThusfgB+Q=')
  32. var accsign = hmacsign('POST', 'https://api.twitter.com/oauth/access_token',
  33. { oauth_consumer_key: 'GDdmIQH6jhtmLUypg82g'
  34. , oauth_nonce: '9zWH6qe0qG7Lc1telCn7FhUbLyVdjEaL3MO5uHxn8'
  35. , oauth_signature_method: 'HMAC-SHA1'
  36. , oauth_token: '8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc'
  37. , oauth_timestamp: '1272323047'
  38. , oauth_verifier: 'pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY'
  39. , oauth_version: '1.0'
  40. }, "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98", "x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA")
  41. console.log(accsign)
  42. console.log('PUw/dHA4fnlJYM6RhXk5IU/0fCc=')
  43. assert.equal(accsign, 'PUw/dHA4fnlJYM6RhXk5IU/0fCc=')
  44. var upsign = hmacsign('POST', 'http://api.twitter.com/1/statuses/update.json',
  45. { oauth_consumer_key: "GDdmIQH6jhtmLUypg82g"
  46. , oauth_nonce: "oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y"
  47. , oauth_signature_method: "HMAC-SHA1"
  48. , oauth_token: "819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw"
  49. , oauth_timestamp: "1272325550"
  50. , oauth_version: "1.0"
  51. , status: 'setting up my twitter 私のさえずりを設定する'
  52. }, "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98", "J6zix3FfA9LofH0awS24M3HcBYXO5nI1iYe8EfBA")
  53. console.log(upsign)
  54. console.log('yOahq5m0YjDDjfjxHaXEsW9D+X0=')
  55. assert.equal(upsign, 'yOahq5m0YjDDjfjxHaXEsW9D+X0=')
  56. var rsign = request.post(
  57. { url: 'https://api.twitter.com/oauth/request_token'
  58. , oauth:
  59. { callback: 'http://localhost:3005/the_dance/process_callback?service_provider_id=11'
  60. , consumer_key: 'GDdmIQH6jhtmLUypg82g'
  61. , nonce: 'QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk'
  62. , timestamp: '1272323042'
  63. , version: '1.0'
  64. , consumer_secret: "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98"
  65. }
  66. })
  67. setTimeout(function () {
  68. console.log(getsignature(rsign))
  69. assert.equal(reqsign, getsignature(rsign))
  70. })
  71. var raccsign = request.post(
  72. { url: 'https://api.twitter.com/oauth/access_token'
  73. , oauth:
  74. { consumer_key: 'GDdmIQH6jhtmLUypg82g'
  75. , nonce: '9zWH6qe0qG7Lc1telCn7FhUbLyVdjEaL3MO5uHxn8'
  76. , signature_method: 'HMAC-SHA1'
  77. , token: '8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc'
  78. , timestamp: '1272323047'
  79. , verifier: 'pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY'
  80. , version: '1.0'
  81. , consumer_secret: "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98"
  82. , token_secret: "x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA"
  83. }
  84. })
  85. setTimeout(function () {
  86. console.log(getsignature(raccsign))
  87. assert.equal(accsign, getsignature(raccsign))
  88. }, 1)
  89. var rupsign = request.post(
  90. { url: 'http://api.twitter.com/1/statuses/update.json'
  91. , oauth:
  92. { consumer_key: "GDdmIQH6jhtmLUypg82g"
  93. , nonce: "oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y"
  94. , signature_method: "HMAC-SHA1"
  95. , token: "819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw"
  96. , timestamp: "1272325550"
  97. , version: "1.0"
  98. , consumer_secret: "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98"
  99. , token_secret: "J6zix3FfA9LofH0awS24M3HcBYXO5nI1iYe8EfBA"
  100. }
  101. , form: {status: 'setting up my twitter 私のさえずりを設定する'}
  102. })
  103. setTimeout(function () {
  104. console.log(getsignature(rupsign))
  105. assert.equal(upsign, getsignature(rupsign))
  106. }, 1)