github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.0/pkg/appsec/eval_host.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 EvalHost interface supports retrieving and modifying list of evaluation hostnames for a configuration.
    13  	// Deprecated: this interface will be removed in a future release. Use the WAPSelectedHostnames interface instead.
    14  	//
    15  	// https://developer.akamai.com/api/cloud_security/application_security/v1.html#evalhostname
    16  	EvalHost interface {
    17  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#getevaluationhostnames
    18  		// Deprecated: this method will be removed in a future release. Use the GetWAPSelectedHostnames method of the WAPSelectedHostnames interface instead.
    19  		GetEvalHosts(ctx context.Context, params GetEvalHostsRequest) (*GetEvalHostsResponse, error)
    20  
    21  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#getevaluationhostnames
    22  		// Deprecated: this method will be removed in a future release. Use the GetWAPSelectedHostnames method of the WAPSelectedHostnames interface instead.
    23  		GetEvalHost(ctx context.Context, params GetEvalHostRequest) (*GetEvalHostResponse, error)
    24  
    25  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#putevaluationhostnames
    26  		// Deprecated: this method will be removed in a future release. Use the UpdateWAPSelectedHostnames method of the WAPSelectedHostnames interface instead.
    27  		UpdateEvalHost(ctx context.Context, params UpdateEvalHostRequest) (*UpdateEvalHostResponse, error)
    28  
    29  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#putevaluationhostnames
    30  		// Deprecated: this method will be removed in a future release. Use the WAPSelectedHostnames method of the WAPSelectedHostnames interface instead.
    31  		RemoveEvalHost(ctx context.Context, params RemoveEvalHostRequest) (*RemoveEvalHostResponse, error)
    32  	}
    33  
    34  	// GetEvalHostRequest is used to retrieve the evaluation hostnames for a configuration.
    35  	// Deprecated: this struct will be removed in a future release.
    36  	GetEvalHostRequest struct {
    37  		ConfigID int `json:"-"`
    38  		Version  int `json:"-"`
    39  	}
    40  
    41  	// GetEvalHostResponse is returned from a call to GetEvalHost.
    42  	// Deprecated: this struct will be removed in a future release.
    43  	GetEvalHostResponse struct {
    44  		Hostnames []string `json:"hostnames"`
    45  	}
    46  
    47  	// GetEvalHostsRequest is used to retrieve the evaluation hostnames for a configuration.
    48  	GetEvalHostsRequest struct {
    49  		ConfigID int `json:"-"`
    50  		Version  int `json:"-"`
    51  	}
    52  
    53  	// GetEvalHostsResponse is returned from a call to GetEvalHosts.
    54  	GetEvalHostsResponse struct {
    55  		Hostnames []string `json:"hostnames"`
    56  	}
    57  
    58  	// UpdateEvalHostRequest is used to modify the evaluation hostnames for a configuration.
    59  	UpdateEvalHostRequest struct {
    60  		ConfigID  int      `json:"-"`
    61  		Version   int      `json:"-"`
    62  		Hostnames []string `json:"hostnames"`
    63  	}
    64  
    65  	// UpdateEvalHostResponse is returned from a call to UpdateEvalHost.
    66  	UpdateEvalHostResponse struct {
    67  		HostnameList []struct {
    68  			Hostname string `json:"hostname"`
    69  		} `json:"hostnameList"`
    70  	}
    71  
    72  	// RemoveEvalHostRequest is used to remove the evaluation hostnames for a configuration.
    73  	RemoveEvalHostRequest struct {
    74  		ConfigID  int      `json:"-"`
    75  		Version   int      `json:"-"`
    76  		Hostnames []string `json:"hostnames"`
    77  	}
    78  
    79  	// RemoveEvalHostResponse is returned from a call to RemoveEvalHost.
    80  	RemoveEvalHostResponse struct {
    81  		Hostnames []string `json:"hostnames"`
    82  	}
    83  )
    84  
    85  // Validate validates a GetEvalHostRequest.
    86  // Deprecated: this method will be removed in a future release.
    87  func (v GetEvalHostRequest) Validate() error {
    88  	return validation.Errors{
    89  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    90  		"Version":  validation.Validate(v.Version, validation.Required),
    91  	}.Filter()
    92  }
    93  
    94  // Validate validates a GetEvalHostsRequest.
    95  func (v GetEvalHostsRequest) Validate() error {
    96  	return validation.Errors{
    97  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    98  		"Version":  validation.Validate(v.Version, validation.Required),
    99  	}.Filter()
   100  }
   101  
   102  // Validate validates an UpdateEvalHostRequest.
   103  func (v UpdateEvalHostRequest) Validate() error {
   104  	return validation.Errors{
   105  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
   106  		"Version":  validation.Validate(v.Version, validation.Required),
   107  	}.Filter()
   108  }
   109  
   110  // Validate validates a RemoveEvalHostRequest.
   111  func (v RemoveEvalHostRequest) Validate() error {
   112  	return validation.Errors{
   113  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
   114  		"Version":  validation.Validate(v.Version, validation.Required),
   115  	}.Filter()
   116  }
   117  
   118  // Deprecated: this method will be removed in a future release.
   119  func (p *appsec) GetEvalHost(ctx context.Context, params GetEvalHostRequest) (*GetEvalHostResponse, error) {
   120  	logger := p.Log(ctx)
   121  	logger.Debug("GetEvalHost")
   122  
   123  	if err := params.Validate(); err != nil {
   124  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   125  	}
   126  
   127  	uri := fmt.Sprintf(
   128  		"/appsec/v1/configs/%d/versions/%d/selected-hostnames/eval-hostnames",
   129  		params.ConfigID,
   130  		params.Version)
   131  
   132  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
   133  	if err != nil {
   134  		return nil, fmt.Errorf("failed to create GetEvalHost request: %w", err)
   135  	}
   136  
   137  	var result GetEvalHostResponse
   138  	resp, err := p.Exec(req, &result)
   139  	if err != nil {
   140  		return nil, fmt.Errorf("get eval host request failed: %w", err)
   141  	}
   142  	if resp.StatusCode != http.StatusOK {
   143  		return nil, p.Error(resp)
   144  	}
   145  
   146  	return &result, nil
   147  }
   148  
   149  func (p *appsec) GetEvalHosts(ctx context.Context, params GetEvalHostsRequest) (*GetEvalHostsResponse, error) {
   150  	logger := p.Log(ctx)
   151  	logger.Debug("GetEvalHosts")
   152  
   153  	if err := params.Validate(); err != nil {
   154  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   155  	}
   156  
   157  	uri := fmt.Sprintf(
   158  		"/appsec/v1/configs/%d/versions/%d/selected-hostnames/eval-hostnames",
   159  		params.ConfigID,
   160  		params.Version)
   161  
   162  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
   163  	if err != nil {
   164  		return nil, fmt.Errorf("failed to create GetEvalHosts request: %w", err)
   165  	}
   166  
   167  	var result GetEvalHostsResponse
   168  	resp, err := p.Exec(req, &result)
   169  	if err != nil {
   170  		return nil, fmt.Errorf("get eval hosts request failed: %w", err)
   171  	}
   172  	if resp.StatusCode != http.StatusOK {
   173  		return nil, p.Error(resp)
   174  	}
   175  
   176  	return &result, nil
   177  }
   178  
   179  func (p *appsec) UpdateEvalHost(ctx context.Context, params UpdateEvalHostRequest) (*UpdateEvalHostResponse, error) {
   180  	logger := p.Log(ctx)
   181  	logger.Debug("UpdateEvalHost")
   182  
   183  	if err := params.Validate(); err != nil {
   184  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   185  	}
   186  
   187  	uri := fmt.Sprintf(
   188  		"/appsec/v1/configs/%d/versions/%d/selected-hostnames/eval-hostnames",
   189  		params.ConfigID,
   190  		params.Version)
   191  
   192  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
   193  	if err != nil {
   194  		return nil, fmt.Errorf("failed to create UpdateEvalHost request: %w", err)
   195  	}
   196  
   197  	var result UpdateEvalHostResponse
   198  	resp, err := p.Exec(req, &result, params)
   199  	if err != nil {
   200  		return nil, fmt.Errorf("update eval host request failed: %w", err)
   201  	}
   202  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
   203  		return nil, p.Error(resp)
   204  	}
   205  
   206  	return &result, nil
   207  }
   208  
   209  func (p *appsec) RemoveEvalHost(ctx context.Context, params RemoveEvalHostRequest) (*RemoveEvalHostResponse, error) {
   210  	logger := p.Log(ctx)
   211  	logger.Debug("RemoveEvalHost")
   212  
   213  	if err := params.Validate(); err != nil {
   214  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   215  	}
   216  
   217  	uri := fmt.Sprintf(
   218  		"/appsec/v1/configs/%d/versions/%d/selected-hostnames/eval-hostnames",
   219  		params.ConfigID,
   220  		params.Version)
   221  
   222  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
   223  	if err != nil {
   224  		return nil, fmt.Errorf("failed to create RemoveEvalHost request: %w", err)
   225  	}
   226  
   227  	var result RemoveEvalHostResponse
   228  	resp, err := p.Exec(req, &result, params)
   229  	if err != nil {
   230  		return nil, fmt.Errorf("remove eval host request failed: %w", err)
   231  	}
   232  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
   233  		return nil, p.Error(resp)
   234  	}
   235  
   236  	return &result, nil
   237  }