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  }