// Package rewrite is middleware for rewriting requests internally to
// a different path.
package rewrite

import (
	"net/http"

	"github.com/mholt/caddy/middleware"
)

// Rewrite is middleware to rewrite request locations internally before being handled.
type Rewrite struct {
	Next  middleware.Handler
	Rules []Rule
}

// ServeHTTP implements the middleware.Handler interface.
func (rw Rewrite) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) {
	for _, rule := range rw.Rules {
		if r.URL.Path == rule.From {
			r.URL.Path = rule.To
			break
		}
	}
	return rw.Next.ServeHTTP(w, r)
}

// A Rule describes an internal location rewrite rule.
type Rule struct {
	From, To string
}