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