github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/botman/bot_management_setting.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 BotManagementSetting interface supports retrieving and updating bot management settings 14 BotManagementSetting interface { 15 16 // GetBotManagementSetting todo: add link 17 GetBotManagementSetting(ctx context.Context, params GetBotManagementSettingRequest) (map[string]interface{}, error) 18 19 // UpdateBotManagementSetting todo: add link 20 UpdateBotManagementSetting(ctx context.Context, params UpdateBotManagementSettingRequest) (map[string]interface{}, error) 21 } 22 23 // GetBotManagementSettingRequest is used to retrieve the bot management settings 24 GetBotManagementSettingRequest struct { 25 ConfigID int64 26 Version int64 27 SecurityPolicyID string 28 } 29 30 // UpdateBotManagementSettingRequest is used to modify bot management settings 31 UpdateBotManagementSettingRequest struct { 32 ConfigID int64 33 Version int64 34 SecurityPolicyID string 35 JsonPayload json.RawMessage 36 } 37 ) 38 39 // Validate validates a GetBotManagementSettingRequest. 40 func (v GetBotManagementSettingRequest) Validate() error { 41 return validation.Errors{ 42 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 43 "Version": validation.Validate(v.Version, validation.Required), 44 "SecurityPolicyID": validation.Validate(v.SecurityPolicyID, validation.Required), 45 }.Filter() 46 } 47 48 // Validate validates an UpdateBotManagementSettingRequest. 49 func (v UpdateBotManagementSettingRequest) Validate() error { 50 return validation.Errors{ 51 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 52 "Version": validation.Validate(v.Version, validation.Required), 53 "SecurityPolicyID": validation.Validate(v.SecurityPolicyID, validation.Required), 54 "JsonPayload": validation.Validate(v.JsonPayload, validation.Required), 55 }.Filter() 56 } 57 58 func (b *botman) GetBotManagementSetting(ctx context.Context, params GetBotManagementSettingRequest) (map[string]interface{}, error) { 59 logger := b.Log(ctx) 60 logger.Debug("GetBotManagementSetting") 61 62 if err := params.Validate(); err != nil { 63 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 64 } 65 66 uri := fmt.Sprintf( 67 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/bot-management-settings", 68 params.ConfigID, 69 params.Version, 70 params.SecurityPolicyID) 71 72 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 73 if err != nil { 74 return nil, fmt.Errorf("failed to create GetBotManagementSetting request: %w", err) 75 } 76 77 var result map[string]interface{} 78 resp, err := b.Exec(req, &result) 79 if err != nil { 80 return nil, fmt.Errorf("GetBotManagementSetting request failed: %w", err) 81 } 82 83 if resp.StatusCode != http.StatusOK { 84 return nil, b.Error(resp) 85 } 86 87 return result, nil 88 } 89 90 func (b *botman) UpdateBotManagementSetting(ctx context.Context, params UpdateBotManagementSettingRequest) (map[string]interface{}, error) { 91 logger := b.Log(ctx) 92 logger.Debug("UpdateBotManagementSetting") 93 94 if err := params.Validate(); err != nil { 95 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 96 } 97 98 putURL := fmt.Sprintf( 99 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/bot-management-settings", 100 params.ConfigID, 101 params.Version, 102 params.SecurityPolicyID, 103 ) 104 105 req, err := http.NewRequestWithContext(ctx, http.MethodPut, putURL, nil) 106 if err != nil { 107 return nil, fmt.Errorf("failed to create UpdateBotManagementSetting request: %w", err) 108 } 109 110 var result map[string]interface{} 111 resp, err := b.Exec(req, &result, params.JsonPayload) 112 if err != nil { 113 return nil, fmt.Errorf("UpdateBotManagementSetting 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 }