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

     1  package botman
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"fmt"
     7  	"net/http"
     8  
     9  	validation "github.com/go-ozzo/ozzo-validation/v4"
    10  )
    11  
    12  type (
    13  	// The BotManagementSetting interface supports retrieving and updating bot management settings
    14  	BotManagementSetting interface {
    15  
    16  		// GetBotManagementSetting todo: add link
    17  		GetBotManagementSetting(ctx context.Context, params GetBotManagementSettingRequest) (map[string]interface{}, error)
    18  
    19  		// UpdateBotManagementSetting todo: add link
    20  		UpdateBotManagementSetting(ctx context.Context, params UpdateBotManagementSettingRequest) (map[string]interface{}, error)
    21  	}
    22  
    23  	// GetBotManagementSettingRequest is used to retrieve the bot management settings
    24  	GetBotManagementSettingRequest struct {
    25  		ConfigID         int64
    26  		Version          int64
    27  		SecurityPolicyID string
    28  	}
    29  
    30  	// UpdateBotManagementSettingRequest is used to modify bot management settings
    31  	UpdateBotManagementSettingRequest struct {
    32  		ConfigID         int64
    33  		Version          int64
    34  		SecurityPolicyID string
    35  		JsonPayload      json.RawMessage
    36  	}
    37  )
    38  
    39  // Validate validates a GetBotManagementSettingRequest.
    40  func (v GetBotManagementSettingRequest) Validate() error {
    41  	return validation.Errors{
    42  		"ConfigID":         validation.Validate(v.ConfigID, validation.Required),
    43  		"Version":          validation.Validate(v.Version, validation.Required),
    44  		"SecurityPolicyID": validation.Validate(v.SecurityPolicyID, validation.Required),
    45  	}.Filter()
    46  }
    47  
    48  // Validate validates an UpdateBotManagementSettingRequest.
    49  func (v UpdateBotManagementSettingRequest) Validate() error {
    50  	return validation.Errors{
    51  		"ConfigID":         validation.Validate(v.ConfigID, validation.Required),
    52  		"Version":          validation.Validate(v.Version, validation.Required),
    53  		"SecurityPolicyID": validation.Validate(v.SecurityPolicyID, validation.Required),
    54  		"JsonPayload":      validation.Validate(v.JsonPayload, validation.Required),
    55  	}.Filter()
    56  }
    57  
    58  func (b *botman) GetBotManagementSetting(ctx context.Context, params GetBotManagementSettingRequest) (map[string]interface{}, error) {
    59  	logger := b.Log(ctx)
    60  	logger.Debug("GetBotManagementSetting")
    61  
    62  	if err := params.Validate(); err != nil {
    63  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
    64  	}
    65  
    66  	uri := fmt.Sprintf(
    67  		"/appsec/v1/configs/%d/versions/%d/security-policies/%s/bot-management-settings",
    68  		params.ConfigID,
    69  		params.Version,
    70  		params.SecurityPolicyID)
    71  
    72  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
    73  	if err != nil {
    74  		return nil, fmt.Errorf("failed to create GetBotManagementSetting request: %w", err)
    75  	}
    76  
    77  	var result map[string]interface{}
    78  	resp, err := b.Exec(req, &result)
    79  	if err != nil {
    80  		return nil, fmt.Errorf("GetBotManagementSetting request failed: %w", err)
    81  	}
    82  
    83  	if resp.StatusCode != http.StatusOK {
    84  		return nil, b.Error(resp)
    85  	}
    86  
    87  	return result, nil
    88  }
    89  
    90  func (b *botman) UpdateBotManagementSetting(ctx context.Context, params UpdateBotManagementSettingRequest) (map[string]interface{}, error) {
    91  	logger := b.Log(ctx)
    92  	logger.Debug("UpdateBotManagementSetting")
    93  
    94  	if err := params.Validate(); err != nil {
    95  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
    96  	}
    97  
    98  	putURL := fmt.Sprintf(
    99  		"/appsec/v1/configs/%d/versions/%d/security-policies/%s/bot-management-settings",
   100  		params.ConfigID,
   101  		params.Version,
   102  		params.SecurityPolicyID,
   103  	)
   104  
   105  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, putURL, nil)
   106  	if err != nil {
   107  		return nil, fmt.Errorf("failed to create UpdateBotManagementSetting request: %w", err)
   108  	}
   109  
   110  	var result map[string]interface{}
   111  	resp, err := b.Exec(req, &result, params.JsonPayload)
   112  	if err != nil {
   113  		return nil, fmt.Errorf("UpdateBotManagementSetting request failed: %w", err)
   114  	}
   115  
   116  	if resp.StatusCode != http.StatusOK {
   117  		return nil, b.Error(resp)
   118  	}
   119  
   120  	return result, nil
   121  }