github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.0/pkg/appsec/bypass_network_lists.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 BypassNetworkLists interface supports listing or modifying which network lists are
    13  	// used in the bypass network lists settings.
    14  	// Deprecated: this interface will be removed in a future release. Use the WAPBypassNetworkLists interface instead.
    15  	//
    16  	// https://developer.akamai.com/api/cloud_security/application_security/v1.html#bypassnetworklist
    17  	BypassNetworkLists interface {
    18  		// Deprecated: this method will be removed in a future release. Use the GetWAPBypassNetworkLists method of the WAPBypassNetworkLists interface instead.
    19  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#getbypassnetworklistsforawapconfigversion
    20  		GetBypassNetworkLists(ctx context.Context, params GetBypassNetworkListsRequest) (*GetBypassNetworkListsResponse, error)
    21  
    22  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#putbypassnetworklistsforawapconfigversion
    23  		// Deprecated: this method will be removed in a future release. Use the UpdateWAPBypassNetworkLists method of the WAPBypassNetworkLists interface instead.
    24  		UpdateBypassNetworkLists(ctx context.Context, params UpdateBypassNetworkListsRequest) (*UpdateBypassNetworkListsResponse, error)
    25  
    26  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#putbypassnetworklistsforawapconfigversion
    27  		// Deprecated: this method will be removed in a future release. Use the UpdateWAPBypassNetworkLists method of the WAPBypassNetworkLists interface instead.
    28  		RemoveBypassNetworkLists(ctx context.Context, params RemoveBypassNetworkListsRequest) (*RemoveBypassNetworkListsResponse, error)
    29  	}
    30  
    31  	// GetBypassNetworkListsRequest is used to list which network lists are used in the bypass network lists settings.
    32  	GetBypassNetworkListsRequest struct {
    33  		ConfigID int    `json:"-"`
    34  		Version  int    `json:"-"`
    35  		PolicyID string `json:"policyId"`
    36  	}
    37  
    38  	// GetBypassNetworkListsResponse is returned from a call to GetBypassNetworkLists.
    39  	GetBypassNetworkListsResponse struct {
    40  		NetworkLists []struct {
    41  			Name string `json:"name"`
    42  			ID   string `json:"id"`
    43  		} `json:"networkLists"`
    44  	}
    45  
    46  	// UpdateBypassNetworkListsRequest is used to modify which network lists are used in the bypass network lists settings.
    47  	UpdateBypassNetworkListsRequest struct {
    48  		ConfigID     int      `json:"-"`
    49  		Version      int      `json:"-"`
    50  		PolicyID     string   `json:"policyId"`
    51  		NetworkLists []string `json:"networkLists"`
    52  	}
    53  
    54  	// UpdateBypassNetworkListsResponse is returned from a call to UpdateBypassNetworkLists.
    55  	UpdateBypassNetworkListsResponse struct {
    56  		Block       string `json:"block"`
    57  		GeoControls struct {
    58  			BlockedIPNetworkLists struct {
    59  				NetworkList []string `json:"networkList"`
    60  			} `json:"blockedIPNetworkLists"`
    61  		} `json:"geoControls"`
    62  		IPControls struct {
    63  			AllowedIPNetworkLists struct {
    64  				NetworkList []string `json:"networkList"`
    65  			} `json:"allowedIPNetworkLists"`
    66  			BlockedIPNetworkLists struct {
    67  				NetworkList []string `json:"networkList"`
    68  			} `json:"blockedIPNetworkLists"`
    69  		} `json:"ipControls"`
    70  	}
    71  
    72  	// RemoveBypassNetworkListsRequest is used to modify which network lists are used in the bypass network lists settings.
    73  	// Deprecated: this struct will be removed in a future release.
    74  	RemoveBypassNetworkListsRequest struct {
    75  		ConfigID     int      `json:"-"`
    76  		Version      int      `json:"-"`
    77  		PolicyID     string   `json:"policyId"`
    78  		NetworkLists []string `json:"networkLists"`
    79  	}
    80  
    81  	// RemoveBypassNetworkListsResponse is returned from a call to RemoveBypassNetworkLists.
    82  	// Deprecated: this struct will be removed in a future release.
    83  	RemoveBypassNetworkListsResponse struct {
    84  		NetworkLists []string `json:"networkLists"`
    85  	}
    86  )
    87  
    88  // Validate validates a GetBypassNetworkListsRequest.
    89  func (v GetBypassNetworkListsRequest) Validate() error {
    90  	return validation.Errors{
    91  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    92  		"Version":  validation.Validate(v.Version, validation.Required),
    93  	}.Filter()
    94  }
    95  
    96  // Validate validates an UpdateBypassNetworkListsRequest.
    97  func (v UpdateBypassNetworkListsRequest) Validate() error {
    98  	return validation.Errors{
    99  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
   100  		"Version":  validation.Validate(v.Version, validation.Required),
   101  	}.Filter()
   102  }
   103  
   104  // Validate validates a RemoveBypassNetworkListsRequest.
   105  // Deprecated: this method will be removed in a future release.
   106  func (v RemoveBypassNetworkListsRequest) Validate() error {
   107  	return validation.Errors{
   108  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
   109  		"Version":  validation.Validate(v.Version, validation.Required),
   110  	}.Filter()
   111  }
   112  
   113  func (p *appsec) GetBypassNetworkLists(ctx context.Context, params GetBypassNetworkListsRequest) (*GetBypassNetworkListsResponse, error) {
   114  	logger := p.Log(ctx)
   115  	logger.Debugf("GetBypassNetworkLists")
   116  
   117  	if err := params.Validate(); err != nil {
   118  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   119  	}
   120  
   121  	var uri string
   122  	if params.PolicyID == "" {
   123  		uri = fmt.Sprintf(
   124  			"/appsec/v1/configs/%d/versions/%d/bypass-network-lists",
   125  			params.ConfigID,
   126  			params.Version,
   127  		)
   128  	} else {
   129  		uri = fmt.Sprintf(
   130  			"/appsec/v1/configs/%d/versions/%d/security-policies/%s/bypass-network-lists",
   131  			params.ConfigID,
   132  			params.Version,
   133  			params.PolicyID,
   134  		)
   135  	}
   136  
   137  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
   138  	if err != nil {
   139  		return nil, fmt.Errorf("failed to create GetBypassNetworkLists request: %w", err)
   140  	}
   141  
   142  	var result GetBypassNetworkListsResponse
   143  	resp, err := p.Exec(req, &result)
   144  	if err != nil {
   145  		return nil, fmt.Errorf("get bypass network lists request failed: %w", err)
   146  	}
   147  	if resp.StatusCode != http.StatusOK {
   148  		return nil, p.Error(resp)
   149  	}
   150  
   151  	return &result, nil
   152  }
   153  
   154  func (p *appsec) UpdateBypassNetworkLists(ctx context.Context, params UpdateBypassNetworkListsRequest) (*UpdateBypassNetworkListsResponse, error) {
   155  	logger := p.Log(ctx)
   156  	logger.Debugf("UpdateBypassNetworkLists")
   157  
   158  	if err := params.Validate(); err != nil {
   159  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   160  	}
   161  
   162  	var uri string
   163  	if params.PolicyID == "" {
   164  		uri = fmt.Sprintf(
   165  			"/appsec/v1/configs/%d/versions/%d/bypass-network-lists",
   166  			params.ConfigID,
   167  			params.Version,
   168  		)
   169  	} else {
   170  		uri = fmt.Sprintf(
   171  			"/appsec/v1/configs/%d/versions/%d/security-policies/%s/bypass-network-lists",
   172  			params.ConfigID,
   173  			params.Version,
   174  			params.PolicyID,
   175  		)
   176  	}
   177  
   178  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
   179  	if err != nil {
   180  		return nil, fmt.Errorf("failed to create UpdateBypassNetworkLists request: %w", err)
   181  	}
   182  
   183  	var result UpdateBypassNetworkListsResponse
   184  	resp, err := p.Exec(req, &result, params)
   185  	if err != nil {
   186  		return nil, fmt.Errorf("update bypass network lists request failed: %w", err)
   187  	}
   188  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
   189  		return nil, p.Error(resp)
   190  	}
   191  
   192  	return &result, nil
   193  }
   194  
   195  // Deprecated: this method will be removed in a future release.
   196  func (p *appsec) RemoveBypassNetworkLists(ctx context.Context, params RemoveBypassNetworkListsRequest) (*RemoveBypassNetworkListsResponse, error) {
   197  	logger := p.Log(ctx)
   198  	logger.Debugf("RemoveBypassNetworkLists")
   199  
   200  	if err := params.Validate(); err != nil {
   201  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   202  	}
   203  
   204  	var uri string
   205  	if params.PolicyID == "" {
   206  		uri = fmt.Sprintf(
   207  			"/appsec/v1/configs/%d/versions/%d/bypass-network-lists",
   208  			params.ConfigID,
   209  			params.Version,
   210  		)
   211  	} else {
   212  		uri = fmt.Sprintf(
   213  			"/appsec/v1/configs/%d/versions/%d/security-policies/%s/bypass-network-lists",
   214  			params.ConfigID,
   215  			params.Version,
   216  			params.PolicyID,
   217  		)
   218  	}
   219  
   220  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
   221  	if err != nil {
   222  		return nil, fmt.Errorf("failed to create RemoveBypassNetworkLists request: %w", err)
   223  	}
   224  
   225  	var result RemoveBypassNetworkListsResponse
   226  	resp, err := p.Exec(req, &result, params)
   227  	if err != nil {
   228  		return nil, fmt.Errorf("remove bypass network lists request failed: %w", err)
   229  	}
   230  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
   231  		return nil, p.Error(resp)
   232  	}
   233  
   234  	return &result, nil
   235  }