aboutsummaryrefslogtreecommitdiff
path: root/cmd/go-import-redirect-aws
diff options
context:
space:
mode:
authorGrégoire Duchêne <gduchene@awhk.org>2022-06-25 10:43:53 +0100
committerGrégoire Duchêne <gduchene@awhk.org>2022-06-25 10:43:53 +0100
commit85e60b26336e9aa36c234df6f2c19fe49042185f (patch)
tree28b100fd688ea6a5dd65707a064744c3c0c2c14e /cmd/go-import-redirect-aws
parente47a7770f18283405b5fbfddc5c5490eca8080fb (diff)
Split the AWS version into its own module
This allows the rather large AWS Lambda SDK to only be fetched if the command itself is being fetched.
Diffstat (limited to 'cmd/go-import-redirect-aws')
-rw-r--r--cmd/go-import-redirect-aws/go.mod13
-rw-r--r--cmd/go-import-redirect-aws/go.sum12
-rw-r--r--cmd/go-import-redirect-aws/main.go58
3 files changed, 83 insertions, 0 deletions
diff --git a/cmd/go-import-redirect-aws/go.mod b/cmd/go-import-redirect-aws/go.mod
new file mode 100644
index 0000000..882bbf8
--- /dev/null
+++ b/cmd/go-import-redirect-aws/go.mod
@@ -0,0 +1,13 @@
+module go.awhk.org/go-import-redirect/cmd/go-import-redirect-aws
+
+go 1.18
+
+require (
+ github.com/aws/aws-lambda-go v1.32.0
+ go.awhk.org/go-import-redirect v0.4.0
+)
+
+require (
+ github.com/google/go-cmp v0.5.8 // indirect
+ go.awhk.org/core v0.0.0-20220618115257-41a47c757dca // indirect
+)
diff --git a/cmd/go-import-redirect-aws/go.sum b/cmd/go-import-redirect-aws/go.sum
new file mode 100644
index 0000000..be8832f
--- /dev/null
+++ b/cmd/go-import-redirect-aws/go.sum
@@ -0,0 +1,12 @@
+github.com/aws/aws-lambda-go v1.32.0 h1:i8MflawW1hoyYp85GMH7LhvAs4cqzL7LOS6fSv8l2KM=
+github.com/aws/aws-lambda-go v1.32.0/go.mod h1:IF5Q7wj4VyZyUFnZ54IQqeWtctHQ9tz+KhcbDenr220=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
+github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
+go.awhk.org/core v0.0.0-20220618115257-41a47c757dca h1:BFEKF8Ee3JyltAiViWR/MNedIvdqO6N3ywTj9NoGMCo=
+go.awhk.org/core v0.0.0-20220618115257-41a47c757dca/go.mod h1:5C9oWobMcQLGj+rcfvAvSiGrp/vslOD0eUiwYymTaQI=
+go.awhk.org/go-import-redirect v0.4.0 h1:tpkut6Y8h18v2vOwiVaLZqJf+wMZ2ka++UQR7Bcv6Hw=
+go.awhk.org/go-import-redirect v0.4.0/go.mod h1:ikQIE2DO13h15oS9ZqoLzDROL9x/RI86ZuQ44sH+1JA=
+gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
diff --git a/cmd/go-import-redirect-aws/main.go b/cmd/go-import-redirect-aws/main.go
new file mode 100644
index 0000000..fb758a3
--- /dev/null
+++ b/cmd/go-import-redirect-aws/main.go
@@ -0,0 +1,58 @@
+// SPDX-FileCopyrightText: © 2019 Grégoire Duchêne <gduchene@awhk.org>
+// SPDX-License-Identifier: ISC
+
+package main
+
+import (
+ "context"
+ "net/http"
+ "os"
+ "path"
+ "regexp"
+ "strings"
+
+ "github.com/aws/aws-lambda-go/events"
+ "github.com/aws/aws-lambda-go/lambda"
+
+ "go.awhk.org/go-import-redirect/pkg/redirector"
+)
+
+var transf = redirector.Transformer{
+ Pattern: &redirector.Pattern{regexp.MustCompile(strings.ReplaceAll(os.Getenv("FROM"), `\\`, `\`))},
+ Replacement: os.Getenv("TO"),
+ VCS: os.Getenv("VCS"),
+}
+
+func redirect(ctx context.Context, req events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
+ pkg := path.Join(req.Headers["Host"], req.Path)
+
+ if !transf.Pattern.MatchString(pkg) {
+ return events.APIGatewayProxyResponse{StatusCode: http.StatusNotFound}, nil
+ }
+
+ if v, ok := req.QueryStringParameters["go-get"]; !ok || v != "1" {
+ return events.APIGatewayProxyResponse{
+ Headers: map[string]string{"Location": "https://pkg.go.dev/" + pkg},
+ StatusCode: http.StatusFound,
+ }, nil
+ }
+
+ data := redirector.TemplateData{
+ Package: pkg,
+ Repository: transf.Pattern.ReplaceAllString(pkg, transf.Replacement),
+ VCS: transf.VCS,
+ }
+ var buf strings.Builder
+ if err := redirector.DefaultTemplate.Execute(&buf, data); err != nil {
+ return events.APIGatewayProxyResponse{}, err
+ }
+ return events.APIGatewayProxyResponse{
+ Body: buf.String(),
+ Headers: map[string]string{"Content-Type": "text/html; charset=utf-8"},
+ StatusCode: http.StatusOK,
+ }, nil
+}
+
+func main() {
+ lambda.Start(redirect)
+}