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