github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/appsec/advanced_settings_pii_learning.go (about)

     1  package appsec
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"net/http"
     7  
     8  	"github.com/akamai/AkamaiOPEN-edgegrid-golang/v8/pkg/edgegriderr"
     9  	validation "github.com/go-ozzo/ozzo-validation/v4"
    10  )
    11  
    12  type (
    13  	// The AdvancedSettingsPIILearning interface supports retrieving or modifying the PII Learning setting.
    14  	AdvancedSettingsPIILearning interface {
    15  		// GetAdvancedSettingsPIILearning retrieves the PII Learning setting.
    16  		//
    17  		// See: https://techdocs.akamai.com/application-security/reference/get-pii-learning
    18  		GetAdvancedSettingsPIILearning(ctx context.Context, params GetAdvancedSettingsPIILearningRequest) (*AdvancedSettingsPIILearningResponse, error)
    19  
    20  		// UpdateAdvancedSettingsPIILearning modifies the PII Learning setting.
    21  		//
    22  		// See: https://techdocs.akamai.com/application-security/reference/put-pii-learning
    23  		UpdateAdvancedSettingsPIILearning(ctx context.Context, params UpdateAdvancedSettingsPIILearningRequest) (*AdvancedSettingsPIILearningResponse, error)
    24  	}
    25  
    26  	// ConfigVersion is used to specify a security configuration and version.
    27  	ConfigVersion struct {
    28  		ConfigID int64
    29  		Version  int
    30  	}
    31  
    32  	// GetAdvancedSettingsPIILearningRequest is used to retrieve the PIILearning setting.
    33  	GetAdvancedSettingsPIILearningRequest struct {
    34  		ConfigVersion
    35  	}
    36  
    37  	// UpdateAdvancedSettingsPIILearningRequest is used to update the PIILearning setting.
    38  	UpdateAdvancedSettingsPIILearningRequest struct {
    39  		ConfigVersion
    40  		EnablePIILearning bool `json:"enablePiiLearning"`
    41  	}
    42  
    43  	// AdvancedSettingsPIILearningResponse returns the result of updating the PIILearning setting
    44  	AdvancedSettingsPIILearningResponse struct {
    45  		EnablePIILearning bool `json:"enablePiiLearning"`
    46  	}
    47  )
    48  
    49  // Validate validates GetAdvancedSettingssPIILearningRequest
    50  func (v GetAdvancedSettingsPIILearningRequest) Validate() error {
    51  	return edgegriderr.ParseValidationErrors(validation.Errors{
    52  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    53  		"Version":  validation.Validate(v.Version, validation.Required),
    54  	})
    55  }
    56  
    57  // Validate validates UpdateAdvancedSettingsPIILearningRequest
    58  func (v UpdateAdvancedSettingsPIILearningRequest) Validate() error {
    59  	return edgegriderr.ParseValidationErrors(validation.Errors{
    60  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    61  		"Version":  validation.Validate(v.Version, validation.Required),
    62  	})
    63  }
    64  
    65  func (p *appsec) GetAdvancedSettingsPIILearning(ctx context.Context, params GetAdvancedSettingsPIILearningRequest) (*AdvancedSettingsPIILearningResponse, error) {
    66  	logger := p.Log(ctx)
    67  	logger.Debug("GetAdvancedSettingsPIILearning")
    68  
    69  	if err := params.Validate(); err != nil {
    70  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
    71  	}
    72  
    73  	uri := fmt.Sprintf(
    74  		"/appsec/v1/configs/%d/versions/%d/advanced-settings/pii-learning",
    75  		params.ConfigID,
    76  		params.Version)
    77  
    78  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
    79  	if err != nil {
    80  		return nil, fmt.Errorf("%w: %s", ErrRequestCreation, err.Error())
    81  	}
    82  
    83  	var result AdvancedSettingsPIILearningResponse
    84  	resp, err := p.Exec(req, &result)
    85  	if err != nil {
    86  		return nil, fmt.Errorf("%w: %s", ErrAPICallFailure, err.Error())
    87  	}
    88  
    89  	if resp.StatusCode != http.StatusOK {
    90  		return nil, p.Error(resp)
    91  	}
    92  
    93  	return &result, nil
    94  }
    95  
    96  func (p *appsec) UpdateAdvancedSettingsPIILearning(ctx context.Context, params UpdateAdvancedSettingsPIILearningRequest) (*AdvancedSettingsPIILearningResponse, error) {
    97  	logger := p.Log(ctx)
    98  	logger.Debug("UpdateAdvancedSettingsPIILearning")
    99  
   100  	if err := params.Validate(); err != nil {
   101  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   102  	}
   103  
   104  	uri := fmt.Sprintf(
   105  		"/appsec/v1/configs/%d/versions/%d/advanced-settings/pii-learning",
   106  		params.ConfigID,
   107  		params.Version)
   108  
   109  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
   110  	if err != nil {
   111  		return nil, fmt.Errorf("%w: %s", ErrRequestCreation, err.Error())
   112  	}
   113  
   114  	var result AdvancedSettingsPIILearningResponse
   115  	resp, err := p.Exec(req, &result, struct {
   116  		EnablePIILearning bool `json:"enablePiiLearning"`
   117  	}{
   118  		EnablePIILearning: params.EnablePIILearning})
   119  	if err != nil {
   120  		return nil, fmt.Errorf("%w: %s", ErrAPICallFailure, err.Error())
   121  	}
   122  
   123  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
   124  		return nil, p.Error(resp)
   125  	}
   126  
   127  	return &result, nil
   128  }