github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.0/pkg/botman/challenge_interception_rules.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 ChallengeInterceptionRules interface supports retrieving and updating the challenge interception rules for a 14 // configuration 15 ChallengeInterceptionRules interface { 16 // GetChallengeInterceptionRules https://techdocs.akamai.com/bot-manager/reference/get-challenge-interception-rules 17 GetChallengeInterceptionRules(ctx context.Context, params GetChallengeInterceptionRulesRequest) (map[string]interface{}, error) 18 // UpdateChallengeInterceptionRules https://techdocs.akamai.com/bot-manager/reference/put-challenge-interception-rules 19 UpdateChallengeInterceptionRules(ctx context.Context, params UpdateChallengeInterceptionRulesRequest) (map[string]interface{}, error) 20 } 21 22 // GetChallengeInterceptionRulesRequest is used to retrieve challenge interception rules 23 GetChallengeInterceptionRulesRequest struct { 24 ConfigID int64 25 Version int64 26 } 27 28 // UpdateChallengeInterceptionRulesRequest is used to modify challenge interception rules 29 UpdateChallengeInterceptionRulesRequest struct { 30 ConfigID int64 31 Version int64 32 JsonPayload json.RawMessage 33 } 34 ) 35 36 // Validate validates a GetChallengeInterceptionRulesRequest. 37 func (v GetChallengeInterceptionRulesRequest) Validate() error { 38 return validation.Errors{ 39 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 40 "Version": validation.Validate(v.Version, validation.Required), 41 }.Filter() 42 } 43 44 // Validate validates an UpdateChallengeInterceptionRulesRequest. 45 func (v UpdateChallengeInterceptionRulesRequest) Validate() error { 46 return 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 }.Filter() 51 } 52 53 func (b *botman) GetChallengeInterceptionRules(ctx context.Context, params GetChallengeInterceptionRulesRequest) (map[string]interface{}, error) { 54 logger := b.Log(ctx) 55 logger.Debug("GetChallengeInterceptionRules") 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-interception-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 GetChallengeInterceptionRules 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("GetChallengeInterceptionRules 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) UpdateChallengeInterceptionRules(ctx context.Context, params UpdateChallengeInterceptionRulesRequest) (map[string]interface{}, error) { 85 logger := b.Log(ctx) 86 logger.Debug("UpdateChallengeInterceptionRules") 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-interception-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 UpdateChallengeInterceptionRules 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("UpdateChallengeInterceptionRules 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 }