// ClientConfig satisfies the client.ConfigProvider interface and is used to // configure the service client instances. Passing the Session to the service // client's constructor (New) will use this method to configure the client. // // Example: // sess := session.New() // s3.New(sess) func (s *Session) ClientConfig(serviceName string, cfgs ...*aws.Config) client.Config { s = s.Copy(cfgs...) endpoint, signingRegion := endpoints.NormalizeEndpoint( aws.StringValue(s.Config.Endpoint), serviceName, aws.StringValue(s.Config.Region), aws.BoolValue(s.Config.DisableSSL)) return client.Config{ Config: s.Config, Handlers: s.Handlers, Endpoint: endpoint, SigningRegion: signingRegion, } }
// Sign requests with signature version 4. // // Will sign the requests with the service config's Credentials object // Signing is skipped if the credentials is the credentials.AnonymousCredentials // object. func Sign(req *request.Request) { // If the request does not need to be signed ignore the signing of the // request if the AnonymousCredentials object is used. if req.Config.Credentials == credentials.AnonymousCredentials { return } region := req.ClientInfo.SigningRegion if region == "" { region = aws.StringValue(req.Config.Region) } name := req.ClientInfo.SigningName if name == "" { name = req.ClientInfo.ServiceName } s := signer{ Request: req.HTTPRequest, Time: req.Time, ExpireTime: req.ExpireTime, Query: req.HTTPRequest.URL.Query(), Body: req.Body, ServiceName: name, Region: region, Credentials: req.Config.Credentials, Debug: req.Config.LogLevel.Value(), Logger: req.Config.Logger, } req.Error = s.sign() }
func TestPaginationNilToken(t *testing.T) { client := route53.New(unit.Session) reqNum := 0 resps := []*route53.ListResourceRecordSetsOutput{ { ResourceRecordSets: []*route53.ResourceRecordSet{ {Name: aws.String("first.example.com.")}, }, IsTruncated: aws.Bool(true), NextRecordName: aws.String("second.example.com."), NextRecordType: aws.String("MX"), NextRecordIdentifier: aws.String("second"), MaxItems: aws.String("1"), }, { ResourceRecordSets: []*route53.ResourceRecordSet{ {Name: aws.String("second.example.com.")}, }, IsTruncated: aws.Bool(true), NextRecordName: aws.String("third.example.com."), NextRecordType: aws.String("MX"), MaxItems: aws.String("1"), }, { ResourceRecordSets: []*route53.ResourceRecordSet{ {Name: aws.String("third.example.com.")}, }, IsTruncated: aws.Bool(false), MaxItems: aws.String("1"), }, } client.Handlers.Send.Clear() // mock sending client.Handlers.Unmarshal.Clear() client.Handlers.UnmarshalMeta.Clear() client.Handlers.ValidateResponse.Clear() idents := []string{} client.Handlers.Build.PushBack(func(r *request.Request) { p := r.Params.(*route53.ListResourceRecordSetsInput) idents = append(idents, aws.StringValue(p.StartRecordIdentifier)) }) client.Handlers.Unmarshal.PushBack(func(r *request.Request) { r.Data = resps[reqNum] reqNum++ }) params := &route53.ListResourceRecordSetsInput{ HostedZoneId: aws.String("id-zone"), } results := []string{} err := client.ListResourceRecordSetsPages(params, func(p *route53.ListResourceRecordSetsOutput, last bool) bool { results = append(results, *p.ResourceRecordSets[0].Name) return true }) assert.NoError(t, err) assert.Equal(t, []string{"", "second", ""}, idents) assert.Equal(t, []string{"first.example.com.", "second.example.com.", "third.example.com."}, results) }
if r.Retryable == nil { r.Retryable = aws.Bool(r.ShouldRetry(r)) } if r.WillRetry() { r.RetryDelay = r.RetryRules(r) r.Config.SleepDelay(r.RetryDelay) // when the expired token exception occurs the credentials // need to be expired locally so that the next request to // get credentials will trigger a credentials refresh. if r.IsErrorExpired() { r.Config.Credentials.Expire() } r.RetryCount++ r.Error = nil } }} // ValidateEndpointHandler is a request handler to validate a request had the // appropriate Region and Endpoint set. Will set r.Error if the endpoint or // region is not valid. var ValidateEndpointHandler = request.NamedHandler{Name: "core.ValidateEndpointHandler", Fn: func(r *request.Request) { if r.ClientInfo.SigningRegion == "" && aws.StringValue(r.Config.Region) == "" { r.Error = aws.ErrMissingRegion } else if r.ClientInfo.Endpoint == "" { r.Error = aws.ErrMissingEndpoint } }}