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 }