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