github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/botman/recategorized_akamai_defined_bot.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 RecategorizedAkamaiDefinedBot interface supports creating, retrieving, modifying and removing recategorized akamai defined bot for a configuration. 13 RecategorizedAkamaiDefinedBot interface { 14 // GetRecategorizedAkamaiDefinedBotList https://techdocs.akamai.com/bot-manager/reference/get-recategorized-akamai-defined-bots 15 GetRecategorizedAkamaiDefinedBotList(ctx context.Context, params GetRecategorizedAkamaiDefinedBotListRequest) (*GetRecategorizedAkamaiDefinedBotListResponse, error) 16 17 // GetRecategorizedAkamaiDefinedBot https://techdocs.akamai.com/bot-manager/reference/get-recategorized-akamai-defined-bot 18 GetRecategorizedAkamaiDefinedBot(ctx context.Context, params GetRecategorizedAkamaiDefinedBotRequest) (*RecategorizedAkamaiDefinedBotResponse, error) 19 20 // CreateRecategorizedAkamaiDefinedBot https://techdocs.akamai.com/bot-manager/reference/post-recategorized-akamai-defined-bot 21 CreateRecategorizedAkamaiDefinedBot(ctx context.Context, params CreateRecategorizedAkamaiDefinedBotRequest) (*RecategorizedAkamaiDefinedBotResponse, error) 22 23 // UpdateRecategorizedAkamaiDefinedBot https://techdocs.akamai.com/bot-manager/reference/put-recategorized-akamai-defined-bot 24 UpdateRecategorizedAkamaiDefinedBot(ctx context.Context, params UpdateRecategorizedAkamaiDefinedBotRequest) (*RecategorizedAkamaiDefinedBotResponse, error) 25 26 // RemoveRecategorizedAkamaiDefinedBot https://techdocs.akamai.com/bot-manager/reference/delete-recategorized-akamai-defined-bot 27 RemoveRecategorizedAkamaiDefinedBot(ctx context.Context, params RemoveRecategorizedAkamaiDefinedBotRequest) error 28 } 29 30 // GetRecategorizedAkamaiDefinedBotListRequest is used to retrieve the recategorized akamai defined bots for a configuration. 31 GetRecategorizedAkamaiDefinedBotListRequest struct { 32 ConfigID int64 33 Version int64 34 BotID string 35 } 36 37 // GetRecategorizedAkamaiDefinedBotRequest is used to retrieve a specific recategorized akamai defined bot 38 GetRecategorizedAkamaiDefinedBotRequest struct { 39 ConfigID int64 40 Version int64 41 BotID string 42 } 43 44 // RecategorizedAkamaiDefinedBotResponse is used to retrieve a specific recategorized akamai defined bot 45 RecategorizedAkamaiDefinedBotResponse struct { 46 BotID string `json:"botId"` 47 CategoryID string `json:"customBotCategoryId"` 48 } 49 50 // GetRecategorizedAkamaiDefinedBotListResponse is used to retrieve the recategorized akamai defined bots for a configuration. 51 GetRecategorizedAkamaiDefinedBotListResponse struct { 52 Bots []RecategorizedAkamaiDefinedBotResponse `json:"recategorizedBots"` 53 } 54 55 // CreateRecategorizedAkamaiDefinedBotRequest is used to create a new recategorized akamai defined bot for a specific configuration. 56 CreateRecategorizedAkamaiDefinedBotRequest struct { 57 ConfigID int64 `json:"-"` 58 Version int64 `json:"-"` 59 BotID string `json:"botId"` 60 CategoryID string `json:"customBotCategoryId"` 61 } 62 63 // UpdateRecategorizedAkamaiDefinedBotRequest is used to update details for a specific recategorized akamai defined bot 64 UpdateRecategorizedAkamaiDefinedBotRequest struct { 65 ConfigID int64 `json:"-"` 66 Version int64 `json:"-"` 67 BotID string `json:"botId"` 68 CategoryID string `json:"customBotCategoryId"` 69 } 70 71 // RemoveRecategorizedAkamaiDefinedBotRequest is used to remove an existing recategorized akamai defined bot 72 RemoveRecategorizedAkamaiDefinedBotRequest struct { 73 ConfigID int64 74 Version int64 75 BotID string 76 } 77 ) 78 79 // Validate validates a GetRecategorizedAkamaiDefinedBotRequest. 80 func (v GetRecategorizedAkamaiDefinedBotRequest) Validate() error { 81 return validation.Errors{ 82 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 83 "Version": validation.Validate(v.Version, validation.Required), 84 "BotID": validation.Validate(v.BotID, validation.Required), 85 }.Filter() 86 } 87 88 // Validate validates a GetRecategorizedAkamaiDefinedBotsRequest. 89 func (v GetRecategorizedAkamaiDefinedBotListRequest) Validate() error { 90 return validation.Errors{ 91 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 92 "Version": validation.Validate(v.Version, validation.Required), 93 }.Filter() 94 } 95 96 // Validate validates a CreateRecategorizedAkamaiDefinedBotRequest. 97 func (v CreateRecategorizedAkamaiDefinedBotRequest) Validate() error { 98 return validation.Errors{ 99 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 100 "Version": validation.Validate(v.Version, validation.Required), 101 "BotID": validation.Validate(v.BotID, validation.Required), 102 "CategoryID": validation.Validate(v.CategoryID, validation.Required), 103 }.Filter() 104 } 105 106 // Validate validates an UpdateRecategorizedAkamaiDefinedBotRequest. 107 func (v UpdateRecategorizedAkamaiDefinedBotRequest) Validate() error { 108 return validation.Errors{ 109 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 110 "Version": validation.Validate(v.Version, validation.Required), 111 "BotID": validation.Validate(v.BotID, validation.Required), 112 "CategoryID": validation.Validate(v.CategoryID, validation.Required), 113 }.Filter() 114 } 115 116 // Validate validates a RemoveRecategorizedAkamaiDefinedBotRequest. 117 func (v RemoveRecategorizedAkamaiDefinedBotRequest) Validate() error { 118 return validation.Errors{ 119 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 120 "Version": validation.Validate(v.Version, validation.Required), 121 "BotID": validation.Validate(v.BotID, validation.Required), 122 }.Filter() 123 } 124 125 func (b *botman) GetRecategorizedAkamaiDefinedBot(ctx context.Context, params GetRecategorizedAkamaiDefinedBotRequest) (*RecategorizedAkamaiDefinedBotResponse, error) { 126 logger := b.Log(ctx) 127 logger.Debug("GetRecategorizedAkamaiDefinedBot") 128 129 if err := params.Validate(); err != nil { 130 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 131 } 132 133 uri := fmt.Sprintf( 134 "/appsec/v1/configs/%d/versions/%d/recategorized-akamai-defined-bots/%s", 135 params.ConfigID, 136 params.Version, 137 params.BotID) 138 139 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 140 if err != nil { 141 return nil, fmt.Errorf("failed to create GetRecategorizedAkamaiDefinedBot request: %w", err) 142 } 143 144 var result RecategorizedAkamaiDefinedBotResponse 145 resp, err := b.Exec(req, &result) 146 if err != nil { 147 return nil, fmt.Errorf("GetRecategorizedAkamaiDefinedBot request failed: %w", err) 148 } 149 150 if resp.StatusCode != http.StatusOK { 151 return nil, b.Error(resp) 152 } 153 154 return &result, nil 155 } 156 157 func (b *botman) GetRecategorizedAkamaiDefinedBotList(ctx context.Context, params GetRecategorizedAkamaiDefinedBotListRequest) (*GetRecategorizedAkamaiDefinedBotListResponse, error) { 158 logger := b.Log(ctx) 159 logger.Debug("GetRecategorizedAkamaiDefinedBotList") 160 161 if err := params.Validate(); err != nil { 162 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 163 } 164 165 uri := fmt.Sprintf( 166 "/appsec/v1/configs/%d/versions/%d/recategorized-akamai-defined-bots", 167 params.ConfigID, 168 params.Version, 169 ) 170 171 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 172 if err != nil { 173 return nil, fmt.Errorf("failed to create GetlustomDenyList request: %w", err) 174 } 175 176 var result GetRecategorizedAkamaiDefinedBotListResponse 177 resp, err := b.Exec(req, &result) 178 if err != nil { 179 return nil, fmt.Errorf("GetRecategorizedAkamaiDefinedBotList request failed: %w", err) 180 } 181 182 if resp.StatusCode != http.StatusOK { 183 return nil, b.Error(resp) 184 } 185 186 var filteredResult GetRecategorizedAkamaiDefinedBotListResponse 187 if params.BotID != "" { 188 for _, val := range result.Bots { 189 if val.BotID == params.BotID { 190 filteredResult.Bots = append(filteredResult.Bots, val) 191 } 192 } 193 } else { 194 filteredResult = result 195 } 196 return &filteredResult, nil 197 } 198 199 func (b *botman) UpdateRecategorizedAkamaiDefinedBot(ctx context.Context, params UpdateRecategorizedAkamaiDefinedBotRequest) (*RecategorizedAkamaiDefinedBotResponse, error) { 200 logger := b.Log(ctx) 201 logger.Debug("UpdateRecategorizedAkamaiDefinedBot") 202 203 if err := params.Validate(); err != nil { 204 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 205 } 206 207 putURL := fmt.Sprintf( 208 "/appsec/v1/configs/%d/versions/%d/recategorized-akamai-defined-bots/%s", 209 params.ConfigID, 210 params.Version, 211 params.BotID, 212 ) 213 214 req, err := http.NewRequestWithContext(ctx, http.MethodPut, putURL, nil) 215 if err != nil { 216 return nil, fmt.Errorf("failed to create UpdateRecategorizedAkamaiDefinedBot request: %w", err) 217 } 218 219 var result RecategorizedAkamaiDefinedBotResponse 220 resp, err := b.Exec(req, &result, params) 221 if err != nil { 222 return nil, fmt.Errorf("UpdateRecategorizedAkamaiDefinedBot request failed: %w", err) 223 } 224 225 if resp.StatusCode != http.StatusOK { 226 return nil, b.Error(resp) 227 } 228 229 return &result, nil 230 } 231 232 func (b *botman) CreateRecategorizedAkamaiDefinedBot(ctx context.Context, params CreateRecategorizedAkamaiDefinedBotRequest) (*RecategorizedAkamaiDefinedBotResponse, error) { 233 logger := b.Log(ctx) 234 logger.Debug("CreateRecategorizedAkamaiDefinedBot") 235 236 if err := params.Validate(); err != nil { 237 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 238 } 239 240 uri := fmt.Sprintf( 241 "/appsec/v1/configs/%d/versions/%d/recategorized-akamai-defined-bots", 242 params.ConfigID, 243 params.Version, 244 ) 245 246 req, err := http.NewRequestWithContext(ctx, http.MethodPost, uri, nil) 247 if err != nil { 248 return nil, fmt.Errorf("failed to create CreateRecategorizedAkamaiDefinedBot request: %w", err) 249 } 250 251 var result RecategorizedAkamaiDefinedBotResponse 252 resp, err := b.Exec(req, &result, params) 253 if err != nil { 254 return nil, fmt.Errorf("CreateRecategorizedAkamaiDefinedBot request failed: %w", err) 255 } 256 257 if resp.StatusCode != http.StatusCreated { 258 return nil, b.Error(resp) 259 } 260 261 return &result, nil 262 } 263 264 func (b *botman) RemoveRecategorizedAkamaiDefinedBot(ctx context.Context, params RemoveRecategorizedAkamaiDefinedBotRequest) error { 265 logger := b.Log(ctx) 266 logger.Debug("RemoveRecategorizedAkamaiDefinedBot") 267 268 if err := params.Validate(); err != nil { 269 return fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 270 } 271 272 uri := fmt.Sprintf("/appsec/v1/configs/%d/versions/%d/recategorized-akamai-defined-bots/%s", 273 params.ConfigID, 274 params.Version, 275 params.BotID) 276 277 req, err := http.NewRequestWithContext(ctx, http.MethodDelete, uri, nil) 278 if err != nil { 279 return fmt.Errorf("failed to create RemoveRecategorizedAkamaiDefinedBot request: %w", err) 280 } 281 282 var result map[string]interface{} 283 resp, err := b.Exec(req, &result) 284 if err != nil { 285 return fmt.Errorf("RemoveRecategorizedAkamaiDefinedBot request failed: %w", err) 286 } 287 288 if resp.StatusCode != http.StatusNoContent { 289 return b.Error(resp) 290 } 291 292 return nil 293 }