SecurityHeadersTests.coffee 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. assert = require('chai').assert
  2. async = require('async')
  3. User = require('./helpers/User')
  4. request = require('./helpers/request')
  5. assert_has_common_headers = (response) ->
  6. headers = response.headers
  7. assert.equal(headers['x-download-options'], 'noopen')
  8. assert.equal(headers['x-xss-protection'], '1; mode=block')
  9. assert.equal(headers['referrer-policy'], 'origin-when-cross-origin')
  10. assert_has_cache_headers = (response) ->
  11. headers = response.headers
  12. assert.equal(headers['surrogate-control'], 'no-store')
  13. assert.equal(headers['cache-control'], 'no-store, no-cache, must-revalidate, proxy-revalidate')
  14. assert.equal(headers['pragma'], 'no-cache')
  15. assert.equal(headers['expires'], '0')
  16. assert_has_no_cache_headers = (response) ->
  17. headers = response.headers
  18. assert.isUndefined(headers['surrogate-control'])
  19. assert.isUndefined(headers['cache-control'])
  20. assert.isUndefined(headers['pragma'])
  21. assert.isUndefined(headers['expires'])
  22. describe "SecurityHeaders", ->
  23. before ->
  24. @user = new User()
  25. it 'should not have x-powered-by header', (done) ->
  26. request.get '/', (err, res, body) =>
  27. assert.isUndefined(res.headers['x-powered-by'])
  28. done()
  29. it 'should have all common headers', (done) ->
  30. request.get '/', (err, res, body) =>
  31. assert_has_common_headers res
  32. done()
  33. it 'should not have cache headers on public pages', (done) ->
  34. request.get '/', (err, res, body) =>
  35. assert_has_no_cache_headers res
  36. done()
  37. it 'should have cache headers when user is logged in', (done) ->
  38. async.series [
  39. (cb) => @user.login cb
  40. (cb) => @user.request.get '/', cb
  41. (cb) => @user.logout cb
  42. ], (err, results) =>
  43. main_response = results[1][0]
  44. assert_has_cache_headers main_response
  45. done()
  46. it 'should have cache headers on project page', (done) ->
  47. async.series [
  48. (cb) => @user.login cb
  49. (cb) =>
  50. @user.createProject "public-project", (error, project_id) =>
  51. return done(error) if error?
  52. @project_id = project_id
  53. @user.makePublic @project_id, "readAndWrite", cb
  54. (cb) => @user.logout cb
  55. ], (err, results) =>
  56. request.get "/project/#{@project_id}", (err, res, body) =>
  57. assert_has_cache_headers res
  58. done()