gddo-server: redirect invalid import paths to homepage When a URL path for a package page fails the check for module.CheckImportPath, redirect to the homepage. Otherwise, the page will 400 on pkg.go.dev. Change-Id: Ic337b968a3919b2e4fcd0ab4dd6b76c631f5edf9 Reviewed-on: https://go-review.googlesource.com/c/gddo/+/279035 Trust: Julie Qiu <julie@golang.org> Run-TryBot: Julie Qiu <julie@golang.org> Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/gddo-server/pkgsite.go b/gddo-server/pkgsite.go index c5e0aa3..5fa7ef0 100644 --- a/gddo-server/pkgsite.go +++ b/gddo-server/pkgsite.go
@@ -16,6 +16,7 @@ "strings" "time" + "golang.org/x/mod/module" "golang.org/x/net/context/ctxhttp" ) @@ -247,16 +248,20 @@ } else { u.Path = "/" } + case "": + u.Path = "" case "/-/subrepo": u.Path = "/search" q.Set("q", "golang.org/x") default: { - _, isSVG := godocURL.Query()["status.svg"] - _, isPNG := godocURL.Query()["status.png"] - if isSVG || isPNG { - u.Path = "/badge" + godocURL.Path - break + // If the import path is invalid, redirect to + // https://golang.org/issue/43036, so that the users has more context + // on why this path does not work on pkg.go.dev. + if err := module.CheckImportPath(strings.TrimPrefix(godocURL.Path, "/")); err != nil { + u.Host = "golang.org" + u.Path = "/issue/43036" + return u } u.Path = godocURL.Path
diff --git a/gddo-server/pkgsite_test.go b/gddo-server/pkgsite_test.go index 736d178..ac2808a 100644 --- a/gddo-server/pkgsite_test.go +++ b/gddo-server/pkgsite_test.go
@@ -167,6 +167,10 @@ from: "https://godoc.org/golang.org/x/vgo/vendor", to: "https://pkg.go.dev/?utm_source=godoc", }, + { + from: "https://godoc.org/cryptoscope.co/go/specialκ", + to: "https://golang.org/issue/43036", + }, } for _, tc := range testCases {