github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/cloud/aws/codebuild/adapt.go (about) 1 package codebuild 2 3 import ( 4 api "github.com/aws/aws-sdk-go-v2/service/codebuild" 5 "github.com/khulnasoft-lab/defsec/internal/adapters/cloud/aws" 6 "github.com/khulnasoft-lab/defsec/pkg/concurrency" 7 "github.com/khulnasoft-lab/defsec/pkg/providers/aws/codebuild" 8 "github.com/khulnasoft-lab/defsec/pkg/state" 9 defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types" 10 ) 11 12 type adapter struct { 13 *aws.RootAdapter 14 client *api.Client 15 } 16 17 func init() { 18 aws.RegisterServiceAdapter(&adapter{}) 19 } 20 21 func (a *adapter) Provider() string { 22 return "aws" 23 } 24 25 func (a *adapter) Name() string { 26 return "codebuild" 27 } 28 29 func (a *adapter) Adapt(root *aws.RootAdapter, state *state.State) error { 30 31 a.RootAdapter = root 32 a.client = api.NewFromConfig(root.SessionConfig()) 33 var err error 34 35 state.AWS.CodeBuild.Projects, err = a.getProjects() 36 if err != nil { 37 return err 38 } 39 40 return nil 41 } 42 43 func (a *adapter) getProjects() ([]codebuild.Project, error) { 44 45 a.Tracker().SetServiceLabel("Discovering projects...") 46 47 var projectNames []string 48 var input api.ListProjectsInput 49 for { 50 output, err := a.client.ListProjects(a.Context(), &input) 51 if err != nil { 52 return nil, err 53 } 54 projectNames = append(projectNames, output.Projects...) 55 a.Tracker().SetTotalResources(len(projectNames)) 56 if output.NextToken == nil { 57 break 58 } 59 input.NextToken = output.NextToken 60 } 61 62 a.Tracker().SetServiceLabel("Adapting projects...") 63 return concurrency.Adapt(projectNames, a.RootAdapter, a.adaptProject), nil 64 } 65 66 func (a *adapter) adaptProject(name string) (*codebuild.Project, error) { 67 68 output, err := a.client.BatchGetProjects(a.Context(), &api.BatchGetProjectsInput{ 69 Names: []string{name}, 70 }) 71 if err != nil { 72 return nil, err 73 } 74 75 project := output.Projects[0] 76 77 metadata := a.CreateMetadataFromARN(*project.Arn) 78 79 encryptionEnabled := true 80 if project.Artifacts != nil { 81 if project.Artifacts.EncryptionDisabled != nil { 82 encryptionEnabled = !*project.Artifacts.EncryptionDisabled 83 } 84 } 85 86 var secondaryArtifactSettings []codebuild.ArtifactSettings 87 for _, settings := range project.SecondaryArtifacts { 88 encryptionEnabled := true 89 if settings.EncryptionDisabled != nil { 90 encryptionEnabled = !*settings.EncryptionDisabled 91 } 92 secondaryArtifactSettings = append(secondaryArtifactSettings, codebuild.ArtifactSettings{ 93 Metadata: metadata, 94 EncryptionEnabled: defsecTypes.Bool(encryptionEnabled, metadata), 95 }) 96 } 97 98 return &codebuild.Project{ 99 Metadata: metadata, 100 ArtifactSettings: codebuild.ArtifactSettings{ 101 Metadata: metadata, 102 EncryptionEnabled: defsecTypes.Bool(encryptionEnabled, metadata), 103 }, 104 SecondaryArtifactSettings: secondaryArtifactSettings, 105 }, nil 106 }