Skip to content
This repository was archived by the owner on Jun 4, 2024. It is now read-only.

Commit 2014c4f

Browse files
code reviews datasource
1 parent 143a4bc commit 2014c4f

File tree

11 files changed

+561
-1
lines changed

11 files changed

+561
-1
lines changed

SECURITY.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Security Policy
2+
3+
## Supported Versions
4+
5+
Use this section to tell people about which versions of your project are
6+
currently being supported with security updates.
7+
8+
| Version | Supported |
9+
| ------- | ------------------ |
10+
| 5.1.x | :white_check_mark: |
11+
| 5.0.x | :x: |
12+
| 4.0.x | :white_check_mark: |
13+
| < 4.0 | :x: |
14+
15+
## Reporting a Vulnerability
16+
17+
Please report any issues to [email protected] and ill respond asap.
18+
James Woolfenden
Lines changed: 369 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,369 @@
1+
package bridgecrew
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"errors"
7+
"log"
8+
"strconv"
9+
"time"
10+
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
12+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
13+
)
14+
15+
func dataSourceCodeReviews() *schema.Resource {
16+
return &schema.Resource{
17+
ReadContext: dataSourceCodeReviewsRead,
18+
Schema: map[string]*schema.Schema{
19+
"codereviews": {
20+
Type: schema.TypeList,
21+
Computed: true,
22+
Elem: &schema.Resource{
23+
Schema: map[string]*schema.Schema{
24+
"id": {
25+
Type: schema.TypeFloat,
26+
Computed: true,
27+
},
28+
"commit_id": {
29+
Type: schema.TypeString,
30+
Computed: true,
31+
},
32+
"run_id": {
33+
Type: schema.TypeFloat,
34+
Computed: true,
35+
},
36+
"git_user": {
37+
Type: schema.TypeString,
38+
Computed: true,
39+
},
40+
"scan_status": {
41+
Type: schema.TypeString,
42+
Computed: true,
43+
},
44+
"customer_name": {
45+
Type: schema.TypeString,
46+
Computed: true,
47+
},
48+
"lastscandate": {
49+
Type: schema.TypeString,
50+
Computed: true,
51+
},
52+
"creationdate": {
53+
Type: schema.TypeString,
54+
Computed: true,
55+
},
56+
"repo_id": {
57+
Type: schema.TypeString,
58+
Computed: true,
59+
},
60+
"status": {
61+
Type: schema.TypeString,
62+
Computed: true,
63+
},
64+
"repository": {
65+
Type: schema.TypeString,
66+
Computed: true,
67+
},
68+
"source_type": {
69+
Type: schema.TypeString,
70+
Computed: true,
71+
},
72+
"organization": {
73+
Type: schema.TypeString,
74+
Computed: true,
75+
},
76+
"results": {
77+
Type: schema.TypeSet,
78+
Computed: true,
79+
Elem: &schema.Resource{
80+
Schema: map[string]*schema.Schema{
81+
"critical": {
82+
Type: schema.TypeFloat,
83+
Computed: true,
84+
},
85+
"high": {
86+
Type: schema.TypeFloat,
87+
Computed: true,
88+
},
89+
"medium": {
90+
Type: schema.TypeFloat,
91+
Computed: true,
92+
},
93+
"low": {
94+
Type: schema.TypeFloat,
95+
Computed: true,
96+
},
97+
},
98+
},
99+
},
100+
"pr": {
101+
Type: schema.TypeSet,
102+
Computed: true,
103+
Elem: &schema.Resource{
104+
Schema: map[string]*schema.Schema{
105+
"title": {
106+
Type: schema.TypeString,
107+
Computed: true,
108+
},
109+
"pr_number": {
110+
Type: schema.TypeString,
111+
Computed: true,
112+
},
113+
"from_branch": {
114+
Type: schema.TypeString,
115+
Computed: true,
116+
},
117+
"into_branch": {
118+
Type: schema.TypeString,
119+
Computed: true,
120+
},
121+
"enforcement_rule": {
122+
Type: schema.TypeSet,
123+
Computed: true,
124+
Elem: &schema.Resource{
125+
Schema: map[string]*schema.Schema{
126+
"supplychain": {
127+
Type: schema.TypeSet,
128+
Computed: true,
129+
Elem: &schema.Resource{
130+
Schema: map[string]*schema.Schema{
131+
"softfailthreshold": {
132+
Type: schema.TypeString,
133+
Computed: true,
134+
},
135+
"hardfailthreshold": {
136+
Type: schema.TypeString,
137+
Computed: true,
138+
},
139+
"commentsbotthreshold": {
140+
Type: schema.TypeString,
141+
Computed: true,
142+
},
143+
},
144+
},
145+
},
146+
"secrets": {
147+
Type: schema.TypeSet,
148+
Computed: true,
149+
Elem: &schema.Resource{
150+
Schema: map[string]*schema.Schema{
151+
"softfailthreshold": {
152+
Type: schema.TypeString,
153+
Computed: true,
154+
},
155+
"hardfailthreshold": {
156+
Type: schema.TypeString,
157+
Computed: true,
158+
},
159+
"commentsbotthreshold": {
160+
Type: schema.TypeString,
161+
Computed: true,
162+
},
163+
},
164+
},
165+
},
166+
"iac": {
167+
Type: schema.TypeSet,
168+
Computed: true,
169+
Elem: &schema.Resource{
170+
Schema: map[string]*schema.Schema{
171+
"softfailthreshold": {
172+
Type: schema.TypeString,
173+
Computed: true,
174+
},
175+
"hardfailthreshold": {
176+
Type: schema.TypeString,
177+
Computed: true,
178+
},
179+
"commentsbotthreshold": {
180+
Type: schema.TypeString,
181+
Computed: true,
182+
},
183+
},
184+
},
185+
},
186+
"images": {
187+
Type: schema.TypeSet,
188+
Computed: true,
189+
Elem: &schema.Resource{
190+
Schema: map[string]*schema.Schema{
191+
"softfailthreshold": {
192+
Type: schema.TypeString,
193+
Computed: true,
194+
},
195+
"hardfailthreshold": {
196+
Type: schema.TypeString,
197+
Computed: true,
198+
},
199+
"commentsbotthreshold": {
200+
Type: schema.TypeString,
201+
Computed: true,
202+
},
203+
},
204+
},
205+
},
206+
"opensource": {
207+
Type: schema.TypeSet,
208+
Computed: true,
209+
Elem: &schema.Resource{
210+
Schema: map[string]*schema.Schema{
211+
"softfailthreshold": {
212+
Type: schema.TypeString,
213+
Computed: true,
214+
},
215+
"hardfailthreshold": {
216+
Type: schema.TypeString,
217+
Computed: true,
218+
},
219+
"commentsbotthreshold": {
220+
Type: schema.TypeString,
221+
Computed: true,
222+
},
223+
},
224+
},
225+
},
226+
},
227+
},
228+
},
229+
},
230+
},
231+
},
232+
},
233+
},
234+
},
235+
},
236+
}
237+
}
238+
239+
//goland:noinspection GoUnusedParameter,GoLinter,GoLinter
240+
func dataSourceCodeReviewsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
241+
request := "%s/development-pipeline/code-review/runs/data"
242+
243+
params := RequestParams{request, "v1", "GET"}
244+
245+
configure := m.(ProviderConfig)
246+
client, req, diagnostics, done := authClient(params, configure, nil)
247+
248+
if done {
249+
return diagnostics
250+
}
251+
252+
r, err := client.Do(req)
253+
254+
if err != nil {
255+
log.Fatal("Failed at client.Do")
256+
}
257+
258+
//goland:noinspection GoUnhandledErrorResult
259+
defer r.Body.Close()
260+
261+
Reviews := make(map[string]interface{})
262+
err = json.NewDecoder(r.Body).Decode(&Reviews)
263+
264+
if err != nil {
265+
if err.Error() == "EOF" {
266+
temp := "no data found"
267+
err = errors.New(temp)
268+
log.Print(temp)
269+
} else {
270+
log.Println("Failed to parse data")
271+
}
272+
return diag.FromErr(err)
273+
}
274+
275+
if err := flattenCodeReviews(Reviews, d); err != nil {
276+
return err
277+
}
278+
279+
// always run
280+
d.SetId(strconv.FormatInt(time.Now().Unix(), 10))
281+
return diagnostics
282+
}
283+
284+
func flattenCodeReviews(codereviews map[string]interface{}, d *schema.ResourceData) diag.Diagnostics {
285+
286+
if codereviews != nil {
287+
data := codereviews["data"].([]interface{})
288+
reviews := make([]interface{}, 0)
289+
for _, item := range data {
290+
review := item.(map[string]interface{})
291+
myreview := make(map[string]interface{})
292+
myreview["id"] = review["id"].(float64)
293+
myreview["commit_id"] = review["commitId"].(string)
294+
myreview["git_user"] = review["gitUser"].(string)
295+
myreview["scan_status"] = review["scanStatus"].(string)
296+
myreview["customer_name"] = review["customerName"].(string)
297+
myreview["lastscandate"] = review["lastScanDate"].(string)
298+
myreview["run_id"] = review["runId"].(float64)
299+
myreview["creationdate"] = review["creationDate"].(string)
300+
myreview["repo_id"] = review["repo_id"].(string)
301+
302+
if review["PR"] != nil {
303+
PR := review["PR"].(map[string]interface{})
304+
myprs := make([]interface{}, 0)
305+
mypr := make(map[string]interface{})
306+
mypr["from_branch"] = PR["fromBranch"].(string)
307+
mypr["into_branch"] = PR["intoBranch"].(string)
308+
mypr["pr_number"] = PR["prNumber"].(string)
309+
310+
enforcement := make([]interface{}, 0)
311+
mycat := make(map[string]interface{})
312+
313+
if PR["enforcementRule"] != nil {
314+
mycode := PR["enforcementRule"].(map[string]interface{})
315+
316+
supplies := setcategories(mycode, "SUPPLY_CHAIN")
317+
secrets := setcategories(mycode, "SECRETS")
318+
iac := setcategories(mycode, "IAC")
319+
images := setcategories(mycode, "IMAGES")
320+
opensource := setcategories(mycode, "OPEN_SOURCE")
321+
322+
mycat["supplychain"] = supplies
323+
mycat["secrets"] = secrets
324+
mycat["iac"] = iac
325+
mycat["images"] = images
326+
mycat["opensource"] = opensource
327+
328+
enforcement = append(enforcement, mycat)
329+
mypr["enforcement_rule"] = enforcement
330+
}
331+
332+
myprs = append(myprs, mypr)
333+
myreview["pr"] = myprs
334+
}
335+
336+
if review["results"] != nil {
337+
results := review["results"].(map[string]interface{})
338+
myresults := make([]interface{}, 0)
339+
myresult := make(map[string]interface{})
340+
if results["CRITICAL"] != nil {
341+
myresult["critical"] = results["CRITICAL"].(float64)
342+
}
343+
if results["HIGH"] != nil {
344+
myresult["high"] = results["HIGH"].(float64)
345+
}
346+
if results["MEDIUM"] != nil {
347+
myresult["medium"] = results["MEDIUM"].(float64)
348+
}
349+
if results["LOW"] != nil {
350+
myresult["low"] = results["LOW"].(float64)
351+
}
352+
myresults = append(myresults, myresult)
353+
354+
myreview["results"] = myresults
355+
}
356+
myreview["status"] = review["status"].(string)
357+
myreview["repository"] = review["repository"].(string)
358+
myreview["source_type"] = review["sourceType"].(string)
359+
myreview["organization"] = review["organization"].(string)
360+
reviews = append(reviews, myreview)
361+
}
362+
363+
if err := d.Set("codereviews", reviews); err != nil {
364+
return diag.FromErr(err)
365+
}
366+
}
367+
368+
return nil
369+
}

bridgecrew/data_source_enforcement_accounts.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func flattenEnforcementAccounts(Enforcement []map[string]interface{}, d *schema.
8989
var accounts []interface{}
9090
if Enforcement != nil {
9191
for _, account := range Enforcement {
92-
myaccount := make(map[string]interface{}, 0)
92+
myaccount := make(map[string]interface{})
9393
myaccount["accountid"] = account["accountId"]
9494
myaccount["accountname"] = account["accountName"]
9595
myaccount["source"] = account["source"]

0 commit comments

Comments
 (0)