github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/cloud/aws/mq/adapt.go (about)

     1  package mq
     2  
     3  import (
     4  	api "github.com/aws/aws-sdk-go-v2/service/mq"
     5  	"github.com/aws/aws-sdk-go-v2/service/mq/types"
     6  	"github.com/khulnasoft-lab/defsec/internal/adapters/cloud/aws"
     7  	"github.com/khulnasoft-lab/defsec/pkg/concurrency"
     8  	"github.com/khulnasoft-lab/defsec/pkg/providers/aws/mq"
     9  	"github.com/khulnasoft-lab/defsec/pkg/state"
    10  	defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types"
    11  )
    12  
    13  type adapter struct {
    14  	*aws.RootAdapter
    15  	api *api.Client
    16  }
    17  
    18  func init() {
    19  	aws.RegisterServiceAdapter(&adapter{})
    20  }
    21  
    22  func (a *adapter) Provider() string {
    23  	return "aws"
    24  }
    25  
    26  func (a *adapter) Name() string {
    27  	return "mq"
    28  }
    29  
    30  func (a *adapter) Adapt(root *aws.RootAdapter, state *state.State) error {
    31  
    32  	a.RootAdapter = root
    33  	a.api = api.NewFromConfig(root.SessionConfig())
    34  	var err error
    35  
    36  	state.AWS.MQ.Brokers, err = a.getBrokers()
    37  	if err != nil {
    38  		return err
    39  	}
    40  
    41  	return nil
    42  }
    43  
    44  func (a *adapter) getBrokers() ([]mq.Broker, error) {
    45  
    46  	a.Tracker().SetServiceLabel("Discovering brokers...")
    47  
    48  	var apiBrokers []types.BrokerSummary
    49  	var input api.ListBrokersInput
    50  	for {
    51  		output, err := a.api.ListBrokers(a.Context(), &input)
    52  		if err != nil {
    53  			return nil, err
    54  		}
    55  		apiBrokers = append(apiBrokers, output.BrokerSummaries...)
    56  		a.Tracker().SetTotalResources(len(apiBrokers))
    57  		if output.NextToken == nil {
    58  			break
    59  		}
    60  		input.NextToken = output.NextToken
    61  	}
    62  
    63  	a.Tracker().SetServiceLabel("Adapting brokers...")
    64  	return concurrency.Adapt(apiBrokers, a.RootAdapter, a.adaptBroker), nil
    65  }
    66  
    67  func (a *adapter) adaptBroker(apiBroker types.BrokerSummary) (*mq.Broker, error) {
    68  
    69  	metadata := a.CreateMetadataFromARN(*apiBroker.BrokerArn)
    70  
    71  	output, err := a.api.DescribeBroker(a.Context(), &api.DescribeBrokerInput{
    72  		BrokerId: apiBroker.BrokerId,
    73  	})
    74  	if err != nil {
    75  		return nil, err
    76  	}
    77  
    78  	return &mq.Broker{
    79  		Metadata:     metadata,
    80  		PublicAccess: defsecTypes.Bool(output.PubliclyAccessible, metadata),
    81  		Logging: mq.Logging{
    82  			Metadata: metadata,
    83  			General:  defsecTypes.Bool(output.Logs != nil && output.Logs.General, metadata),
    84  			Audit:    defsecTypes.Bool(output.Logs != nil && output.Logs.Audit, metadata),
    85  		},
    86  	}, nil
    87  }