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 }