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  }