changeset 349:56f6c5ab0f3d

Made WFS proxy rewriting work (to some degrees).
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 06 Aug 2018 17:50:45 +0200
parents 9543ca97aa70
children 1ea90a22bd15
files controllers/externalwfs.go
diffstat 1 files changed, 18 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/controllers/externalwfs.go	Mon Aug 06 17:10:23 2018 +0200
+++ b/controllers/externalwfs.go	Mon Aug 06 17:50:45 2018 +0200
@@ -62,26 +62,30 @@
 		abort("Invalid url: %v\n", err)
 	}
 	req.URL = u
-	req.Header.Set("X-Gemma-Prefix", prefix)
+	req.Header.Set("X-Gemma-From", prefix)
+	to := useHTTPS(req) + "://" + req.Host + "/api/externalwfs/" + wfs
+	req.Header.Set("X-Gemma-To", to)
+
 	req.Host = u.Host
+
+	//log.Printf("headers: %v\n", req.Header)
 }
 
 func externalWFSTransport(req *http.Request) (*http.Response, error) {
 
-	prefix := req.Header.Get("X-Gemma-Prefix")
-	req.Header.Del("X-Gemma-Prefix")
+	from := req.Header.Get("X-Gemma-From")
+	to := req.Header.Get("X-Gemma-To")
+	req.Header.Del("X-Gemma-From")
+	req.Header.Del("X-Gemma-To")
+
+	// To prevent some caching effects.
+	req.Header.Del("If-None-Match")
 
 	resp, err := http.DefaultTransport.RoundTrip(req)
 	if err != nil {
 		return nil, err
 	}
-
-	resp.Header.Set("X-Gemma-Prefix", prefix)
-	to := useHTTPS(req) + "://" + req.Host
-	if !strings.HasPrefix(req.URL.Path, "/") {
-		to += "/"
-	}
-	to += req.URL.Path
+	resp.Header.Set("X-Gemma-From", from)
 	resp.Header.Set("X-Gemma-To", to)
 
 	return resp, err
@@ -89,9 +93,9 @@
 
 func externalWFSModifyResponse(resp *http.Response) error {
 
-	prefix := resp.Header.Get("X-Gemma-Prefix")
+	from := resp.Header.Get("X-Gemma-From")
 	to := resp.Header.Get("X-Gemma-To")
-	resp.Header.Del("X-Gemma-Prefix")
+	resp.Header.Del("X-Gemma-From")
 	resp.Header.Del("X-Gemma-To")
 
 	xml := isXML(resp.Header)
@@ -99,7 +103,7 @@
 	gzipped := strings.Contains(resp.Header.Get("Content-Encoding"), "gzip")
 
 	if xml {
-		log.Printf("rewrite from %s to %s\n", prefix, to)
+		log.Printf("rewrite from %s to %s\n", from, to)
 
 		pr, pw := io.Pipe()
 
@@ -129,7 +133,7 @@
 					return
 				}
 			*/
-			if err := rewrite(w, r, prefix, to); err != nil {
+			if err := rewrite(w, r, from, to); err != nil {
 				log.Printf("rewrite failed: %v\n", err)
 				return
 			}