From 41d23c22df853b0bdf35e2d0988c8d4c4281d42f Mon Sep 17 00:00:00 2001 From: Grégoire Duchêne Date: Sun, 19 Jun 2022 13:31:49 +0100 Subject: Move redirection logic to a separate package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also, add an optional ‘-c’ flag to pass the path to a configuration file that can be used to specify several matching patterns and replacements. --- main_aws.go | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'main_aws.go') diff --git a/main_aws.go b/main_aws.go index 4f6f16e..76cd5b9 100644 --- a/main_aws.go +++ b/main_aws.go @@ -10,29 +10,42 @@ import ( "net/http" "os" "path" + "regexp" "strings" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" -) -var ( - from = os.Getenv("FROM") - to = os.Getenv("TO") - vcs = os.Getenv("VCS") - redir = &redirector{from, to, vcs} + "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 := body.Execute(&buf, bodyData{pkg, redir.getRepo(pkg), vcs}); err != nil { + if err := redirector.DefaultTemplate.Execute(&buf, data); err != nil { return events.APIGatewayProxyResponse{}, err } return events.APIGatewayProxyResponse{ -- cgit v1.2.3-70-g09d2