aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
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)
+ }
+}