http-agent.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /* global test:false, expect:false, describe:false, */
  2. const { getProtectedHttpAgent, FORBIDDEN_IP_ADDRESS } = require('../../src/server/helpers/request')
  3. const request = require('request')
  4. const http = require('http')
  5. const https = require('https')
  6. describe('test getProtectedHttpAgent', () => {
  7. test('setting "https:" as protocol', (done) => {
  8. const Agent = getProtectedHttpAgent('https:')
  9. expect(Agent).toEqual(https.Agent)
  10. done()
  11. })
  12. test('setting "https" as protocol', (done) => {
  13. const Agent = getProtectedHttpAgent('https')
  14. expect(Agent).toEqual(https.Agent)
  15. done()
  16. })
  17. test('setting "http:" as protocol', (done) => {
  18. const Agent = getProtectedHttpAgent('http:')
  19. expect(Agent).toEqual(http.Agent)
  20. done()
  21. })
  22. test('setting "http" as protocol', (done) => {
  23. const Agent = getProtectedHttpAgent('http')
  24. expect(Agent).toEqual(http.Agent)
  25. done()
  26. })
  27. })
  28. describe('test protected request Agent', () => {
  29. test('allows URLs without IP addresses', (done) => {
  30. const options = {
  31. uri: 'https://www.transloadit.com',
  32. method: 'GET',
  33. agentClass: getProtectedHttpAgent('https', true)
  34. }
  35. request(options, (err) => {
  36. if (err) {
  37. expect(err.message).not.toEqual(FORBIDDEN_IP_ADDRESS)
  38. expect(err.message.startsWith(FORBIDDEN_IP_ADDRESS)).toEqual(false)
  39. done()
  40. } else {
  41. done()
  42. }
  43. })
  44. })
  45. test('blocks private http IP address', (done) => {
  46. const options = {
  47. uri: 'http://172.20.10.4:8090',
  48. method: 'GET',
  49. agentClass: getProtectedHttpAgent('http', true)
  50. }
  51. request(options, (err) => {
  52. expect(err).toBeInstanceOf(Error)
  53. expect(err.message).toEqual(FORBIDDEN_IP_ADDRESS)
  54. done()
  55. })
  56. })
  57. test('blocks private https IP address', (done) => {
  58. const options = {
  59. uri: 'https://172.20.10.4:8090',
  60. method: 'GET',
  61. agentClass: getProtectedHttpAgent('https', true)
  62. }
  63. request(options, (err) => {
  64. expect(err).toBeInstanceOf(Error)
  65. expect(err.message).toEqual(FORBIDDEN_IP_ADDRESS)
  66. done()
  67. })
  68. })
  69. test('blocks localhost IP address', (done) => {
  70. const options = {
  71. uri: 'http://127.0.0.1:8090',
  72. method: 'GET',
  73. agentClass: getProtectedHttpAgent('http', true)
  74. }
  75. request(options, (err) => {
  76. expect(err).toBeInstanceOf(Error)
  77. expect(err.message).toEqual(FORBIDDEN_IP_ADDRESS)
  78. done()
  79. })
  80. })
  81. test('blocks URLs that have DNS pinned to a private IP address', (done) => {
  82. const options = {
  83. uri: 'http://127.0.0.1.xip.io:8090',
  84. method: 'GET',
  85. agentClass: getProtectedHttpAgent('http', true)
  86. }
  87. request(options, (err) => {
  88. expect(err).toBeTruthy()
  89. expect(err.message.startsWith(FORBIDDEN_IP_ADDRESS)).toEqual(true)
  90. done()
  91. })
  92. })
  93. })