proxy.go 735 B

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