github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/appsec/api_hostname_coverage_overlapping.go (about) 1 package appsec 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 8 validation "github.com/go-ozzo/ozzo-validation/v4" 9 ) 10 11 type ( 12 // The ApiHostnameCoverageOverlapping interface supports listing the configuration versions that 13 // contain a hostname also included in the given configuration version. 14 ApiHostnameCoverageOverlapping interface { 15 // GetApiHostnameCoverageOverlapping lists the configuration versions that contain a hostname also included in the current configuration version. 16 // 17 // See: https://techdocs.akamai.com/application-security/reference/get-hostname-coverage-overlapping 18 GetApiHostnameCoverageOverlapping(ctx context.Context, params GetApiHostnameCoverageOverlappingRequest) (*GetApiHostnameCoverageOverlappingResponse, error) 19 } 20 21 // GetApiHostnameCoverageOverlappingRequest is used to retrieve the configuration versions that contain a hostname included in the current configuration version. 22 GetApiHostnameCoverageOverlappingRequest struct { 23 ConfigID int `json:"-"` 24 Version int `json:"-"` 25 Hostname string `json:"-"` 26 } 27 28 // GetApiHostnameCoverageOverlappingResponse is returned from a call to GetApiHostnameCoverageOverlapping. 29 GetApiHostnameCoverageOverlappingResponse struct { 30 OverLappingList []struct { 31 ConfigID int `json:"configId"` 32 ConfigName string `json:"configName"` 33 ConfigVersion int `json:"configVersion"` 34 ContractID string `json:"contractId"` 35 ContractName string `json:"contractName"` 36 VersionTags []string `json:"versionTags"` 37 } `json:"overLappingList"` 38 } 39 ) 40 41 // Validate validates a GetApiHostnameCoverageOverlappingRequest. 42 func (v GetApiHostnameCoverageOverlappingRequest) Validate() error { 43 return validation.Errors{ 44 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 45 "Version": validation.Validate(v.Version, validation.Required), 46 }.Filter() 47 } 48 49 func (p *appsec) GetApiHostnameCoverageOverlapping(ctx context.Context, params GetApiHostnameCoverageOverlappingRequest) (*GetApiHostnameCoverageOverlappingResponse, error) { 50 logger := p.Log(ctx) 51 logger.Debug("GetApiHostnameCoverageOverlapping") 52 53 if err := params.Validate(); err != nil { 54 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 55 } 56 57 uri := fmt.Sprintf( 58 "/appsec/v1/configs/%d/versions/%d/hostname-coverage/overlapping?hostname=%s", 59 params.ConfigID, 60 params.Version, 61 params.Hostname, 62 ) 63 64 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 65 if err != nil { 66 return nil, fmt.Errorf("failed to create GetApiHostnameCoverageOverlapping request: %w", err) 67 } 68 69 var result GetApiHostnameCoverageOverlappingResponse 70 resp, err := p.Exec(req, &result) 71 if err != nil { 72 return nil, fmt.Errorf("get API hostname coverage overlapping request failed: %w", err) 73 } 74 if resp.StatusCode != http.StatusOK { 75 return nil, p.Error(resp) 76 } 77 78 return &result, nil 79 }