github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/cloud/aws/api-gateway/apis_v2.go (about) 1 package api_gateway 2 3 import ( 4 "fmt" 5 6 "github.com/khulnasoft-lab/defsec/pkg/concurrency" 7 "github.com/khulnasoft-lab/defsec/pkg/types" 8 9 v2 "github.com/khulnasoft-lab/defsec/pkg/providers/aws/apigateway/v2" 10 11 api "github.com/aws/aws-sdk-go-v2/service/apigatewayv2" 12 agTypes "github.com/aws/aws-sdk-go-v2/service/apigatewayv2/types" 13 ) 14 15 func (a *adapter) getAPIsV2() ([]v2.API, error) { 16 a.Tracker().SetServiceLabel("Discovering v2 APIs...") 17 18 var input api.GetApisInput 19 var apiApis []agTypes.Api 20 for { 21 output, err := a.clientV2.GetApis(a.Context(), &input) 22 if err != nil { 23 return nil, err 24 } 25 apiApis = append(apiApis, output.Items...) 26 a.Tracker().SetTotalResources(len(apiApis)) 27 if output.NextToken == nil { 28 break 29 } 30 input.NextToken = output.NextToken 31 } 32 33 a.Tracker().SetServiceLabel("Adapting v2 APIs...") 34 return concurrency.Adapt(apiApis, a.RootAdapter, a.adaptAPIV2), nil 35 } 36 37 func (a *adapter) adaptAPIV2(remoteAPI agTypes.Api) (*v2.API, error) { 38 39 metadata := a.CreateMetadata(fmt.Sprintf("/apis/%s", *remoteAPI.ApiId)) 40 41 var stages []v2.Stage 42 input := &api.GetStagesInput{ 43 ApiId: remoteAPI.ApiId, 44 } 45 for { 46 stagesOutput, err := a.clientV2.GetStages(a.Context(), input) 47 if err != nil { 48 return nil, err 49 } 50 for _, apiStage := range stagesOutput.Items { 51 stages = append(stages, a.adaptStageV2(remoteAPI, apiStage)) 52 } 53 if stagesOutput.NextToken == nil { 54 break 55 } 56 input.NextToken = stagesOutput.NextToken 57 } 58 59 return &v2.API{ 60 Metadata: metadata, 61 Name: types.String(*remoteAPI.Name, metadata), 62 ProtocolType: types.String(string(remoteAPI.ProtocolType), metadata), 63 Stages: stages, 64 }, nil 65 } 66 67 func (a *adapter) adaptStageV2(remoteAPI agTypes.Api, stage agTypes.Stage) v2.Stage { 68 metadata := a.CreateMetadata(fmt.Sprintf("/apis/%s/stages/%s", *remoteAPI.ApiId, *stage.StageName)) 69 70 var logARN string 71 if stage.AccessLogSettings != nil && stage.AccessLogSettings.DestinationArn != nil { 72 logARN = *stage.AccessLogSettings.DestinationArn 73 } 74 75 return v2.Stage{ 76 Metadata: metadata, 77 Name: types.String(*stage.StageName, metadata), 78 AccessLogging: v2.AccessLogging{ 79 Metadata: metadata, 80 CloudwatchLogGroupARN: types.String(logARN, metadata), 81 }, 82 } 83 }