http-agent.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. done()
  15. } else {
  16. done()
  17. }
  18. })
  19. })
  20. test('blocks private http IP address', (done) => {
  21. const options = {
  22. uri: 'http://172.20.10.4:8090',
  23. method: 'GET',
  24. agentClass: getProtectedHttpAgent('http', true)
  25. }
  26. request(options, (err) => {
  27. expect(err).toBeInstanceOf(Error)
  28. expect(err.message).toEqual(FORBIDDEN_IP_ADDRESS)
  29. done()
  30. })
  31. })
  32. test('blocks private https IP address', (done) => {
  33. const options = {
  34. uri: 'https://172.20.10.4:8090',
  35. method: 'GET',
  36. agentClass: getProtectedHttpAgent('https', true)
  37. }
  38. request(options, (err) => {
  39. expect(err).toBeInstanceOf(Error)
  40. expect(err.message).toEqual(FORBIDDEN_IP_ADDRESS)
  41. done()
  42. })
  43. })
  44. test('blocks localhost IP address', (done) => {
  45. const options = {
  46. uri: 'http://127.0.0.1:8090',
  47. method: 'GET',
  48. agentClass: getProtectedHttpAgent('http', true)
  49. }
  50. request(options, (err) => {
  51. expect(err).toBeInstanceOf(Error)
  52. expect(err.message).toEqual(FORBIDDEN_IP_ADDRESS)
  53. done()
  54. })
  55. })
  56. test('blocks URLs that have DNS pinned to a private IP address', (done) => {
  57. const options = {
  58. uri: 'http://127.0.0.1.xip.io:8090',
  59. method: 'GET',
  60. agentClass: getProtectedHttpAgent('http', true)
  61. }
  62. request(options, (err) => {
  63. expect(err).toBeInstanceOf(Error)
  64. expect(err.message.startsWith(FORBIDDEN_IP_ADDRESS)).toEqual(true)
  65. done()
  66. })
  67. })
  68. })