proxy.go 678 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package proxy
  2. import (
  3. "net"
  4. "net/http"
  5. "time"
  6. )
  7. func NewHandler(t *http.Transport, endpoints []string) (http.Handler, error) {
  8. d, err := newDirector(endpoints)
  9. if err != nil {
  10. return nil, err
  11. }
  12. rp := reverseProxy{
  13. director: d,
  14. transport: t,
  15. }
  16. return &rp, nil
  17. }
  18. func readonlyHandlerFunc(next http.Handler) func(http.ResponseWriter, *http.Request) {
  19. return func(w http.ResponseWriter, req *http.Request) {
  20. if req.Method != "GET" {
  21. w.WriteHeader(http.StatusNotImplemented)
  22. return
  23. }
  24. next.ServeHTTP(w, req)
  25. }
  26. }
  27. func NewReadonlyHandler(hdlr http.Handler) http.Handler {
  28. readonly := readonlyHandlerFunc(hdlr)
  29. return http.HandlerFunc(readonly)
  30. }