endpoints.go raw

   1  // Code generated by smithy-go-codegen DO NOT EDIT.
   2  
   3  package endpoints
   4  
   5  import (
   6  	"github.com/aws/aws-sdk-go-v2/aws"
   7  	endpoints "github.com/aws/aws-sdk-go-v2/internal/endpoints/v2"
   8  	"github.com/aws/smithy-go/logging"
   9  	"regexp"
  10  )
  11  
  12  // Options is the endpoint resolver configuration options
  13  type Options struct {
  14  	// Logger is a logging implementation that log events should be sent to.
  15  	Logger logging.Logger
  16  
  17  	// LogDeprecated indicates that deprecated endpoints should be logged to the
  18  	// provided logger.
  19  	LogDeprecated bool
  20  
  21  	// ResolvedRegion is used to override the region to be resolved, rather then the
  22  	// using the value passed to the ResolveEndpoint method. This value is used by the
  23  	// SDK to translate regions like fips-us-east-1 or us-east-1-fips to an alternative
  24  	// name. You must not set this value directly in your application.
  25  	ResolvedRegion string
  26  
  27  	// DisableHTTPS informs the resolver to return an endpoint that does not use the
  28  	// HTTPS scheme.
  29  	DisableHTTPS bool
  30  
  31  	// UseDualStackEndpoint specifies the resolver must resolve a dual-stack endpoint.
  32  	UseDualStackEndpoint aws.DualStackEndpointState
  33  
  34  	// UseFIPSEndpoint specifies the resolver must resolve a FIPS endpoint.
  35  	UseFIPSEndpoint aws.FIPSEndpointState
  36  }
  37  
  38  func (o Options) GetResolvedRegion() string {
  39  	return o.ResolvedRegion
  40  }
  41  
  42  func (o Options) GetDisableHTTPS() bool {
  43  	return o.DisableHTTPS
  44  }
  45  
  46  func (o Options) GetUseDualStackEndpoint() aws.DualStackEndpointState {
  47  	return o.UseDualStackEndpoint
  48  }
  49  
  50  func (o Options) GetUseFIPSEndpoint() aws.FIPSEndpointState {
  51  	return o.UseFIPSEndpoint
  52  }
  53  
  54  func transformToSharedOptions(options Options) endpoints.Options {
  55  	return endpoints.Options{
  56  		Logger:               options.Logger,
  57  		LogDeprecated:        options.LogDeprecated,
  58  		ResolvedRegion:       options.ResolvedRegion,
  59  		DisableHTTPS:         options.DisableHTTPS,
  60  		UseDualStackEndpoint: options.UseDualStackEndpoint,
  61  		UseFIPSEndpoint:      options.UseFIPSEndpoint,
  62  	}
  63  }
  64  
  65  // Resolver Route 53 endpoint resolver
  66  type Resolver struct {
  67  	partitions endpoints.Partitions
  68  }
  69  
  70  // ResolveEndpoint resolves the service endpoint for the given region and options
  71  func (r *Resolver) ResolveEndpoint(region string, options Options) (endpoint aws.Endpoint, err error) {
  72  	if len(region) == 0 {
  73  		return endpoint, &aws.MissingRegionError{}
  74  	}
  75  
  76  	opt := transformToSharedOptions(options)
  77  	return r.partitions.ResolveEndpoint(region, opt)
  78  }
  79  
  80  // New returns a new Resolver
  81  func New() *Resolver {
  82  	return &Resolver{
  83  		partitions: defaultPartitions,
  84  	}
  85  }
  86  
  87  var partitionRegexp = struct {
  88  	Aws      *regexp.Regexp
  89  	AwsCn    *regexp.Regexp
  90  	AwsEusc  *regexp.Regexp
  91  	AwsIso   *regexp.Regexp
  92  	AwsIsoB  *regexp.Regexp
  93  	AwsIsoE  *regexp.Regexp
  94  	AwsIsoF  *regexp.Regexp
  95  	AwsUsGov *regexp.Regexp
  96  }{
  97  
  98  	Aws:      regexp.MustCompile("^(us|eu|ap|sa|ca|me|af|il|mx)\\-\\w+\\-\\d+$"),
  99  	AwsCn:    regexp.MustCompile("^cn\\-\\w+\\-\\d+$"),
 100  	AwsEusc:  regexp.MustCompile("^eusc\\-(de)\\-\\w+\\-\\d+$"),
 101  	AwsIso:   regexp.MustCompile("^us\\-iso\\-\\w+\\-\\d+$"),
 102  	AwsIsoB:  regexp.MustCompile("^us\\-isob\\-\\w+\\-\\d+$"),
 103  	AwsIsoE:  regexp.MustCompile("^eu\\-isoe\\-\\w+\\-\\d+$"),
 104  	AwsIsoF:  regexp.MustCompile("^us\\-isof\\-\\w+\\-\\d+$"),
 105  	AwsUsGov: regexp.MustCompile("^us\\-gov\\-\\w+\\-\\d+$"),
 106  }
 107  
 108  var defaultPartitions = endpoints.Partitions{
 109  	{
 110  		ID: "aws",
 111  		Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
 112  			{
 113  				Variant: endpoints.DualStackVariant,
 114  			}: {
 115  				Hostname:          "route53.{region}.api.aws",
 116  				Protocols:         []string{"https"},
 117  				SignatureVersions: []string{"v4"},
 118  			},
 119  			{
 120  				Variant: endpoints.FIPSVariant,
 121  			}: {
 122  				Hostname:          "route53-fips.{region}.amazonaws.com",
 123  				Protocols:         []string{"https"},
 124  				SignatureVersions: []string{"v4"},
 125  			},
 126  			{
 127  				Variant: endpoints.FIPSVariant | endpoints.DualStackVariant,
 128  			}: {
 129  				Hostname:          "route53-fips.{region}.api.aws",
 130  				Protocols:         []string{"https"},
 131  				SignatureVersions: []string{"v4"},
 132  			},
 133  			{
 134  				Variant: 0,
 135  			}: {
 136  				Hostname:          "route53.{region}.amazonaws.com",
 137  				Protocols:         []string{"https"},
 138  				SignatureVersions: []string{"v4"},
 139  			},
 140  		},
 141  		RegionRegex:       partitionRegexp.Aws,
 142  		IsRegionalized:    false,
 143  		PartitionEndpoint: "aws-global",
 144  		Endpoints: endpoints.Endpoints{
 145  			endpoints.EndpointKey{
 146  				Region: "aws-global",
 147  			}: endpoints.Endpoint{
 148  				Hostname: "route53.amazonaws.com",
 149  				CredentialScope: endpoints.CredentialScope{
 150  					Region: "us-east-1",
 151  				},
 152  			},
 153  			endpoints.EndpointKey{
 154  				Region:  "aws-global",
 155  				Variant: endpoints.FIPSVariant,
 156  			}: {
 157  				Hostname: "route53-fips.amazonaws.com",
 158  				CredentialScope: endpoints.CredentialScope{
 159  					Region: "us-east-1",
 160  				},
 161  			},
 162  			endpoints.EndpointKey{
 163  				Region: "fips-aws-global",
 164  			}: endpoints.Endpoint{
 165  				Hostname: "route53-fips.amazonaws.com",
 166  				CredentialScope: endpoints.CredentialScope{
 167  					Region: "us-east-1",
 168  				},
 169  				Deprecated: aws.TrueTernary,
 170  			},
 171  		},
 172  	},
 173  	{
 174  		ID: "aws-cn",
 175  		Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
 176  			{
 177  				Variant: endpoints.DualStackVariant,
 178  			}: {
 179  				Hostname:          "route53.{region}.api.amazonwebservices.com.cn",
 180  				Protocols:         []string{"https"},
 181  				SignatureVersions: []string{"v4"},
 182  			},
 183  			{
 184  				Variant: endpoints.FIPSVariant,
 185  			}: {
 186  				Hostname:          "route53-fips.{region}.amazonaws.com.cn",
 187  				Protocols:         []string{"https"},
 188  				SignatureVersions: []string{"v4"},
 189  			},
 190  			{
 191  				Variant: endpoints.FIPSVariant | endpoints.DualStackVariant,
 192  			}: {
 193  				Hostname:          "route53-fips.{region}.api.amazonwebservices.com.cn",
 194  				Protocols:         []string{"https"},
 195  				SignatureVersions: []string{"v4"},
 196  			},
 197  			{
 198  				Variant: 0,
 199  			}: {
 200  				Hostname:          "route53.{region}.amazonaws.com.cn",
 201  				Protocols:         []string{"https"},
 202  				SignatureVersions: []string{"v4"},
 203  			},
 204  		},
 205  		RegionRegex:       partitionRegexp.AwsCn,
 206  		IsRegionalized:    false,
 207  		PartitionEndpoint: "aws-cn-global",
 208  		Endpoints: endpoints.Endpoints{
 209  			endpoints.EndpointKey{
 210  				Region: "aws-cn-global",
 211  			}: endpoints.Endpoint{
 212  				Hostname: "route53.amazonaws.com.cn",
 213  				CredentialScope: endpoints.CredentialScope{
 214  					Region: "cn-northwest-1",
 215  				},
 216  			},
 217  		},
 218  	},
 219  	{
 220  		ID: "aws-eusc",
 221  		Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
 222  			{
 223  				Variant: endpoints.DualStackVariant,
 224  			}: {
 225  				Hostname:          "route53.{region}.api.amazonwebservices.eu",
 226  				Protocols:         []string{"https"},
 227  				SignatureVersions: []string{"v4"},
 228  			},
 229  			{
 230  				Variant: endpoints.FIPSVariant,
 231  			}: {
 232  				Hostname:          "route53-fips.{region}.amazonaws.eu",
 233  				Protocols:         []string{"https"},
 234  				SignatureVersions: []string{"v4"},
 235  			},
 236  			{
 237  				Variant: endpoints.FIPSVariant | endpoints.DualStackVariant,
 238  			}: {
 239  				Hostname:          "route53-fips.{region}.api.amazonwebservices.eu",
 240  				Protocols:         []string{"https"},
 241  				SignatureVersions: []string{"v4"},
 242  			},
 243  			{
 244  				Variant: 0,
 245  			}: {
 246  				Hostname:          "route53.{region}.amazonaws.eu",
 247  				Protocols:         []string{"https"},
 248  				SignatureVersions: []string{"v4"},
 249  			},
 250  		},
 251  		RegionRegex:    partitionRegexp.AwsEusc,
 252  		IsRegionalized: true,
 253  	},
 254  	{
 255  		ID: "aws-iso",
 256  		Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
 257  			{
 258  				Variant: endpoints.FIPSVariant,
 259  			}: {
 260  				Hostname:          "route53-fips.{region}.c2s.ic.gov",
 261  				Protocols:         []string{"https"},
 262  				SignatureVersions: []string{"v4"},
 263  			},
 264  			{
 265  				Variant: 0,
 266  			}: {
 267  				Hostname:          "route53.{region}.c2s.ic.gov",
 268  				Protocols:         []string{"https"},
 269  				SignatureVersions: []string{"v4"},
 270  			},
 271  		},
 272  		RegionRegex:       partitionRegexp.AwsIso,
 273  		IsRegionalized:    false,
 274  		PartitionEndpoint: "aws-iso-global",
 275  		Endpoints: endpoints.Endpoints{
 276  			endpoints.EndpointKey{
 277  				Region: "aws-iso-global",
 278  			}: endpoints.Endpoint{
 279  				Hostname: "route53.c2s.ic.gov",
 280  				CredentialScope: endpoints.CredentialScope{
 281  					Region: "us-iso-east-1",
 282  				},
 283  			},
 284  		},
 285  	},
 286  	{
 287  		ID: "aws-iso-b",
 288  		Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
 289  			{
 290  				Variant: endpoints.FIPSVariant,
 291  			}: {
 292  				Hostname:          "route53-fips.{region}.sc2s.sgov.gov",
 293  				Protocols:         []string{"https"},
 294  				SignatureVersions: []string{"v4"},
 295  			},
 296  			{
 297  				Variant: 0,
 298  			}: {
 299  				Hostname:          "route53.{region}.sc2s.sgov.gov",
 300  				Protocols:         []string{"https"},
 301  				SignatureVersions: []string{"v4"},
 302  			},
 303  		},
 304  		RegionRegex:       partitionRegexp.AwsIsoB,
 305  		IsRegionalized:    false,
 306  		PartitionEndpoint: "aws-iso-b-global",
 307  		Endpoints: endpoints.Endpoints{
 308  			endpoints.EndpointKey{
 309  				Region: "aws-iso-b-global",
 310  			}: endpoints.Endpoint{
 311  				Hostname: "route53.sc2s.sgov.gov",
 312  				CredentialScope: endpoints.CredentialScope{
 313  					Region: "us-isob-east-1",
 314  				},
 315  			},
 316  		},
 317  	},
 318  	{
 319  		ID: "aws-iso-e",
 320  		Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
 321  			{
 322  				Variant: endpoints.FIPSVariant,
 323  			}: {
 324  				Hostname:          "route53-fips.{region}.cloud.adc-e.uk",
 325  				Protocols:         []string{"https"},
 326  				SignatureVersions: []string{"v4"},
 327  			},
 328  			{
 329  				Variant: 0,
 330  			}: {
 331  				Hostname:          "route53.{region}.cloud.adc-e.uk",
 332  				Protocols:         []string{"https"},
 333  				SignatureVersions: []string{"v4"},
 334  			},
 335  		},
 336  		RegionRegex:       partitionRegexp.AwsIsoE,
 337  		IsRegionalized:    false,
 338  		PartitionEndpoint: "aws-iso-e-global",
 339  		Endpoints: endpoints.Endpoints{
 340  			endpoints.EndpointKey{
 341  				Region: "aws-iso-e-global",
 342  			}: endpoints.Endpoint{
 343  				Hostname: "route53.cloud.adc-e.uk",
 344  				CredentialScope: endpoints.CredentialScope{
 345  					Region: "eu-isoe-west-1",
 346  				},
 347  			},
 348  		},
 349  	},
 350  	{
 351  		ID: "aws-iso-f",
 352  		Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
 353  			{
 354  				Variant: endpoints.FIPSVariant,
 355  			}: {
 356  				Hostname:          "route53-fips.{region}.csp.hci.ic.gov",
 357  				Protocols:         []string{"https"},
 358  				SignatureVersions: []string{"v4"},
 359  			},
 360  			{
 361  				Variant: 0,
 362  			}: {
 363  				Hostname:          "route53.{region}.csp.hci.ic.gov",
 364  				Protocols:         []string{"https"},
 365  				SignatureVersions: []string{"v4"},
 366  			},
 367  		},
 368  		RegionRegex:       partitionRegexp.AwsIsoF,
 369  		IsRegionalized:    false,
 370  		PartitionEndpoint: "aws-iso-f-global",
 371  		Endpoints: endpoints.Endpoints{
 372  			endpoints.EndpointKey{
 373  				Region: "aws-iso-f-global",
 374  			}: endpoints.Endpoint{
 375  				Hostname: "route53.csp.hci.ic.gov",
 376  				CredentialScope: endpoints.CredentialScope{
 377  					Region: "us-isof-south-1",
 378  				},
 379  			},
 380  		},
 381  	},
 382  	{
 383  		ID: "aws-us-gov",
 384  		Defaults: map[endpoints.DefaultKey]endpoints.Endpoint{
 385  			{
 386  				Variant: endpoints.DualStackVariant,
 387  			}: {
 388  				Hostname:          "route53.{region}.api.aws",
 389  				Protocols:         []string{"https"},
 390  				SignatureVersions: []string{"v4"},
 391  			},
 392  			{
 393  				Variant: endpoints.FIPSVariant,
 394  			}: {
 395  				Hostname:          "route53-fips.{region}.amazonaws.com",
 396  				Protocols:         []string{"https"},
 397  				SignatureVersions: []string{"v4"},
 398  			},
 399  			{
 400  				Variant: endpoints.FIPSVariant | endpoints.DualStackVariant,
 401  			}: {
 402  				Hostname:          "route53-fips.{region}.api.aws",
 403  				Protocols:         []string{"https"},
 404  				SignatureVersions: []string{"v4"},
 405  			},
 406  			{
 407  				Variant: 0,
 408  			}: {
 409  				Hostname:          "route53.{region}.amazonaws.com",
 410  				Protocols:         []string{"https"},
 411  				SignatureVersions: []string{"v4"},
 412  			},
 413  		},
 414  		RegionRegex:       partitionRegexp.AwsUsGov,
 415  		IsRegionalized:    false,
 416  		PartitionEndpoint: "aws-us-gov-global",
 417  		Endpoints: endpoints.Endpoints{
 418  			endpoints.EndpointKey{
 419  				Region: "aws-us-gov-global",
 420  			}: endpoints.Endpoint{
 421  				Hostname: "route53.us-gov.amazonaws.com",
 422  				CredentialScope: endpoints.CredentialScope{
 423  					Region: "us-gov-west-1",
 424  				},
 425  			},
 426  			endpoints.EndpointKey{
 427  				Region:  "aws-us-gov-global",
 428  				Variant: endpoints.FIPSVariant,
 429  			}: {
 430  				Hostname: "route53.us-gov.amazonaws.com",
 431  				CredentialScope: endpoints.CredentialScope{
 432  					Region: "us-gov-west-1",
 433  				},
 434  			},
 435  			endpoints.EndpointKey{
 436  				Region: "fips-aws-us-gov-global",
 437  			}: endpoints.Endpoint{
 438  				Hostname: "route53.us-gov.amazonaws.com",
 439  				CredentialScope: endpoints.CredentialScope{
 440  					Region: "us-gov-west-1",
 441  				},
 442  				Deprecated: aws.TrueTernary,
 443  			},
 444  		},
 445  	},
 446  }
 447