in findings/main.go [169:225]
func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
configbucket := os.Getenv("ECR_SCAN_CONFIG_BUCKET")
fmt.Printf("DEBUG:: findings start\n")
// validate ID in URL path:
if _, ok := request.PathParameters["id"]; !ok {
return serverError(fmt.Errorf("Unknown configuration"))
}
cfg, err := config.LoadDefaultConfig(context.TODO())
if err != nil {
fmt.Println(err)
return serverError(err)
}
svc := s3.NewFromConfig(cfg)
fmt.Printf("Scanning bucket %v for scan specs\n", configbucket)
resp, err := svc.ListObjectsV2(context.TODO(), &s3.ListObjectsV2Input{
Bucket: &configbucket,
},
)
// resp, err := req.Send(context.TODO())
if err != nil {
fmt.Println(err)
return serverError(err)
}
for _, obj := range resp.Contents {
fn := *obj.Key
scanID := strings.TrimSuffix(fn, ".json")
if scanID == request.PathParameters["id"] {
scanspec, err := fetchScanSpec(configbucket, scanID)
if err != nil {
fmt.Println(err)
return serverError(err)
}
findingsfeed, err := buildFeed(scanspec)
if err != nil {
fmt.Println(err)
return serverError(err)
}
fmt.Printf("DEBUG:: findings done\n")
return events.APIGatewayProxyResponse{
StatusCode: http.StatusOK,
Headers: map[string]string{
"Content-Type": "application/atom+xml",
"Access-Control-Allow-Origin": "*",
},
Body: findingsfeed,
}, nil
}
}
return events.APIGatewayProxyResponse{
StatusCode: http.StatusNotFound,
Headers: map[string]string{
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
},
Body: "This scan config does not exist, no operation performed",
}, nil
}