github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/botman/client_side_security.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 ClientSideSecurity interface supports retrieving and updating client side security settings
    14  	ClientSideSecurity interface {
    15  
    16  		// GetClientSideSecurity https://techdocs.akamai.com/bot-manager/reference/get-client-side-security
    17  		GetClientSideSecurity(ctx context.Context, params GetClientSideSecurityRequest) (map[string]interface{}, error)
    18  
    19  		// UpdateClientSideSecurity https://techdocs.akamai.com/bot-manager/reference/put-client-side-security
    20  		UpdateClientSideSecurity(ctx context.Context, params UpdateClientSideSecurityRequest) (map[string]interface{}, error)
    21  	}
    22  
    23  	// GetClientSideSecurityRequest is used to retrieve client side security settings
    24  	GetClientSideSecurityRequest struct {
    25  		ConfigID int64 `json:"configId"`
    26  		Version  int64 `json:"version"`
    27  	}
    28  
    29  	// UpdateClientSideSecurityRequest is used to modify client side security settings
    30  	UpdateClientSideSecurityRequest struct {
    31  		ConfigID    int64           `json:"-"`
    32  		Version     int64           `json:"-"`
    33  		JsonPayload json.RawMessage `json:"-"`
    34  	}
    35  )
    36  
    37  // Validate validates a GetClientSideSecurityRequest.
    38  func (v GetClientSideSecurityRequest) Validate() error {
    39  	return validation.Errors{
    40  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    41  		"Version":  validation.Validate(v.Version, validation.Required),
    42  	}.Filter()
    43  }
    44  
    45  // Validate validates an UpdateClientSideSecurityRequest.
    46  func (v UpdateClientSideSecurityRequest) Validate() error {
    47  	return validation.Errors{
    48  		"ConfigID":    validation.Validate(v.ConfigID, validation.Required),
    49  		"Version":     validation.Validate(v.Version, validation.Required),
    50  		"JsonPayload": validation.Validate(v.JsonPayload, validation.Required),
    51  	}.Filter()
    52  }
    53  
    54  func (b *botman) GetClientSideSecurity(ctx context.Context, params GetClientSideSecurityRequest) (map[string]interface{}, error) {
    55  	logger := b.Log(ctx)
    56  	logger.Debug("GetClientSideSecurity")
    57  
    58  	if err := params.Validate(); err != nil {
    59  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
    60  	}
    61  
    62  	uri := fmt.Sprintf(
    63  		"/appsec/v1/configs/%d/versions/%d/advanced-settings/client-side-security",
    64  		params.ConfigID,
    65  		params.Version)
    66  
    67  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
    68  	if err != nil {
    69  		return nil, fmt.Errorf("failed to create GetClientSideSecurity request: %w", err)
    70  	}
    71  
    72  	var result map[string]interface{}
    73  	resp, err := b.Exec(req, &result)
    74  	if err != nil {
    75  		return nil, fmt.Errorf("GetClientSideSecurity request failed: %w", err)
    76  	}
    77  
    78  	if resp.StatusCode != http.StatusOK {
    79  		return nil, b.Error(resp)
    80  	}
    81  
    82  	return result, nil
    83  }
    84  
    85  func (b *botman) UpdateClientSideSecurity(ctx context.Context, params UpdateClientSideSecurityRequest) (map[string]interface{}, error) {
    86  	logger := b.Log(ctx)
    87  	logger.Debug("UpdateClientSideSecurity")
    88  
    89  	if err := params.Validate(); err != nil {
    90  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
    91  	}
    92  
    93  	putURL := fmt.Sprintf(
    94  		"/appsec/v1/configs/%d/versions/%d/advanced-settings/client-side-security",
    95  		params.ConfigID,
    96  		params.Version,
    97  	)
    98  
    99  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, putURL, nil)
   100  	if err != nil {
   101  		return nil, fmt.Errorf("failed to create UpdateClientSideSecurity request: %w", err)
   102  	}
   103  
   104  	var result map[string]interface{}
   105  	resp, err := b.Exec(req, &result, params.JsonPayload)
   106  	if err != nil {
   107  		return nil, fmt.Errorf("UpdateClientSideSecurity request failed: %w", err)
   108  	}
   109  
   110  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated && resp.StatusCode != http.StatusNoContent {
   111  		return nil, b.Error(resp)
   112  	}
   113  
   114  	return result, nil
   115  }