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