cors.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. const validator = require('../validator');
  2. module.exports = function (req, res, next) {
  3. if (req.headers.origin) {
  4. const originSchema = {
  5. oneOf: [
  6. {
  7. type: 'string',
  8. pattern: '^[a-z\\-]+:\\/\\/(?:[\\w\\-\\.]+(:[0-9]+)?/?)?$'
  9. },
  10. {
  11. type: 'string',
  12. pattern: '^[a-z\\-]+:\\/\\/(?:\\[([a-z0-9]{0,4}\\:?)+\\])?/?(:[0-9]+)?$'
  13. }
  14. ]
  15. };
  16. // very relaxed validation....
  17. validator(originSchema, req.headers.origin)
  18. .then(function () {
  19. res.set({
  20. 'Access-Control-Allow-Origin': req.headers.origin,
  21. 'Access-Control-Allow-Credentials': true,
  22. 'Access-Control-Allow-Methods': 'OPTIONS, GET, POST',
  23. 'Access-Control-Allow-Headers': 'Content-Type, Cache-Control, Pragma, Expires, Authorization, X-Dataset-Total, X-Dataset-Offset, X-Dataset-Limit',
  24. 'Access-Control-Max-Age': 5 * 60,
  25. 'Access-Control-Expose-Headers': 'X-Dataset-Total, X-Dataset-Offset, X-Dataset-Limit'
  26. });
  27. next();
  28. })
  29. .catch(next);
  30. } else {
  31. // No origin
  32. next();
  33. }
  34. };