This repository has been archived by the owner on Mar 11, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 18
/
cve.go
58 lines (52 loc) · 1.61 KB
/
cve.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package collector
import (
"context"
authapi "github.com/fabric8-services/fabric8-notification/auth/api"
"github.com/fabric8-services/fabric8-notification/wit"
"github.com/fabric8-services/fabric8-notification/wit/api"
"github.com/goadesign/goa/uuid"
)
func NewCVEResolver(authClient *authapi.Client, witClient *api.Client) ReceiverResolver {
return func(ctx context.Context, url string) ([]Receiver, map[string]interface{}, error) {
codebases, err := wit.GetCodebases(ctx, witClient, url)
if err != nil {
return nil, nil, err
}
spaceIDs := collectCodebasesSpaces(codebases)
if len(spaceIDs) == 0 {
return []Receiver{}, map[string]interface{}{}, nil
}
spaces, err := wit.GetSpaces(ctx, witClient, spaceIDs)
if err != nil {
return nil, nil, err
}
users := collectSpacesUsers(spaces)
if len(users) == 0 {
return []Receiver{}, map[string]interface{}{}, nil
}
resolved, err := resolveAllUsers(ctx, authClient, SliceUniq(users), []*authapi.UserData{}, false)
if err != nil {
return nil, nil, err
}
return resolved, map[string]interface{}{}, nil
}
}
func collectCodebasesSpaces(codebases *api.CodebaseList) []uuid.UUID {
var spaces []uuid.UUID
for _, cb := range codebases.Data {
if cb.Attributes.CveScan != nil && *cb.Attributes.CveScan {
space, err := uuid.FromString(*cb.Relationships.Space.Data.ID)
if err == nil {
spaces = append(spaces, space)
}
}
}
return spaces
}
func collectSpacesUsers(spaces []*api.SpaceSingle) []uuid.UUID {
var users []uuid.UUID
for _, space := range spaces {
users = append(users, *space.Data.Relationships.OwnedBy.Data.ID)
}
return users
}