diff --git a/godoc/dl/dl.go b/godoc/dl/dl.go index 6555940c..629b6caf 100644 --- a/godoc/dl/dl.go +++ b/godoc/dl/dl.go @@ -16,6 +16,7 @@ import ( "crypto/md5" "encoding/json" "fmt" + "html" "html/template" "io" "net/http" @@ -432,11 +433,31 @@ func getHandler(w http.ResponseWriter, r *http.Request) { listHandler(w, r) return } - if !fileRe.MatchString(name) { - http.NotFound(w, r) + if fileRe.MatchString(name) { + http.Redirect(w, r, downloadBaseURL+name, http.StatusFound) return } - http.Redirect(w, r, downloadBaseURL+name, http.StatusFound) + if goGetRe.MatchString(name) { + if r.Method == "GET" || r.Method == "HEAD" { + w.Header().Set("Content-Type", "text/html; charset=utf-8") + } + w.Header().Set("Location", "https://golang.org/dl/#"+name) + w.WriteHeader(http.StatusFound) + fmt.Fprintf(w, ` + +
+ + + + + +Nothing to see here; move along. + + +`, html.EscapeString(name), html.EscapeString(name)) + return + } + http.NotFound(w, r) } func validUser(user string) bool { @@ -453,7 +474,10 @@ func userKey(c context.Context, user string) string { return fmt.Sprintf("%x", h.Sum(nil)) } -var fileRe = regexp.MustCompile(`^go[0-9a-z.]+\.[0-9a-z.-]+\.(tar\.gz|pkg|msi|zip)$`) +var ( + fileRe = regexp.MustCompile(`^go[0-9a-z.]+\.[0-9a-z.-]+\.(tar\.gz|pkg|msi|zip)$`) + goGetRe = regexp.MustCompile(`^go[0-9a-z.]+\.[0-9a-z.-]+$`) +) func initHandler(w http.ResponseWriter, r *http.Request) { var fileRoot struct {