aboutsummaryrefslogtreecommitdiff
path: root/cmd
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
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')
-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
-rw-r--r--cmd/go-import-redirect/main.go65
4 files changed, 148 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)
+}
diff --git a/cmd/go-import-redirect/main.go b/cmd/go-import-redirect/main.go
new file mode 100644
index 0000000..dd7e262
--- /dev/null
+++ b/cmd/go-import-redirect/main.go
@@ -0,0 +1,65 @@
+// SPDX-FileCopyrightText: © 2019 Grégoire Duchêne <gduchene@awhk.org>
+// SPDX-License-Identifier: ISC
+
+//go:build !aws
+
+package main
+
+import (
+ "context"
+ "encoding/json"
+ "flag"
+ "log"
+ "net/http"
+ "os"
+ "os/signal"
+ "regexp"
+ "strings"
+ "syscall"
+ "time"
+
+ "go.awhk.org/core"
+ "go.awhk.org/go-import-redirect/pkg/redirector"
+)
+
+var (
+ addr = flag.String("addr", "localhost:8080", "address to listen on")
+ cfg = flag.String("c", "", "path to a configuration file")
+ from = flag.String("from", "", "package prefix to remove")
+ to = flag.String("to", "", "repository prefix to add")
+ vcs = flag.String("vcs", "git", "version control system to signal")
+)
+
+func main() {
+ flag.Parse()
+
+ done := make(chan os.Signal, 1)
+ signal.Notify(done, os.Interrupt, syscall.SIGTERM)
+
+ h := &redirector.Redirector{Template: redirector.DefaultTemplate}
+ if *cfg != "" {
+ if err := json.NewDecoder(core.Must(os.Open(*cfg))).Decode(&h.Transformers); err != nil {
+ log.Fatalln(err)
+ }
+ } else {
+ h.Transformers = append(h.Transformers, redirector.Transformer{
+ Pattern: &redirector.Pattern{regexp.MustCompile(strings.ReplaceAll(*from, `\\`, `\`))},
+ Replacement: *to,
+ VCS: *vcs,
+ })
+ }
+
+ srv := http.Server{Handler: h}
+ go func() {
+ if err := srv.Serve(core.Must(core.Listen(*addr))); err != nil && err != http.ErrServerClosed {
+ log.Fatalln("server.Serve:", err)
+ }
+ }()
+
+ <-done
+ ctx, cancel := context.WithTimeout(context.Background(), time.Second)
+ defer cancel()
+ if err := srv.Shutdown(ctx); err != nil && err != http.ErrServerClosed {
+ log.Fatalln("server.Shutdown:", err)
+ }
+}