diff options
Diffstat (limited to 'main_aws.go')
| -rw-r--r-- | main_aws.go | 27 |
1 files changed, 20 insertions, 7 deletions
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{ |
