Skip to content

Commit 5047cdc

Browse files
authored
feat: Vulnerability exception resources (#79)
* feat: Add vulnerability exception list resource * feat: Add vulnerability exception resource * docs: Add vulnerability exception entries to the sidebar
1 parent 93ff1ce commit 5047cdc

11 files changed

+790
-0
lines changed

sysdig/internal/client/secure/client.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@ type SysdigSecureClient interface {
4242
GetMacroById(context.Context, int) (Macro, error)
4343
DeleteMacro(context.Context, int) error
4444
UpdateMacro(context.Context, Macro) (Macro, error)
45+
46+
CreateVulnerabilityExceptionList(context.Context, *VulnerabilityExceptionList) (*VulnerabilityExceptionList, error)
47+
GetVulnerabilityExceptionListByID(context.Context, string) (*VulnerabilityExceptionList, error)
48+
DeleteVulnerabilityExceptionList(context.Context, string) error
49+
UpdateVulnerabilityExceptionList(context.Context, *VulnerabilityExceptionList) (*VulnerabilityExceptionList, error)
50+
51+
CreateVulnerabilityException(context.Context, string, *VulnerabilityException) (*VulnerabilityException, error)
52+
GetVulnerabilityExceptionByID(context.Context, string, string) (*VulnerabilityException, error)
53+
DeleteVulnerabilityException(context.Context, string, string) error
54+
UpdateVulnerabilityException(context.Context, string, *VulnerabilityException) (*VulnerabilityException, error)
4555
}
4656

4757
func WithExtraHeaders(client SysdigSecureClient, extraHeaders map[string]string) SysdigSecureClient {

sysdig/internal/client/secure/models.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,3 +307,47 @@ func UsersListFromJSON(body []byte) []UsersList {
307307
type usersListWrapper struct {
308308
UsersList []UsersList `json:"users"`
309309
}
310+
311+
// -------- VulnerabilityExceptionList --------
312+
313+
type VulnerabilityExceptionList struct {
314+
ID string `json:"id,omitempty"`
315+
Version string `json:"version"`
316+
Name string `json:"name"`
317+
Comment string `json:"comment"`
318+
}
319+
320+
func (l *VulnerabilityExceptionList) ToJSON() io.Reader {
321+
payload, _ := json.Marshal(*l)
322+
return bytes.NewBuffer(payload)
323+
}
324+
325+
func VulnerabilityExceptionListFromJSON(body []byte) *VulnerabilityExceptionList {
326+
var result VulnerabilityExceptionList
327+
json.Unmarshal(body, &result)
328+
329+
return &result
330+
}
331+
332+
// -------- VulnerabilityException --------
333+
334+
type VulnerabilityException struct {
335+
ID string `json:"id"`
336+
Gate string `json:"gate"`
337+
TriggerID string `json:"trigger_id"`
338+
Notes string `json:"notes"`
339+
ExpirationDate *int `json:"expiration_date,omitempty"`
340+
Enabled bool `json:"enabled"`
341+
}
342+
343+
func (e *VulnerabilityException) ToJSON() io.Reader {
344+
payload, _ := json.Marshal(*e)
345+
return bytes.NewBuffer(payload)
346+
}
347+
348+
func VulnerabilityExceptionFromJSON(body []byte) *VulnerabilityException {
349+
var result VulnerabilityException
350+
json.Unmarshal(body, &result)
351+
352+
return &result
353+
}
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
package secure
2+
3+
import (
4+
"context"
5+
"errors"
6+
"fmt"
7+
"io/ioutil"
8+
"net/http"
9+
)
10+
11+
func (client *sysdigSecureClient) CreateVulnerabilityExceptionList(ctx context.Context, list *VulnerabilityExceptionList) (*VulnerabilityExceptionList, error) {
12+
response, err := client.doSysdigSecureRequest(ctx, http.MethodPost, client.getVulnerabilityExceptionListURL(), list.ToJSON())
13+
if err != nil {
14+
return nil, err
15+
}
16+
defer response.Body.Close()
17+
18+
body, _ := ioutil.ReadAll(response.Body)
19+
20+
if response.StatusCode != http.StatusOK && response.StatusCode != http.StatusCreated {
21+
return nil, errors.New(response.Status)
22+
}
23+
24+
return VulnerabilityExceptionListFromJSON(body), nil
25+
}
26+
27+
func (client *sysdigSecureClient) GetVulnerabilityExceptionListByID(ctx context.Context, id string) (*VulnerabilityExceptionList, error) {
28+
response, err := client.doSysdigSecureRequest(ctx, http.MethodGet, client.getVulnerabilityExceptionListByIDURL(id), nil)
29+
if err != nil {
30+
return nil, err
31+
}
32+
defer response.Body.Close()
33+
34+
body, _ := ioutil.ReadAll(response.Body)
35+
36+
if response.StatusCode != http.StatusOK && response.StatusCode != http.StatusCreated {
37+
return nil, errors.New(response.Status)
38+
}
39+
40+
return VulnerabilityExceptionListFromJSON(body), nil
41+
}
42+
43+
func (client *sysdigSecureClient) DeleteVulnerabilityExceptionList(ctx context.Context, id string) error {
44+
response, err := client.doSysdigSecureRequest(ctx, http.MethodDelete, client.getVulnerabilityExceptionListByIDURL(id), nil)
45+
if err != nil {
46+
return err
47+
}
48+
defer response.Body.Close()
49+
50+
if response.StatusCode != http.StatusNoContent {
51+
return errors.New(response.Status)
52+
}
53+
54+
return nil
55+
}
56+
57+
func (client *sysdigSecureClient) UpdateVulnerabilityExceptionList(ctx context.Context, list *VulnerabilityExceptionList) (*VulnerabilityExceptionList, error) {
58+
response, err := client.doSysdigSecureRequest(ctx, http.MethodPut, client.getVulnerabilityExceptionListByIDURL(list.ID), list.ToJSON())
59+
if err != nil {
60+
return nil, err
61+
}
62+
defer response.Body.Close()
63+
64+
body, _ := ioutil.ReadAll(response.Body)
65+
66+
if response.StatusCode != http.StatusOK && response.StatusCode != http.StatusCreated {
67+
return nil, errors.New(response.Status)
68+
}
69+
70+
return VulnerabilityExceptionListFromJSON(body), nil
71+
}
72+
73+
func (client *sysdigSecureClient) CreateVulnerabilityException(ctx context.Context, listID string, exception *VulnerabilityException) (*VulnerabilityException, error) {
74+
response, err := client.doSysdigSecureRequest(ctx, http.MethodPost, client.getVulnerabilityExceptionURL(listID), exception.ToJSON())
75+
if err != nil {
76+
return nil, err
77+
}
78+
defer response.Body.Close()
79+
80+
body, _ := ioutil.ReadAll(response.Body)
81+
82+
if response.StatusCode != http.StatusOK && response.StatusCode != http.StatusCreated {
83+
return nil, errors.New(response.Status)
84+
}
85+
86+
return VulnerabilityExceptionFromJSON(body), nil
87+
}
88+
89+
func (client *sysdigSecureClient) GetVulnerabilityExceptionByID(ctx context.Context, listID string, exceptionID string) (*VulnerabilityException, error) {
90+
response, err := client.doSysdigSecureRequest(ctx, http.MethodGet, client.getVulnerabilityExceptionByIDURL(listID, exceptionID), nil)
91+
if err != nil {
92+
return nil, err
93+
}
94+
defer response.Body.Close()
95+
96+
body, _ := ioutil.ReadAll(response.Body)
97+
98+
if response.StatusCode != http.StatusOK && response.StatusCode != http.StatusCreated {
99+
return nil, errors.New(response.Status)
100+
}
101+
102+
return VulnerabilityExceptionFromJSON(body), nil
103+
}
104+
105+
func (client *sysdigSecureClient) DeleteVulnerabilityException(ctx context.Context, listID string, exceptionID string) error {
106+
response, err := client.doSysdigSecureRequest(ctx, http.MethodDelete, client.getVulnerabilityExceptionByIDURL(listID, exceptionID), nil)
107+
if err != nil {
108+
return err
109+
}
110+
defer response.Body.Close()
111+
112+
if response.StatusCode != http.StatusNoContent {
113+
return errors.New(response.Status)
114+
}
115+
116+
return nil
117+
}
118+
119+
func (client *sysdigSecureClient) UpdateVulnerabilityException(ctx context.Context, listID string, exception *VulnerabilityException) (*VulnerabilityException, error) {
120+
response, err := client.doSysdigSecureRequest(ctx, http.MethodPut, client.getVulnerabilityExceptionByIDURL(listID, exception.ID), exception.ToJSON())
121+
if err != nil {
122+
return nil, err
123+
}
124+
defer response.Body.Close()
125+
126+
body, _ := ioutil.ReadAll(response.Body)
127+
128+
if response.StatusCode != http.StatusOK && response.StatusCode != http.StatusCreated {
129+
return nil, errors.New(response.Status)
130+
}
131+
132+
return VulnerabilityExceptionFromJSON(body), nil
133+
}
134+
135+
func (client *sysdigSecureClient) getVulnerabilityExceptionListURL() string {
136+
return fmt.Sprintf("%s/api/scanning/v1/vulnexceptions", client.URL)
137+
}
138+
139+
func (client sysdigSecureClient) getVulnerabilityExceptionListByIDURL(id string) string {
140+
return fmt.Sprintf("%s/api/scanning/v1/vulnexceptions/%s", client.URL, id)
141+
}
142+
143+
func (client *sysdigSecureClient) getVulnerabilityExceptionURL(listID string) string {
144+
return fmt.Sprintf("%s/api/scanning/v1/vulnexceptions/%s/vulnerabilities", client.URL, listID)
145+
}
146+
147+
func (client *sysdigSecureClient) getVulnerabilityExceptionByIDURL(listID, ID string) string {
148+
return fmt.Sprintf("%s/api/scanning/v1/vulnexceptions/%s/vulnerabilities/%s/", client.URL, listID, ID)
149+
}

sysdig/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ func Provider() *schema.Provider {
6868
"sysdig_secure_team": resourceSysdigSecureTeam(),
6969
"sysdig_secure_list": resourceSysdigSecureList(),
7070
"sysdig_secure_macro": resourceSysdigSecureMacro(),
71+
"sysdig_secure_vulnerability_exception": resourceSysdigSecureVulnerabilityException(),
72+
"sysdig_secure_vulnerability_exception_list": resourceSysdigSecureVulnerabilityExceptionList(),
7173

7274
"sysdig_monitor_alert_downtime": resourceSysdigMonitorAlertDowntime(),
7375
"sysdig_monitor_alert_metric": resourceSysdigMonitorAlertMetric(),

0 commit comments

Comments
 (0)