region_config.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. var util = require('./util');
  2. var regionConfig = require('./region_config_data.json');
  3. function generateRegionPrefix(region) {
  4. if (!region) return null;
  5. var parts = region.split('-');
  6. if (parts.length < 3) return null;
  7. return parts.slice(0, parts.length - 2).join('-') + '-*';
  8. }
  9. function derivedKeys(service) {
  10. var region = service.config.region;
  11. var regionPrefix = generateRegionPrefix(region);
  12. var endpointPrefix = service.api.endpointPrefix;
  13. return [
  14. [region, endpointPrefix],
  15. [regionPrefix, endpointPrefix],
  16. [region, '*'],
  17. [regionPrefix, '*'],
  18. ['*', endpointPrefix],
  19. [region, 'internal-*'],
  20. ['*', '*']
  21. ].map(function(item) {
  22. return item[0] && item[1] ? item.join('/') : null;
  23. });
  24. }
  25. function applyConfig(service, config) {
  26. util.each(config, function(key, value) {
  27. if (key === 'globalEndpoint') return;
  28. if (service.config[key] === undefined || service.config[key] === null) {
  29. service.config[key] = value;
  30. }
  31. });
  32. }
  33. function configureEndpoint(service) {
  34. var keys = derivedKeys(service);
  35. var useFipsEndpoint = service.config.useFipsEndpoint;
  36. var useDualstackEndpoint = service.config.useDualstackEndpoint;
  37. for (var i = 0; i < keys.length; i++) {
  38. var key = keys[i];
  39. if (!key) continue;
  40. var rules = useFipsEndpoint
  41. ? useDualstackEndpoint
  42. ? regionConfig.dualstackFipsRules
  43. : regionConfig.fipsRules
  44. : useDualstackEndpoint
  45. ? regionConfig.dualstackRules
  46. : regionConfig.rules;
  47. if (Object.prototype.hasOwnProperty.call(rules, key)) {
  48. var config = rules[key];
  49. if (typeof config === 'string') {
  50. config = regionConfig.patterns[config];
  51. }
  52. // set global endpoint
  53. service.isGlobalEndpoint = !!config.globalEndpoint;
  54. if (config.signingRegion) {
  55. service.signingRegion = config.signingRegion;
  56. }
  57. // signature version
  58. if (!config.signatureVersion) {
  59. // Note: config is a global object and should not be mutated here.
  60. // However, we are retaining this line for backwards compatibility.
  61. // The non-v4 signatureVersion will be set in a copied object below.
  62. config.signatureVersion = 'v4';
  63. }
  64. var useBearer = (service.api && service.api.signatureVersion) === 'bearer';
  65. // merge config
  66. applyConfig(service, Object.assign(
  67. {},
  68. config,
  69. { signatureVersion: useBearer ? 'bearer' : config.signatureVersion }
  70. ));
  71. return;
  72. }
  73. }
  74. }
  75. function getEndpointSuffix(region) {
  76. var regionRegexes = {
  77. '^(us|eu|ap|sa|ca|me)\\-\\w+\\-\\d+$': 'amazonaws.com',
  78. '^cn\\-\\w+\\-\\d+$': 'amazonaws.com.cn',
  79. '^us\\-gov\\-\\w+\\-\\d+$': 'amazonaws.com',
  80. '^us\\-iso\\-\\w+\\-\\d+$': 'c2s.ic.gov',
  81. '^us\\-isob\\-\\w+\\-\\d+$': 'sc2s.sgov.gov'
  82. };
  83. var defaultSuffix = 'amazonaws.com';
  84. var regexes = Object.keys(regionRegexes);
  85. for (var i = 0; i < regexes.length; i++) {
  86. var regionPattern = RegExp(regexes[i]);
  87. var dnsSuffix = regionRegexes[regexes[i]];
  88. if (regionPattern.test(region)) return dnsSuffix;
  89. }
  90. return defaultSuffix;
  91. }
  92. /**
  93. * @api private
  94. */
  95. module.exports = {
  96. configureEndpoint: configureEndpoint,
  97. getEndpointSuffix: getEndpointSuffix,
  98. };