diff options
| author | Grégoire Duchêne <gduchene@awhk.org> | 2022-06-25 10:43:53 +0100 |
|---|---|---|
| committer | Grégoire Duchêne <gduchene@awhk.org> | 2022-06-25 10:43:53 +0100 |
| commit | 85e60b26336e9aa36c234df6f2c19fe49042185f (patch) | |
| tree | 28b100fd688ea6a5dd65707a064744c3c0c2c14e /cmd | |
| parent | e47a7770f18283405b5fbfddc5c5490eca8080fb (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.mod | 13 | ||||
| -rw-r--r-- | cmd/go-import-redirect-aws/go.sum | 12 | ||||
| -rw-r--r-- | cmd/go-import-redirect-aws/main.go | 58 | ||||
| -rw-r--r-- | cmd/go-import-redirect/main.go | 65 |
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) + } +} |
