From 72473d51710c65283e6ad4e76050be32a5d5720d Mon Sep 17 00:00:00 2001 From: Grégoire Duchêne Date: Sun, 12 Apr 2020 12:40:47 +0100 Subject: Put both entry points in the same directory --- cmd/aws/main.go | 38 ----------------- cmd/gcp/main.go | 81 ------------------------------------- cmd/go-import-redirect/main.go | 83 ++++++++++++++++++++++++++++++++++++++ cmd/go-import-redirect/main_aws.go | 39 ++++++++++++++++++ 4 files changed, 122 insertions(+), 119 deletions(-) delete mode 100644 cmd/aws/main.go delete mode 100644 cmd/gcp/main.go create mode 100644 cmd/go-import-redirect/main.go create mode 100644 cmd/go-import-redirect/main_aws.go (limited to 'cmd') diff --git a/cmd/aws/main.go b/cmd/aws/main.go deleted file mode 100644 index 7954af3..0000000 --- a/cmd/aws/main.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2019, Grégoire Duchêne -// -// 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 deleted file mode 100644 index c726408..0000000 --- a/cmd/gcp/main.go +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) 2019, Grégoire Duchêne -// -// Use of this source code is governed by the ISC license that can be -// found in the LICENSE file. - -package main - -import ( - "context" - "log" - "net" - "net/http" - "os" - "os/signal" - "path" - "syscall" - "time" - - "go.awhk.org/go-import-redirect/internal" -) - -func redirect(resp http.ResponseWriter, req *http.Request) { - if req.Method != "GET" { - resp.Header()["Allow"] = []string{"GET"} - resp.WriteHeader(http.StatusMethodNotAllowed) - return - } - - 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() { - mux := http.NewServeMux() - mux.HandleFunc("/", redirect) - srv := http.Server{Handler: mux} - - done := make(chan os.Signal, 1) - signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) - - go func() { - var ( - addr = os.Getenv("ADDR") - l net.Listener - err error - ) - if addr != "" && addr[0] == '/' { - if l, err = net.Listen("unix", addr); err != nil { - log.Fatalln("net.Listen:", err) - } - // We do not do any authorization anyway, so 0666 makes sense here. - if err = os.Chmod(addr, 0666); err != nil { - log.Fatalln("os.Chmod:", err) - } - } else { - if addr == "" { - addr = ":8080" - } - if l, err = net.Listen("tcp", addr); err != nil { - log.Fatalln("net.Listen:", err) - } - } - if err = srv.Serve(l); err != nil && err != http.ErrServerClosed { - log.Fatalln("server.ListenAndServe:", 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) - } -} diff --git a/cmd/go-import-redirect/main.go b/cmd/go-import-redirect/main.go new file mode 100644 index 0000000..064e932 --- /dev/null +++ b/cmd/go-import-redirect/main.go @@ -0,0 +1,83 @@ +// Copyright (c) 2019, Grégoire Duchêne +// +// Use of this source code is governed by the ISC license that can be +// found in the LICENSE file. + +// +build !aws + +package main + +import ( + "context" + "log" + "net" + "net/http" + "os" + "os/signal" + "path" + "syscall" + "time" + + "go.awhk.org/go-import-redirect/internal" +) + +func redirect(resp http.ResponseWriter, req *http.Request) { + if req.Method != "GET" { + resp.Header()["Allow"] = []string{"GET"} + resp.WriteHeader(http.StatusMethodNotAllowed) + return + } + + 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() { + mux := http.NewServeMux() + mux.HandleFunc("/", redirect) + srv := http.Server{Handler: mux} + + done := make(chan os.Signal, 1) + signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) + + go func() { + var ( + addr = os.Getenv("ADDR") + l net.Listener + err error + ) + if addr != "" && addr[0] == '/' { + if l, err = net.Listen("unix", addr); err != nil { + log.Fatalln("net.Listen:", err) + } + // We do not do any authorization anyway, so 0666 makes sense here. + if err = os.Chmod(addr, 0666); err != nil { + log.Fatalln("os.Chmod:", err) + } + } else { + if addr == "" { + addr = ":8080" + } + if l, err = net.Listen("tcp", addr); err != nil { + log.Fatalln("net.Listen:", err) + } + } + if err = srv.Serve(l); err != nil && err != http.ErrServerClosed { + log.Fatalln("server.ListenAndServe:", 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) + } +} diff --git a/cmd/go-import-redirect/main_aws.go b/cmd/go-import-redirect/main_aws.go new file mode 100644 index 0000000..f6a95b1 --- /dev/null +++ b/cmd/go-import-redirect/main_aws.go @@ -0,0 +1,39 @@ +// Copyright (c) 2019, Grégoire Duchêne +// +// Use of this source code is governed by the ISC license that can be +// found in the LICENSE file. + +// +build aws,linux + +package main + +import ( + "context" + "net/http" + "path" + + "github.com/aws/aws-lambda-go/events" + "github.com/aws/aws-lambda-go/lambda" + "go.awhk.org/go-import-redirect/internal" +) + +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) +} -- cgit v1.2.3-70-g09d2