eintopf.info@v0.13.16/service/osmproxy/transport.go (about) 1 package osmproxy 2 3 import ( 4 "fmt" 5 "io" 6 "net/http" 7 8 "eintopf.info/internal/xhttp" 9 "github.com/go-chi/chi/v5" 10 ) 11 12 func Router() func(chi.Router) { 13 return func(r chi.Router) { 14 r.Get("/tile/{z}/{x}/{y}.png", func(w http.ResponseWriter, r *http.Request) { 15 osmURL := fmt.Sprintf( 16 "https://tile.openstreetmap.de/%s/%s/%s.png", 17 chi.URLParam(r, "z"), 18 chi.URLParam(r, "x"), 19 chi.URLParam(r, "y"), 20 ) 21 22 r2, err := http.NewRequest("GET", osmURL, nil) 23 if err != nil { 24 xhttp.WriteInternalError(r.Context(), w, err) 25 return 26 } 27 r2.Header = r.Header 28 r2.Header.Del("User-Agent") 29 c := &http.Client{} 30 31 response, err := c.Do(r2) 32 if err != nil { 33 xhttp.WriteInternalError(r.Context(), w, err) 34 return 35 } 36 data, err := io.ReadAll(response.Body) 37 if err != nil { 38 xhttp.WriteInternalError(r.Context(), w, err) 39 return 40 } 41 for k, vs := range response.Header { 42 for _, v := range vs { 43 w.Header().Add(k, v) 44 } 45 } 46 w.Write(data) 47 }) 48 } 49 }