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  }