github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.0/pkg/appsec/siem_settings.go (about)

     1  package appsec
     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 SiemSettings interface supports retrieving, modifying and removing the SIEM settings for a configuration.
    13  	//
    14  	// https://developer.akamai.com/api/cloud_security/application_security/v1.html#siem
    15  	SiemSettings interface {
    16  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#getsiemsettings
    17  		GetSiemSettings(ctx context.Context, params GetSiemSettingsRequest) (*GetSiemSettingsResponse, error)
    18  
    19  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#putsiemsettings
    20  		UpdateSiemSettings(ctx context.Context, params UpdateSiemSettingsRequest) (*UpdateSiemSettingsResponse, error)
    21  
    22  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#putsiemsettings
    23  		// Deprecated: this method will be removed in a future release.
    24  		RemoveSiemSettings(ctx context.Context, params RemoveSiemSettingsRequest) (*RemoveSiemSettingsResponse, error)
    25  	}
    26  
    27  	// GetSiemSettingsRequest is used to retrieve the SIEM settings for a configuration.
    28  	GetSiemSettingsRequest struct {
    29  		ConfigID int `json:"-"`
    30  		Version  int `json:"-"`
    31  	}
    32  
    33  	// GetSiemSettingsResponse is returned from a call to GetSiemSettings.
    34  	GetSiemSettingsResponse struct {
    35  		EnableForAllPolicies    bool     `json:"enableForAllPolicies"`
    36  		EnableSiem              bool     `json:"enableSiem"`
    37  		EnabledBotmanSiemEvents bool     `json:"enabledBotmanSiemEvents"`
    38  		SiemDefinitionID        int      `json:"siemDefinitionId"`
    39  		FirewallPolicyIds       []string `json:"firewallPolicyIds"`
    40  	}
    41  
    42  	// GetSiemSettingRequest is used to retrieve the SIEM settings for a configuration.
    43  	GetSiemSettingRequest struct {
    44  		ConfigID int `json:"-"`
    45  		Version  int `json:"-"`
    46  	}
    47  
    48  	// GetSiemSettingResponse is returned from a call to GetSiemSettings.
    49  	GetSiemSettingResponse struct {
    50  		EnableForAllPolicies    bool     `json:"enableForAllPolicies"`
    51  		EnableSiem              bool     `json:"enableSiem"`
    52  		EnabledBotmanSiemEvents bool     `json:"enabledBotmanSiemEvents"`
    53  		SiemDefinitionID        int      `json:"siemDefinitionId"`
    54  		FirewallPolicyIds       []string `json:"firewallPolicyIds"`
    55  	}
    56  
    57  	// UpdateSiemSettingsRequest is used to modify the SIEM settings for a configuration.
    58  	UpdateSiemSettingsRequest struct {
    59  		ConfigID                int      `json:"-"`
    60  		Version                 int      `json:"-"`
    61  		EnableForAllPolicies    bool     `json:"enableForAllPolicies"`
    62  		EnableSiem              bool     `json:"enableSiem"`
    63  		EnabledBotmanSiemEvents bool     `json:"enabledBotmanSiemEvents"`
    64  		SiemDefinitionID        int      `json:"siemDefinitionId"`
    65  		FirewallPolicyIds       []string `json:"firewallPolicyIds"`
    66  	}
    67  
    68  	// UpdateSiemSettingsResponse is returned from a call to UpdateSiemSettings.
    69  	UpdateSiemSettingsResponse struct {
    70  		EnableForAllPolicies    bool     `json:"enableForAllPolicies"`
    71  		EnableSiem              bool     `json:"enableSiem"`
    72  		EnabledBotmanSiemEvents bool     `json:"enabledBotmanSiemEvents"`
    73  		SiemDefinitionID        int      `json:"siemDefinitionId"`
    74  		FirewallPolicyIds       []string `json:"firewallPolicyIds"`
    75  	}
    76  
    77  	// RemoveSiemSettingsRequest is used to remove the SIEM settings for a configuration.
    78  	// Deprecated: this struct will be removed in a future release.
    79  	RemoveSiemSettingsRequest struct {
    80  		ConfigID                int      `json:"-"`
    81  		Version                 int      `json:"-"`
    82  		EnableForAllPolicies    bool     `json:"-"`
    83  		EnableSiem              bool     `json:"enableSiem"`
    84  		EnabledBotmanSiemEvents bool     `json:"-"`
    85  		SiemDefinitionID        int      `json:"-"`
    86  		FirewallPolicyIds       []string `json:"-"`
    87  	}
    88  
    89  	// RemoveSiemSettingsResponse is returned from a call to RemoveSiemSettings.
    90  	// Deprecated: this struct will be removed in a future release.
    91  	RemoveSiemSettingsResponse struct {
    92  		EnableForAllPolicies    bool     `json:"enableForAllPolicies"`
    93  		EnableSiem              bool     `json:"enableSiem"`
    94  		EnabledBotmanSiemEvents bool     `json:"enabledBotmanSiemEvents"`
    95  		SiemDefinitionID        int      `json:"siemDefinitionId"`
    96  		FirewallPolicyIds       []string `json:"firewallPolicyIds"`
    97  	}
    98  )
    99  
   100  // Validate validates a GetSiemSettingsRequest.
   101  func (v GetSiemSettingsRequest) Validate() error {
   102  	return validation.Errors{
   103  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
   104  		"Version":  validation.Validate(v.Version, validation.Required),
   105  	}.Filter()
   106  }
   107  
   108  // Validate validates an UpdateSiemSettingsRequest.
   109  func (v UpdateSiemSettingsRequest) Validate() error {
   110  	return validation.Errors{
   111  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
   112  		"Version":  validation.Validate(v.Version, validation.Required),
   113  	}.Filter()
   114  }
   115  
   116  // Validate validates a RemoveSiemSettingsRequest.
   117  // Deprecated: this method will be removed in a future release.
   118  func (v RemoveSiemSettingsRequest) Validate() error {
   119  	return validation.Errors{
   120  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
   121  		"Version":  validation.Validate(v.Version, validation.Required),
   122  	}.Filter()
   123  }
   124  
   125  func (p *appsec) GetSiemSettings(ctx context.Context, params GetSiemSettingsRequest) (*GetSiemSettingsResponse, error) {
   126  	logger := p.Log(ctx)
   127  	logger.Debug("GetSiemSettings")
   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/siem",
   135  		params.ConfigID,
   136  		params.Version,
   137  	)
   138  
   139  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
   140  	if err != nil {
   141  		return nil, fmt.Errorf("failed to create GetSiemSettings request: %w", err)
   142  	}
   143  
   144  	var result GetSiemSettingsResponse
   145  	resp, err := p.Exec(req, &result)
   146  	if err != nil {
   147  		return nil, fmt.Errorf("get siem settings request failed: %w", err)
   148  	}
   149  	if resp.StatusCode != http.StatusOK {
   150  		return nil, p.Error(resp)
   151  	}
   152  
   153  	return &result, nil
   154  }
   155  
   156  func (p *appsec) UpdateSiemSettings(ctx context.Context, params UpdateSiemSettingsRequest) (*UpdateSiemSettingsResponse, error) {
   157  	logger := p.Log(ctx)
   158  	logger.Debug("UpdateSiemSettings")
   159  
   160  	if err := params.Validate(); err != nil {
   161  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   162  	}
   163  
   164  	uri := fmt.Sprintf(
   165  		"/appsec/v1/configs/%d/versions/%d/siem",
   166  		params.ConfigID,
   167  		params.Version,
   168  	)
   169  
   170  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
   171  	if err != nil {
   172  		return nil, fmt.Errorf("failed to create UpdateSiemSettings request: %w", err)
   173  	}
   174  
   175  	var result UpdateSiemSettingsResponse
   176  	resp, err := p.Exec(req, &result, params)
   177  	if err != nil {
   178  		return nil, fmt.Errorf("update siem settings request failed: %w", err)
   179  	}
   180  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
   181  		return nil, p.Error(resp)
   182  	}
   183  
   184  	return &result, nil
   185  }
   186  
   187  // Deprecated: this method will be removed in a future release.
   188  func (p *appsec) RemoveSiemSettings(ctx context.Context, params RemoveSiemSettingsRequest) (*RemoveSiemSettingsResponse, error) {
   189  	logger := p.Log(ctx)
   190  	logger.Debug("RemoveSiemSettings")
   191  
   192  	if err := params.Validate(); err != nil {
   193  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   194  	}
   195  
   196  	uri := fmt.Sprintf(
   197  		"/appsec/v1/configs/%d/versions/%d/siem",
   198  		params.ConfigID,
   199  		params.Version,
   200  	)
   201  
   202  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
   203  	if err != nil {
   204  		return nil, fmt.Errorf("failed to create RemoveSiemSettings request: %w", err)
   205  	}
   206  
   207  	var result RemoveSiemSettingsResponse
   208  	resp, err := p.Exec(req, &result, params)
   209  	if err != nil {
   210  		return nil, fmt.Errorf("remove siem settings request failed: %w", err)
   211  	}
   212  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
   213  		return nil, p.Error(resp)
   214  	}
   215  
   216  	return &result, nil
   217  }