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