...

Source file src/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/host.go

Documentation: github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn

     1  package awsrulesfn
     2  
     3  import (
     4  	"net"
     5  	"strings"
     6  
     7  	smithyhttp "github.com/aws/smithy-go/transport/http"
     8  )
     9  
    10  // IsVirtualHostableS3Bucket returns if the input is a DNS compatible bucket
    11  // name and can be used with Amazon S3 virtual hosted style addressing. Similar
    12  // to [rulesfn.IsValidHostLabel] with the added restriction that the length of label
    13  // must be [3:63] characters long, all lowercase, and not formatted as an IP
    14  // address.
    15  func IsVirtualHostableS3Bucket(input string, allowSubDomains bool) bool {
    16  	// input should not be formatted as an IP address
    17  	// NOTE: this will technically trip up on IPv6 hosts with zone IDs, but
    18  	// validation further down will catch that anyway (it's guaranteed to have
    19  	// unfriendly characters % and : if that's the case)
    20  	if net.ParseIP(input) != nil {
    21  		return false
    22  	}
    23  
    24  	var labels []string
    25  	if allowSubDomains {
    26  		labels = strings.Split(input, ".")
    27  	} else {
    28  		labels = []string{input}
    29  	}
    30  
    31  	for _, label := range labels {
    32  		// validate special length constraints
    33  		if l := len(label); l < 3 || l > 63 {
    34  			return false
    35  		}
    36  
    37  		// Validate no capital letters
    38  		for _, r := range label {
    39  			if r >= 'A' && r <= 'Z' {
    40  				return false
    41  			}
    42  		}
    43  
    44  		// Validate valid host label
    45  		if !smithyhttp.ValidHostLabel(label) {
    46  			return false
    47  		}
    48  	}
    49  
    50  	return true
    51  }
    52  

View as plain text