aboutsummaryrefslogtreecommitdiff
path: root/main_aws.go
diff options
context:
space:
mode:
Diffstat (limited to 'main_aws.go')
-rw-r--r--main_aws.go27
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{