http-agent.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. describe('test protected request Agent', () => {
  5. test('allows URLs without IP addresses', (done) => {
  6. const options = {
  7. uri: 'https://www.transloadit.com',
  8. method: 'GET',
  9. agentClass: getProtectedHttpAgent('https', true)
  10. }
  11. request(options, (err) => {
  12. if (err) {
  13. expect(err.message).not.toEqual(FORBIDDEN_IP_ADDRESS)
  14. expect(err.message.startsWith(FORBIDDEN_IP_ADDRESS)).toEqual(false)
  15. done()
  16. } else {
  17. done()
  18. }
  19. })
  20. })
  21. test('blocks private http IP address', (done) => {
  22. const options = {
  23. uri: 'http://172.20.10.4:8090',
  24. method: 'GET',
  25. agentClass: getProtectedHttpAgent('http', true)
  26. }
  27. request(options, (err) => {
  28. expect(err).toBeInstanceOf(Error)
  29. expect(err.message).toEqual(FORBIDDEN_IP_ADDRESS)
  30. done()
  31. })
  32. })
  33. test('blocks private https IP address', (done) => {
  34. const options = {
  35. uri: 'https://172.20.10.4:8090',
  36. method: 'GET',
  37. agentClass: getProtectedHttpAgent('https', true)
  38. }
  39. request(options, (err) => {
  40. expect(err).toBeInstanceOf(Error)
  41. expect(err.message).toEqual(FORBIDDEN_IP_ADDRESS)
  42. done()
  43. })
  44. })
  45. test('blocks localhost IP address', (done) => {
  46. const options = {
  47. uri: 'http://127.0.0.1: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 URLs that have DNS pinned to a private IP address', (done) => {
  58. const options = {
  59. uri: 'http://127.0.0.1.xip.io:8090',
  60. method: 'GET',
  61. agentClass: getProtectedHttpAgent('http', true)
  62. }
  63. request(options, (err) => {
  64. expect(err).toBeTruthy(Error)
  65. expect(err.message.startsWith(FORBIDDEN_IP_ADDRESS)).toEqual(true)
  66. done()
  67. })
  68. })
  69. })