endpoints.go (34460B)
1 // Code generated by smithy-go-codegen DO NOT EDIT. 2 3 package sts 4 5 import ( 6 "context" 7 "errors" 8 "fmt" 9 "github.com/aws/aws-sdk-go-v2/aws" 10 awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware" 11 internalConfig "github.com/aws/aws-sdk-go-v2/internal/configsources" 12 "github.com/aws/aws-sdk-go-v2/internal/endpoints" 13 "github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn" 14 internalendpoints "github.com/aws/aws-sdk-go-v2/service/sts/internal/endpoints" 15 smithy "github.com/aws/smithy-go" 16 smithyauth "github.com/aws/smithy-go/auth" 17 smithyendpoints "github.com/aws/smithy-go/endpoints" 18 "github.com/aws/smithy-go/middleware" 19 "github.com/aws/smithy-go/ptr" 20 smithyhttp "github.com/aws/smithy-go/transport/http" 21 "net/http" 22 "net/url" 23 "os" 24 "strings" 25 ) 26 27 // EndpointResolverOptions is the service endpoint resolver options 28 type EndpointResolverOptions = internalendpoints.Options 29 30 // EndpointResolver interface for resolving service endpoints. 31 type EndpointResolver interface { 32 ResolveEndpoint(region string, options EndpointResolverOptions) (aws.Endpoint, error) 33 } 34 35 var _ EndpointResolver = &internalendpoints.Resolver{} 36 37 // NewDefaultEndpointResolver constructs a new service endpoint resolver 38 func NewDefaultEndpointResolver() *internalendpoints.Resolver { 39 return internalendpoints.New() 40 } 41 42 // EndpointResolverFunc is a helper utility that wraps a function so it satisfies 43 // the EndpointResolver interface. This is useful when you want to add additional 44 // endpoint resolving logic, or stub out specific endpoints with custom values. 45 type EndpointResolverFunc func(region string, options EndpointResolverOptions) (aws.Endpoint, error) 46 47 func (fn EndpointResolverFunc) ResolveEndpoint(region string, options EndpointResolverOptions) (endpoint aws.Endpoint, err error) { 48 return fn(region, options) 49 } 50 51 // EndpointResolverFromURL returns an EndpointResolver configured using the 52 // provided endpoint url. By default, the resolved endpoint resolver uses the 53 // client region as signing region, and the endpoint source is set to 54 // EndpointSourceCustom.You can provide functional options to configure endpoint 55 // values for the resolved endpoint. 56 func EndpointResolverFromURL(url string, optFns ...func(*aws.Endpoint)) EndpointResolver { 57 e := aws.Endpoint{URL: url, Source: aws.EndpointSourceCustom} 58 for _, fn := range optFns { 59 fn(&e) 60 } 61 62 return EndpointResolverFunc( 63 func(region string, options EndpointResolverOptions) (aws.Endpoint, error) { 64 if len(e.SigningRegion) == 0 { 65 e.SigningRegion = region 66 } 67 return e, nil 68 }, 69 ) 70 } 71 72 type ResolveEndpoint struct { 73 Resolver EndpointResolver 74 Options EndpointResolverOptions 75 } 76 77 func (*ResolveEndpoint) ID() string { 78 return "ResolveEndpoint" 79 } 80 81 func (m *ResolveEndpoint) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( 82 out middleware.SerializeOutput, metadata middleware.Metadata, err error, 83 ) { 84 if !awsmiddleware.GetRequiresLegacyEndpoints(ctx) { 85 return next.HandleSerialize(ctx, in) 86 } 87 88 req, ok := in.Request.(*smithyhttp.Request) 89 if !ok { 90 return out, metadata, fmt.Errorf("unknown transport type %T", in.Request) 91 } 92 93 if m.Resolver == nil { 94 return out, metadata, fmt.Errorf("expected endpoint resolver to not be nil") 95 } 96 97 eo := m.Options 98 eo.Logger = middleware.GetLogger(ctx) 99 100 var endpoint aws.Endpoint 101 endpoint, err = m.Resolver.ResolveEndpoint(awsmiddleware.GetRegion(ctx), eo) 102 if err != nil { 103 nf := (&aws.EndpointNotFoundError{}) 104 if errors.As(err, &nf) { 105 ctx = awsmiddleware.SetRequiresLegacyEndpoints(ctx, false) 106 return next.HandleSerialize(ctx, in) 107 } 108 return out, metadata, fmt.Errorf("failed to resolve service endpoint, %w", err) 109 } 110 111 req.URL, err = url.Parse(endpoint.URL) 112 if err != nil { 113 return out, metadata, fmt.Errorf("failed to parse endpoint URL: %w", err) 114 } 115 116 if len(awsmiddleware.GetSigningName(ctx)) == 0 { 117 signingName := endpoint.SigningName 118 if len(signingName) == 0 { 119 signingName = "sts" 120 } 121 ctx = awsmiddleware.SetSigningName(ctx, signingName) 122 } 123 ctx = awsmiddleware.SetEndpointSource(ctx, endpoint.Source) 124 ctx = smithyhttp.SetHostnameImmutable(ctx, endpoint.HostnameImmutable) 125 ctx = awsmiddleware.SetSigningRegion(ctx, endpoint.SigningRegion) 126 ctx = awsmiddleware.SetPartitionID(ctx, endpoint.PartitionID) 127 return next.HandleSerialize(ctx, in) 128 } 129 func addResolveEndpointMiddleware(stack *middleware.Stack, o Options) error { 130 return stack.Serialize.Insert(&ResolveEndpoint{ 131 Resolver: o.EndpointResolver, 132 Options: o.EndpointOptions, 133 }, "OperationSerializer", middleware.Before) 134 } 135 136 func removeResolveEndpointMiddleware(stack *middleware.Stack) error { 137 _, err := stack.Serialize.Remove((&ResolveEndpoint{}).ID()) 138 return err 139 } 140 141 type wrappedEndpointResolver struct { 142 awsResolver aws.EndpointResolverWithOptions 143 } 144 145 func (w *wrappedEndpointResolver) ResolveEndpoint(region string, options EndpointResolverOptions) (endpoint aws.Endpoint, err error) { 146 return w.awsResolver.ResolveEndpoint(ServiceID, region, options) 147 } 148 149 type awsEndpointResolverAdaptor func(service, region string) (aws.Endpoint, error) 150 151 func (a awsEndpointResolverAdaptor) ResolveEndpoint(service, region string, options ...interface{}) (aws.Endpoint, error) { 152 return a(service, region) 153 } 154 155 var _ aws.EndpointResolverWithOptions = awsEndpointResolverAdaptor(nil) 156 157 // withEndpointResolver returns an aws.EndpointResolverWithOptions that first delegates endpoint resolution to the awsResolver. 158 // If awsResolver returns aws.EndpointNotFoundError error, the v1 resolver middleware will swallow the error, 159 // and set an appropriate context flag such that fallback will occur when EndpointResolverV2 is invoked 160 // via its middleware. 161 // 162 // If another error (besides aws.EndpointNotFoundError) is returned, then that error will be propagated. 163 func withEndpointResolver(awsResolver aws.EndpointResolver, awsResolverWithOptions aws.EndpointResolverWithOptions) EndpointResolver { 164 var resolver aws.EndpointResolverWithOptions 165 166 if awsResolverWithOptions != nil { 167 resolver = awsResolverWithOptions 168 } else if awsResolver != nil { 169 resolver = awsEndpointResolverAdaptor(awsResolver.ResolveEndpoint) 170 } 171 172 return &wrappedEndpointResolver{ 173 awsResolver: resolver, 174 } 175 } 176 177 func finalizeClientEndpointResolverOptions(options *Options) { 178 options.EndpointOptions.LogDeprecated = options.ClientLogMode.IsDeprecatedUsage() 179 180 if len(options.EndpointOptions.ResolvedRegion) == 0 { 181 const fipsInfix = "-fips-" 182 const fipsPrefix = "fips-" 183 const fipsSuffix = "-fips" 184 185 if strings.Contains(options.Region, fipsInfix) || 186 strings.Contains(options.Region, fipsPrefix) || 187 strings.Contains(options.Region, fipsSuffix) { 188 options.EndpointOptions.ResolvedRegion = strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll( 189 options.Region, fipsInfix, "-"), fipsPrefix, ""), fipsSuffix, "") 190 options.EndpointOptions.UseFIPSEndpoint = aws.FIPSEndpointStateEnabled 191 } 192 } 193 194 } 195 196 func resolveEndpointResolverV2(options *Options) { 197 if options.EndpointResolverV2 == nil { 198 options.EndpointResolverV2 = NewDefaultEndpointResolverV2() 199 } 200 } 201 202 func resolveBaseEndpoint(cfg aws.Config, o *Options) { 203 if cfg.BaseEndpoint != nil { 204 o.BaseEndpoint = cfg.BaseEndpoint 205 } 206 207 _, g := os.LookupEnv("AWS_ENDPOINT_URL") 208 _, s := os.LookupEnv("AWS_ENDPOINT_URL_STS") 209 210 if g && !s { 211 return 212 } 213 214 value, found, err := internalConfig.ResolveServiceBaseEndpoint(context.Background(), "STS", cfg.ConfigSources) 215 if found && err == nil { 216 o.BaseEndpoint = &value 217 } 218 } 219 220 func bindRegion(region string) *string { 221 if region == "" { 222 return nil 223 } 224 return aws.String(endpoints.MapFIPSRegion(region)) 225 } 226 227 // EndpointParameters provides the parameters that influence how endpoints are 228 // resolved. 229 type EndpointParameters struct { 230 // The AWS region used to dispatch the request. 231 // 232 // Parameter is 233 // required. 234 // 235 // AWS::Region 236 Region *string 237 238 // When true, use the dual-stack endpoint. If the configured endpoint does not 239 // support dual-stack, dispatching the request MAY return an error. 240 // 241 // Defaults to 242 // false if no value is provided. 243 // 244 // AWS::UseDualStack 245 UseDualStack *bool 246 247 // When true, send this request to the FIPS-compliant regional endpoint. If the 248 // configured endpoint does not have a FIPS compliant endpoint, dispatching the 249 // request will return an error. 250 // 251 // Defaults to false if no value is 252 // provided. 253 // 254 // AWS::UseFIPS 255 UseFIPS *bool 256 257 // Override the endpoint used to send this request 258 // 259 // Parameter is 260 // required. 261 // 262 // SDK::Endpoint 263 Endpoint *string 264 265 // Whether the global endpoint should be used, rather then the regional endpoint 266 // for us-east-1. 267 // 268 // Defaults to false if no value is 269 // provided. 270 // 271 // AWS::STS::UseGlobalEndpoint 272 UseGlobalEndpoint *bool 273 } 274 275 // ValidateRequired validates required parameters are set. 276 func (p EndpointParameters) ValidateRequired() error { 277 if p.UseDualStack == nil { 278 return fmt.Errorf("parameter UseDualStack is required") 279 } 280 281 if p.UseFIPS == nil { 282 return fmt.Errorf("parameter UseFIPS is required") 283 } 284 285 if p.UseGlobalEndpoint == nil { 286 return fmt.Errorf("parameter UseGlobalEndpoint is required") 287 } 288 289 return nil 290 } 291 292 // WithDefaults returns a shallow copy of EndpointParameterswith default values 293 // applied to members where applicable. 294 func (p EndpointParameters) WithDefaults() EndpointParameters { 295 if p.UseDualStack == nil { 296 p.UseDualStack = ptr.Bool(false) 297 } 298 299 if p.UseFIPS == nil { 300 p.UseFIPS = ptr.Bool(false) 301 } 302 303 if p.UseGlobalEndpoint == nil { 304 p.UseGlobalEndpoint = ptr.Bool(false) 305 } 306 return p 307 } 308 309 // EndpointResolverV2 provides the interface for resolving service endpoints. 310 type EndpointResolverV2 interface { 311 // ResolveEndpoint attempts to resolve the endpoint with the provided options, 312 // returning the endpoint if found. Otherwise an error is returned. 313 ResolveEndpoint(ctx context.Context, params EndpointParameters) ( 314 smithyendpoints.Endpoint, error, 315 ) 316 } 317 318 // resolver provides the implementation for resolving endpoints. 319 type resolver struct{} 320 321 func NewDefaultEndpointResolverV2() EndpointResolverV2 { 322 return &resolver{} 323 } 324 325 // ResolveEndpoint attempts to resolve the endpoint with the provided options, 326 // returning the endpoint if found. Otherwise an error is returned. 327 func (r *resolver) ResolveEndpoint( 328 ctx context.Context, params EndpointParameters, 329 ) ( 330 endpoint smithyendpoints.Endpoint, err error, 331 ) { 332 params = params.WithDefaults() 333 if err = params.ValidateRequired(); err != nil { 334 return endpoint, fmt.Errorf("endpoint parameters are not valid, %w", err) 335 } 336 _UseDualStack := *params.UseDualStack 337 _UseFIPS := *params.UseFIPS 338 _UseGlobalEndpoint := *params.UseGlobalEndpoint 339 340 if _UseGlobalEndpoint == true { 341 if !(params.Endpoint != nil) { 342 if exprVal := params.Region; exprVal != nil { 343 _Region := *exprVal 344 _ = _Region 345 if exprVal := awsrulesfn.GetPartition(_Region); exprVal != nil { 346 _PartitionResult := *exprVal 347 _ = _PartitionResult 348 if _UseFIPS == false { 349 if _UseDualStack == false { 350 if _Region == "ap-northeast-1" { 351 uriString := "https://sts.amazonaws.com" 352 353 uri, err := url.Parse(uriString) 354 if err != nil { 355 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 356 } 357 358 return smithyendpoints.Endpoint{ 359 URI: *uri, 360 Headers: http.Header{}, 361 Properties: func() smithy.Properties { 362 var out smithy.Properties 363 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 364 { 365 SchemeID: "aws.auth#sigv4", 366 SignerProperties: func() smithy.Properties { 367 var sp smithy.Properties 368 smithyhttp.SetSigV4SigningName(&sp, "sts") 369 smithyhttp.SetSigV4ASigningName(&sp, "sts") 370 371 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 372 return sp 373 }(), 374 }, 375 }) 376 return out 377 }(), 378 }, nil 379 } 380 if _Region == "ap-south-1" { 381 uriString := "https://sts.amazonaws.com" 382 383 uri, err := url.Parse(uriString) 384 if err != nil { 385 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 386 } 387 388 return smithyendpoints.Endpoint{ 389 URI: *uri, 390 Headers: http.Header{}, 391 Properties: func() smithy.Properties { 392 var out smithy.Properties 393 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 394 { 395 SchemeID: "aws.auth#sigv4", 396 SignerProperties: func() smithy.Properties { 397 var sp smithy.Properties 398 smithyhttp.SetSigV4SigningName(&sp, "sts") 399 smithyhttp.SetSigV4ASigningName(&sp, "sts") 400 401 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 402 return sp 403 }(), 404 }, 405 }) 406 return out 407 }(), 408 }, nil 409 } 410 if _Region == "ap-southeast-1" { 411 uriString := "https://sts.amazonaws.com" 412 413 uri, err := url.Parse(uriString) 414 if err != nil { 415 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 416 } 417 418 return smithyendpoints.Endpoint{ 419 URI: *uri, 420 Headers: http.Header{}, 421 Properties: func() smithy.Properties { 422 var out smithy.Properties 423 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 424 { 425 SchemeID: "aws.auth#sigv4", 426 SignerProperties: func() smithy.Properties { 427 var sp smithy.Properties 428 smithyhttp.SetSigV4SigningName(&sp, "sts") 429 smithyhttp.SetSigV4ASigningName(&sp, "sts") 430 431 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 432 return sp 433 }(), 434 }, 435 }) 436 return out 437 }(), 438 }, nil 439 } 440 if _Region == "ap-southeast-2" { 441 uriString := "https://sts.amazonaws.com" 442 443 uri, err := url.Parse(uriString) 444 if err != nil { 445 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 446 } 447 448 return smithyendpoints.Endpoint{ 449 URI: *uri, 450 Headers: http.Header{}, 451 Properties: func() smithy.Properties { 452 var out smithy.Properties 453 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 454 { 455 SchemeID: "aws.auth#sigv4", 456 SignerProperties: func() smithy.Properties { 457 var sp smithy.Properties 458 smithyhttp.SetSigV4SigningName(&sp, "sts") 459 smithyhttp.SetSigV4ASigningName(&sp, "sts") 460 461 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 462 return sp 463 }(), 464 }, 465 }) 466 return out 467 }(), 468 }, nil 469 } 470 if _Region == "aws-global" { 471 uriString := "https://sts.amazonaws.com" 472 473 uri, err := url.Parse(uriString) 474 if err != nil { 475 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 476 } 477 478 return smithyendpoints.Endpoint{ 479 URI: *uri, 480 Headers: http.Header{}, 481 Properties: func() smithy.Properties { 482 var out smithy.Properties 483 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 484 { 485 SchemeID: "aws.auth#sigv4", 486 SignerProperties: func() smithy.Properties { 487 var sp smithy.Properties 488 smithyhttp.SetSigV4SigningName(&sp, "sts") 489 smithyhttp.SetSigV4ASigningName(&sp, "sts") 490 491 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 492 return sp 493 }(), 494 }, 495 }) 496 return out 497 }(), 498 }, nil 499 } 500 if _Region == "ca-central-1" { 501 uriString := "https://sts.amazonaws.com" 502 503 uri, err := url.Parse(uriString) 504 if err != nil { 505 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 506 } 507 508 return smithyendpoints.Endpoint{ 509 URI: *uri, 510 Headers: http.Header{}, 511 Properties: func() smithy.Properties { 512 var out smithy.Properties 513 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 514 { 515 SchemeID: "aws.auth#sigv4", 516 SignerProperties: func() smithy.Properties { 517 var sp smithy.Properties 518 smithyhttp.SetSigV4SigningName(&sp, "sts") 519 smithyhttp.SetSigV4ASigningName(&sp, "sts") 520 521 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 522 return sp 523 }(), 524 }, 525 }) 526 return out 527 }(), 528 }, nil 529 } 530 if _Region == "eu-central-1" { 531 uriString := "https://sts.amazonaws.com" 532 533 uri, err := url.Parse(uriString) 534 if err != nil { 535 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 536 } 537 538 return smithyendpoints.Endpoint{ 539 URI: *uri, 540 Headers: http.Header{}, 541 Properties: func() smithy.Properties { 542 var out smithy.Properties 543 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 544 { 545 SchemeID: "aws.auth#sigv4", 546 SignerProperties: func() smithy.Properties { 547 var sp smithy.Properties 548 smithyhttp.SetSigV4SigningName(&sp, "sts") 549 smithyhttp.SetSigV4ASigningName(&sp, "sts") 550 551 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 552 return sp 553 }(), 554 }, 555 }) 556 return out 557 }(), 558 }, nil 559 } 560 if _Region == "eu-north-1" { 561 uriString := "https://sts.amazonaws.com" 562 563 uri, err := url.Parse(uriString) 564 if err != nil { 565 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 566 } 567 568 return smithyendpoints.Endpoint{ 569 URI: *uri, 570 Headers: http.Header{}, 571 Properties: func() smithy.Properties { 572 var out smithy.Properties 573 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 574 { 575 SchemeID: "aws.auth#sigv4", 576 SignerProperties: func() smithy.Properties { 577 var sp smithy.Properties 578 smithyhttp.SetSigV4SigningName(&sp, "sts") 579 smithyhttp.SetSigV4ASigningName(&sp, "sts") 580 581 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 582 return sp 583 }(), 584 }, 585 }) 586 return out 587 }(), 588 }, nil 589 } 590 if _Region == "eu-west-1" { 591 uriString := "https://sts.amazonaws.com" 592 593 uri, err := url.Parse(uriString) 594 if err != nil { 595 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 596 } 597 598 return smithyendpoints.Endpoint{ 599 URI: *uri, 600 Headers: http.Header{}, 601 Properties: func() smithy.Properties { 602 var out smithy.Properties 603 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 604 { 605 SchemeID: "aws.auth#sigv4", 606 SignerProperties: func() smithy.Properties { 607 var sp smithy.Properties 608 smithyhttp.SetSigV4SigningName(&sp, "sts") 609 smithyhttp.SetSigV4ASigningName(&sp, "sts") 610 611 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 612 return sp 613 }(), 614 }, 615 }) 616 return out 617 }(), 618 }, nil 619 } 620 if _Region == "eu-west-2" { 621 uriString := "https://sts.amazonaws.com" 622 623 uri, err := url.Parse(uriString) 624 if err != nil { 625 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 626 } 627 628 return smithyendpoints.Endpoint{ 629 URI: *uri, 630 Headers: http.Header{}, 631 Properties: func() smithy.Properties { 632 var out smithy.Properties 633 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 634 { 635 SchemeID: "aws.auth#sigv4", 636 SignerProperties: func() smithy.Properties { 637 var sp smithy.Properties 638 smithyhttp.SetSigV4SigningName(&sp, "sts") 639 smithyhttp.SetSigV4ASigningName(&sp, "sts") 640 641 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 642 return sp 643 }(), 644 }, 645 }) 646 return out 647 }(), 648 }, nil 649 } 650 if _Region == "eu-west-3" { 651 uriString := "https://sts.amazonaws.com" 652 653 uri, err := url.Parse(uriString) 654 if err != nil { 655 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 656 } 657 658 return smithyendpoints.Endpoint{ 659 URI: *uri, 660 Headers: http.Header{}, 661 Properties: func() smithy.Properties { 662 var out smithy.Properties 663 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 664 { 665 SchemeID: "aws.auth#sigv4", 666 SignerProperties: func() smithy.Properties { 667 var sp smithy.Properties 668 smithyhttp.SetSigV4SigningName(&sp, "sts") 669 smithyhttp.SetSigV4ASigningName(&sp, "sts") 670 671 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 672 return sp 673 }(), 674 }, 675 }) 676 return out 677 }(), 678 }, nil 679 } 680 if _Region == "sa-east-1" { 681 uriString := "https://sts.amazonaws.com" 682 683 uri, err := url.Parse(uriString) 684 if err != nil { 685 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 686 } 687 688 return smithyendpoints.Endpoint{ 689 URI: *uri, 690 Headers: http.Header{}, 691 Properties: func() smithy.Properties { 692 var out smithy.Properties 693 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 694 { 695 SchemeID: "aws.auth#sigv4", 696 SignerProperties: func() smithy.Properties { 697 var sp smithy.Properties 698 smithyhttp.SetSigV4SigningName(&sp, "sts") 699 smithyhttp.SetSigV4ASigningName(&sp, "sts") 700 701 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 702 return sp 703 }(), 704 }, 705 }) 706 return out 707 }(), 708 }, nil 709 } 710 if _Region == "us-east-1" { 711 uriString := "https://sts.amazonaws.com" 712 713 uri, err := url.Parse(uriString) 714 if err != nil { 715 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 716 } 717 718 return smithyendpoints.Endpoint{ 719 URI: *uri, 720 Headers: http.Header{}, 721 Properties: func() smithy.Properties { 722 var out smithy.Properties 723 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 724 { 725 SchemeID: "aws.auth#sigv4", 726 SignerProperties: func() smithy.Properties { 727 var sp smithy.Properties 728 smithyhttp.SetSigV4SigningName(&sp, "sts") 729 smithyhttp.SetSigV4ASigningName(&sp, "sts") 730 731 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 732 return sp 733 }(), 734 }, 735 }) 736 return out 737 }(), 738 }, nil 739 } 740 if _Region == "us-east-2" { 741 uriString := "https://sts.amazonaws.com" 742 743 uri, err := url.Parse(uriString) 744 if err != nil { 745 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 746 } 747 748 return smithyendpoints.Endpoint{ 749 URI: *uri, 750 Headers: http.Header{}, 751 Properties: func() smithy.Properties { 752 var out smithy.Properties 753 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 754 { 755 SchemeID: "aws.auth#sigv4", 756 SignerProperties: func() smithy.Properties { 757 var sp smithy.Properties 758 smithyhttp.SetSigV4SigningName(&sp, "sts") 759 smithyhttp.SetSigV4ASigningName(&sp, "sts") 760 761 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 762 return sp 763 }(), 764 }, 765 }) 766 return out 767 }(), 768 }, nil 769 } 770 if _Region == "us-west-1" { 771 uriString := "https://sts.amazonaws.com" 772 773 uri, err := url.Parse(uriString) 774 if err != nil { 775 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 776 } 777 778 return smithyendpoints.Endpoint{ 779 URI: *uri, 780 Headers: http.Header{}, 781 Properties: func() smithy.Properties { 782 var out smithy.Properties 783 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 784 { 785 SchemeID: "aws.auth#sigv4", 786 SignerProperties: func() smithy.Properties { 787 var sp smithy.Properties 788 smithyhttp.SetSigV4SigningName(&sp, "sts") 789 smithyhttp.SetSigV4ASigningName(&sp, "sts") 790 791 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 792 return sp 793 }(), 794 }, 795 }) 796 return out 797 }(), 798 }, nil 799 } 800 if _Region == "us-west-2" { 801 uriString := "https://sts.amazonaws.com" 802 803 uri, err := url.Parse(uriString) 804 if err != nil { 805 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 806 } 807 808 return smithyendpoints.Endpoint{ 809 URI: *uri, 810 Headers: http.Header{}, 811 Properties: func() smithy.Properties { 812 var out smithy.Properties 813 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 814 { 815 SchemeID: "aws.auth#sigv4", 816 SignerProperties: func() smithy.Properties { 817 var sp smithy.Properties 818 smithyhttp.SetSigV4SigningName(&sp, "sts") 819 smithyhttp.SetSigV4ASigningName(&sp, "sts") 820 821 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 822 return sp 823 }(), 824 }, 825 }) 826 return out 827 }(), 828 }, nil 829 } 830 uriString := func() string { 831 var out strings.Builder 832 out.WriteString("https://sts.") 833 out.WriteString(_Region) 834 out.WriteString(".") 835 out.WriteString(_PartitionResult.DnsSuffix) 836 return out.String() 837 }() 838 839 uri, err := url.Parse(uriString) 840 if err != nil { 841 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 842 } 843 844 return smithyendpoints.Endpoint{ 845 URI: *uri, 846 Headers: http.Header{}, 847 Properties: func() smithy.Properties { 848 var out smithy.Properties 849 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 850 { 851 SchemeID: "aws.auth#sigv4", 852 SignerProperties: func() smithy.Properties { 853 var sp smithy.Properties 854 smithyhttp.SetSigV4SigningName(&sp, "sts") 855 smithyhttp.SetSigV4ASigningName(&sp, "sts") 856 857 smithyhttp.SetSigV4SigningRegion(&sp, _Region) 858 return sp 859 }(), 860 }, 861 }) 862 return out 863 }(), 864 }, nil 865 } 866 } 867 } 868 } 869 } 870 } 871 if exprVal := params.Endpoint; exprVal != nil { 872 _Endpoint := *exprVal 873 _ = _Endpoint 874 if _UseFIPS == true { 875 return endpoint, fmt.Errorf("endpoint rule error, %s", "Invalid Configuration: FIPS and custom endpoint are not supported") 876 } 877 if _UseDualStack == true { 878 return endpoint, fmt.Errorf("endpoint rule error, %s", "Invalid Configuration: Dualstack and custom endpoint are not supported") 879 } 880 uriString := _Endpoint 881 882 uri, err := url.Parse(uriString) 883 if err != nil { 884 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 885 } 886 887 return smithyendpoints.Endpoint{ 888 URI: *uri, 889 Headers: http.Header{}, 890 }, nil 891 } 892 if exprVal := params.Region; exprVal != nil { 893 _Region := *exprVal 894 _ = _Region 895 if exprVal := awsrulesfn.GetPartition(_Region); exprVal != nil { 896 _PartitionResult := *exprVal 897 _ = _PartitionResult 898 if _UseFIPS == true { 899 if _UseDualStack == true { 900 if true == _PartitionResult.SupportsFIPS { 901 if true == _PartitionResult.SupportsDualStack { 902 uriString := func() string { 903 var out strings.Builder 904 out.WriteString("https://sts-fips.") 905 out.WriteString(_Region) 906 out.WriteString(".") 907 out.WriteString(_PartitionResult.DualStackDnsSuffix) 908 return out.String() 909 }() 910 911 uri, err := url.Parse(uriString) 912 if err != nil { 913 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 914 } 915 916 return smithyendpoints.Endpoint{ 917 URI: *uri, 918 Headers: http.Header{}, 919 }, nil 920 } 921 } 922 return endpoint, fmt.Errorf("endpoint rule error, %s", "FIPS and DualStack are enabled, but this partition does not support one or both") 923 } 924 } 925 if _UseFIPS == true { 926 if _PartitionResult.SupportsFIPS == true { 927 if _PartitionResult.Name == "aws-us-gov" { 928 uriString := func() string { 929 var out strings.Builder 930 out.WriteString("https://sts.") 931 out.WriteString(_Region) 932 out.WriteString(".amazonaws.com") 933 return out.String() 934 }() 935 936 uri, err := url.Parse(uriString) 937 if err != nil { 938 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 939 } 940 941 return smithyendpoints.Endpoint{ 942 URI: *uri, 943 Headers: http.Header{}, 944 }, nil 945 } 946 uriString := func() string { 947 var out strings.Builder 948 out.WriteString("https://sts-fips.") 949 out.WriteString(_Region) 950 out.WriteString(".") 951 out.WriteString(_PartitionResult.DnsSuffix) 952 return out.String() 953 }() 954 955 uri, err := url.Parse(uriString) 956 if err != nil { 957 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 958 } 959 960 return smithyendpoints.Endpoint{ 961 URI: *uri, 962 Headers: http.Header{}, 963 }, nil 964 } 965 return endpoint, fmt.Errorf("endpoint rule error, %s", "FIPS is enabled but this partition does not support FIPS") 966 } 967 if _UseDualStack == true { 968 if true == _PartitionResult.SupportsDualStack { 969 uriString := func() string { 970 var out strings.Builder 971 out.WriteString("https://sts.") 972 out.WriteString(_Region) 973 out.WriteString(".") 974 out.WriteString(_PartitionResult.DualStackDnsSuffix) 975 return out.String() 976 }() 977 978 uri, err := url.Parse(uriString) 979 if err != nil { 980 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 981 } 982 983 return smithyendpoints.Endpoint{ 984 URI: *uri, 985 Headers: http.Header{}, 986 }, nil 987 } 988 return endpoint, fmt.Errorf("endpoint rule error, %s", "DualStack is enabled but this partition does not support DualStack") 989 } 990 if _Region == "aws-global" { 991 uriString := "https://sts.amazonaws.com" 992 993 uri, err := url.Parse(uriString) 994 if err != nil { 995 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 996 } 997 998 return smithyendpoints.Endpoint{ 999 URI: *uri, 1000 Headers: http.Header{}, 1001 Properties: func() smithy.Properties { 1002 var out smithy.Properties 1003 smithyauth.SetAuthOptions(&out, []*smithyauth.Option{ 1004 { 1005 SchemeID: "aws.auth#sigv4", 1006 SignerProperties: func() smithy.Properties { 1007 var sp smithy.Properties 1008 smithyhttp.SetSigV4SigningName(&sp, "sts") 1009 smithyhttp.SetSigV4ASigningName(&sp, "sts") 1010 1011 smithyhttp.SetSigV4SigningRegion(&sp, "us-east-1") 1012 return sp 1013 }(), 1014 }, 1015 }) 1016 return out 1017 }(), 1018 }, nil 1019 } 1020 uriString := func() string { 1021 var out strings.Builder 1022 out.WriteString("https://sts.") 1023 out.WriteString(_Region) 1024 out.WriteString(".") 1025 out.WriteString(_PartitionResult.DnsSuffix) 1026 return out.String() 1027 }() 1028 1029 uri, err := url.Parse(uriString) 1030 if err != nil { 1031 return endpoint, fmt.Errorf("Failed to parse uri: %s", uriString) 1032 } 1033 1034 return smithyendpoints.Endpoint{ 1035 URI: *uri, 1036 Headers: http.Header{}, 1037 }, nil 1038 } 1039 return endpoint, fmt.Errorf("Endpoint resolution failed. Invalid operation or environment input.") 1040 } 1041 return endpoint, fmt.Errorf("endpoint rule error, %s", "Invalid Configuration: Missing Region") 1042 } 1043 1044 type endpointParamsBinder interface { 1045 bindEndpointParams(*EndpointParameters) 1046 } 1047 1048 func bindEndpointParams(input interface{}, options Options) *EndpointParameters { 1049 params := &EndpointParameters{} 1050 1051 params.Region = bindRegion(options.Region) 1052 params.UseDualStack = aws.Bool(options.EndpointOptions.UseDualStackEndpoint == aws.DualStackEndpointStateEnabled) 1053 params.UseFIPS = aws.Bool(options.EndpointOptions.UseFIPSEndpoint == aws.FIPSEndpointStateEnabled) 1054 params.Endpoint = options.BaseEndpoint 1055 1056 if b, ok := input.(endpointParamsBinder); ok { 1057 b.bindEndpointParams(params) 1058 } 1059 1060 return params 1061 } 1062 1063 type resolveEndpointV2Middleware struct { 1064 options Options 1065 } 1066 1067 func (*resolveEndpointV2Middleware) ID() string { 1068 return "ResolveEndpointV2" 1069 } 1070 1071 func (m *resolveEndpointV2Middleware) HandleFinalize(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) ( 1072 out middleware.FinalizeOutput, metadata middleware.Metadata, err error, 1073 ) { 1074 if awsmiddleware.GetRequiresLegacyEndpoints(ctx) { 1075 return next.HandleFinalize(ctx, in) 1076 } 1077 1078 req, ok := in.Request.(*smithyhttp.Request) 1079 if !ok { 1080 return out, metadata, fmt.Errorf("unknown transport type %T", in.Request) 1081 } 1082 1083 if m.options.EndpointResolverV2 == nil { 1084 return out, metadata, fmt.Errorf("expected endpoint resolver to not be nil") 1085 } 1086 1087 params := bindEndpointParams(getOperationInput(ctx), m.options) 1088 endpt, err := m.options.EndpointResolverV2.ResolveEndpoint(ctx, *params) 1089 if err != nil { 1090 return out, metadata, fmt.Errorf("failed to resolve service endpoint, %w", err) 1091 } 1092 1093 if endpt.URI.RawPath == "" && req.URL.RawPath != "" { 1094 endpt.URI.RawPath = endpt.URI.Path 1095 } 1096 req.URL.Scheme = endpt.URI.Scheme 1097 req.URL.Host = endpt.URI.Host 1098 req.URL.Path = smithyhttp.JoinPath(endpt.URI.Path, req.URL.Path) 1099 req.URL.RawPath = smithyhttp.JoinPath(endpt.URI.RawPath, req.URL.RawPath) 1100 for k := range endpt.Headers { 1101 req.Header.Set(k, endpt.Headers.Get(k)) 1102 } 1103 1104 rscheme := getResolvedAuthScheme(ctx) 1105 if rscheme == nil { 1106 return out, metadata, fmt.Errorf("no resolved auth scheme") 1107 } 1108 1109 opts, _ := smithyauth.GetAuthOptions(&endpt.Properties) 1110 for _, o := range opts { 1111 rscheme.SignerProperties.SetAll(&o.SignerProperties) 1112 } 1113 1114 return next.HandleFinalize(ctx, in) 1115 }