diff options
| author | Grégoire Duchêne <gduchene@awhk.org> | 2020-03-26 22:03:15 +0000 |
|---|---|---|
| committer | Grégoire Duchêne <gduchene@awhk.org> | 2020-03-26 22:03:15 +0000 |
| commit | feff62b8fcff9709dc6c7f0b56ce80a288367f29 (patch) | |
| tree | 68fe8a643179ee60d83ec2a39e1f3a4e2ac77cde /cmd | |
| parent | 3216dc9b8d876f24ed561e81c2a1fb91926cb57a (diff) | |
Standardize the project layout
https://github.com/golang-standards/project-layout seems sensible.
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/aws/main.go | 38 | ||||
| -rw-r--r-- | cmd/gcp/main.go | 35 |
2 files changed, 73 insertions, 0 deletions
diff --git a/cmd/aws/main.go b/cmd/aws/main.go new file mode 100644 index 0000000..7954af3 --- /dev/null +++ b/cmd/aws/main.go @@ -0,0 +1,38 @@ +// Copyright (c) 2019, Grégoire Duchêne <gduchene@awhk.org> +// +// Use of this source code is governed by the ISC license that can be +// found in the LICENSE file. + +// +build linux + +package main + +import ( + "context" + "github.com/aws/aws-lambda-go/events" + "github.com/aws/aws-lambda-go/lambda" + "go.awhk.org/go-import-redirect/internal" + "net/http" + "path" +) + +func redirect(ctx context.Context, req events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { + var ( + pkg = path.Join(req.Headers["Host"], req.Path) + resp = events.APIGatewayProxyResponse{ + Body: internal.GetBody(pkg), + Headers: map[string]string{"Content-Type": "text/html; charset=utf-8"}, + } + ) + if v, ok := req.QueryStringParameters["go-get"]; ok && v == "1" { + resp.StatusCode = http.StatusOK + } else { + resp.Headers["Location"] = "https://godoc.org/" + pkg + resp.StatusCode = http.StatusFound + } + return resp, nil +} + +func main() { + lambda.Start(redirect) +} diff --git a/cmd/gcp/main.go b/cmd/gcp/main.go new file mode 100644 index 0000000..e8ad6ba --- /dev/null +++ b/cmd/gcp/main.go @@ -0,0 +1,35 @@ +// Copyright (c) 2019, Grégoire Duchêne <gduchene@awhk.org> +// +// Use of this source code is governed by the ISC license that can be +// found in the LICENSE file. + +package main + +import ( + "go.awhk.org/go-import-redirect/internal" + "log" + "net/http" + "os" + "path" +) + +func redirect(resp http.ResponseWriter, req *http.Request) { + pkg := path.Join(req.Host, req.URL.Path) + resp.Header()["Content-Type"] = []string{"text/html; charset=utf-8"} + if v, ok := req.URL.Query()["go-get"]; ok && len(v) > 0 && v[0] == "1" { + resp.WriteHeader(http.StatusOK) + } else { + resp.Header()["Location"] = []string{"https://godoc.org/" + pkg} + resp.WriteHeader(http.StatusFound) + } + resp.Write([]byte(internal.GetBody(pkg))) +} + +func main() { + port := os.Getenv("PORT") + if port == "" { + port = "8080" + } + http.HandleFunc("/", redirect) + log.Fatal(http.ListenAndServe(os.Getenv("ADDR")+":"+port, nil)) +} |
