go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/_motor/discovery/gitlab/gitlab.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package gitlab 5 6 import ( 7 "context" 8 "errors" 9 10 "go.mondoo.com/cnquery/motor/asset" 11 "go.mondoo.com/cnquery/motor/discovery/common" 12 "go.mondoo.com/cnquery/motor/providers" 13 gitlab_transport "go.mondoo.com/cnquery/motor/providers/gitlab" 14 "go.mondoo.com/cnquery/motor/providers/resolver" 15 "go.mondoo.com/cnquery/motor/vault" 16 ) 17 18 const DiscoveryGroup = "group" 19 20 type Resolver struct{} 21 22 func (r *Resolver) Name() string { 23 return "Gitlab Resolver" 24 } 25 26 func (r *Resolver) AvailableDiscoveryTargets() []string { 27 return []string{common.DiscoveryAuto, common.DiscoveryAll, DiscoveryGroup} 28 } 29 30 func (r *Resolver) Resolve(ctx context.Context, root *asset.Asset, tc *providers.Config, credsResolver vault.Resolver, sfn common.QuerySecretFn, userIdDetectors ...providers.PlatformIdDetector) ([]*asset.Asset, error) { 31 // establish connection to GitLab 32 m, err := resolver.NewMotorConnection(ctx, tc, credsResolver) 33 if err != nil { 34 return nil, err 35 } 36 defer m.Close() 37 38 trans, ok := m.Provider.(*gitlab_transport.Provider) 39 if !ok { 40 return nil, errors.New("could not initialize gitlab transport") 41 } 42 43 identifier, err := trans.Identifier() 44 if err != nil { 45 return nil, err 46 } 47 48 pf, err := m.Platform() 49 if err != nil { 50 return nil, err 51 } 52 53 var assets []*asset.Asset 54 if tc.IncludesOneOfDiscoveryTarget(common.DiscoveryAuto, common.DiscoveryAll, DiscoveryGroup) { 55 name := root.Name 56 if name == "" { 57 grp, err := trans.Group() 58 if err != nil { 59 return nil, err 60 } 61 if grp != nil { 62 name = "GitLab Group " + grp.Name 63 } 64 } 65 66 assets = append(assets, &asset.Asset{ 67 PlatformIds: []string{identifier}, 68 Name: name, 69 Platform: pf, 70 Connections: []*providers.Config{tc}, // pass-in the current config 71 State: asset.State_STATE_ONLINE, 72 }) 73 } 74 75 return assets, nil 76 }