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