func handler()

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
}