internal/middleware: move the timeout middleware to its own package

This removes the direct dependency from cmd/pkgsite to the middleware
package. The middleware package has a lot of dependencies but most
middlewares are not used by cmd/pkgsite.

There are still some middlewares used by internal/frontend so the
indirect dependency still exists.

For #61399

Change-Id: I09eee46b2ff13e112d24df62073074eb5aa3e901
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/511315
Run-TryBot: Michael Matloob <matloob@golang.org>
Reviewed-by: Jamal Carvalho <jamal@golang.org>
kokoro-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
diff --git a/cmd/frontend/main.go b/cmd/frontend/main.go
index 175e401..3812db7 100644
--- a/cmd/frontend/main.go
+++ b/cmd/frontend/main.go
@@ -24,6 +24,7 @@
 	"golang.org/x/pkgsite/internal/frontend"
 	"golang.org/x/pkgsite/internal/log"
 	"golang.org/x/pkgsite/internal/middleware"
+	"golang.org/x/pkgsite/internal/middleware/timeout"
 	"golang.org/x/pkgsite/internal/postgres"
 	"golang.org/x/pkgsite/internal/proxy"
 	"golang.org/x/pkgsite/internal/queue"
@@ -188,7 +189,7 @@
 		middleware.Experiment(experimenter),
 		middleware.Panic(panicHandler),
 		ermw,
-		middleware.Timeout(54*time.Second),
+		timeout.Timeout(54*time.Second),
 	)
 	addr := cfg.HostAddr(*hostAddr)
 	log.Infof(ctx, "Listening on addr %s", addr)
diff --git a/cmd/pkgsite/main.go b/cmd/pkgsite/main.go
index 4b08645..01fc9d8 100644
--- a/cmd/pkgsite/main.go
+++ b/cmd/pkgsite/main.go
@@ -72,7 +72,7 @@
 	"golang.org/x/pkgsite/internal/fetchdatasource"
 	"golang.org/x/pkgsite/internal/frontend"
 	"golang.org/x/pkgsite/internal/log"
-	"golang.org/x/pkgsite/internal/middleware"
+	"golang.org/x/pkgsite/internal/middleware/timeout"
 	"golang.org/x/pkgsite/internal/proxy"
 	"golang.org/x/pkgsite/internal/source"
 	"golang.org/x/pkgsite/internal/stdlib"
@@ -170,7 +170,7 @@
 
 	router := http.NewServeMux()
 	server.Install(router.Handle, nil, nil)
-	mw := middleware.Timeout(54 * time.Second)
+	mw := timeout.Timeout(54 * time.Second)
 	srv := &http.Server{Addr: addr, Handler: mw(router)}
 	die("%v", srv.Serve(ln))
 }
diff --git a/cmd/worker/main.go b/cmd/worker/main.go
index a14f4cd..46d3c1d 100644
--- a/cmd/worker/main.go
+++ b/cmd/worker/main.go
@@ -23,6 +23,7 @@
 	"golang.org/x/pkgsite/internal/index"
 	"golang.org/x/pkgsite/internal/log"
 	"golang.org/x/pkgsite/internal/middleware"
+	mtimeout "golang.org/x/pkgsite/internal/middleware/timeout"
 	"golang.org/x/pkgsite/internal/proxy"
 	"golang.org/x/pkgsite/internal/queue/gcpqueue"
 	"golang.org/x/pkgsite/internal/source"
@@ -142,7 +143,7 @@
 
 	mw := middleware.Chain(
 		middleware.RequestLog(cmdconfig.Logger(ctx, cfg, "worker-log")),
-		middleware.Timeout(time.Duration(timeout)*time.Minute),
+		mtimeout.Timeout(time.Duration(timeout)*time.Minute),
 		iap,
 		middleware.Experiment(experimenter),
 	)
diff --git a/internal/middleware/timeout.go b/internal/middleware/timeout/timeout.go
similarity index 86%
rename from internal/middleware/timeout.go
rename to internal/middleware/timeout/timeout.go
index de8bb83..93d992d 100644
--- a/internal/middleware/timeout.go
+++ b/internal/middleware/timeout/timeout.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package middleware
+package timeout
 
 import (
 	"context"
@@ -12,7 +12,7 @@
 
 // Timeout returns a new Middleware that times out each request after the given
 // duration.
-func Timeout(d time.Duration) Middleware {
+func Timeout(d time.Duration) func(http.Handler) http.Handler {
 	return func(h http.Handler) http.Handler {
 		return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 			ctx, cancel := context.WithTimeout(r.Context(), d)
diff --git a/internal/middleware/timeout_test.go b/internal/middleware/timeout/timeout_test.go
similarity index 98%
rename from internal/middleware/timeout_test.go
rename to internal/middleware/timeout/timeout_test.go
index d9206a3..ea4380d 100644
--- a/internal/middleware/timeout_test.go
+++ b/internal/middleware/timeout/timeout_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package middleware
+package timeout
 
 import (
 	"fmt"