Project

General

Profile

rewrite_uri_diff.txt

Sergey Ivanovskiy, 03/02/2017 06:53 AM

Download (2.76 KB)

 
1
=== modified file 'src/com/goldencode/p2j/main/WebHandler.java'
2
--- src/com/goldencode/p2j/main/WebHandler.java	2016-04-29 13:39:33 +0000
3
+++ src/com/goldencode/p2j/main/WebHandler.java	2017-03-02 11:50:53 +0000
4
@@ -32,6 +32,8 @@
5
 package com.goldencode.p2j.main;
6
 
7
 import java.io.*;
8
+import java.net.URI;
9
+import java.net.URISyntaxException;
10
 import java.util.*;
11
 import java.util.logging.*;
12
 
13
@@ -43,7 +45,6 @@
14
 import org.eclipse.jetty.server.handler.*;
15
 
16
 import com.goldencode.p2j.directory.*;
17
-import com.goldencode.p2j.security.*;
18
 import com.goldencode.p2j.security.SecurityManager;
19
 import com.goldencode.p2j.util.*;
20
 
21
@@ -393,6 +394,28 @@
22
       }
23
    }
24
    
25
+   private String rewriteUri(String forwardedProto, String forwardedHost, String uri)
26
+            throws URISyntaxException
27
+   {
28
+      // rewrite uri
29
+      URI uriParser = new URI(uri);
30
+      String query = uriParser.getQuery();
31
+      String path  = uriParser.getPath();
32
+      String port = String.valueOf(uriParser.getPort());
33
+      String proto = uriParser.getScheme();
34
+      if (forwardedProto != null && !forwardedProto.isEmpty())
35
+      {
36
+         proto = forwardedProto;
37
+      }
38
+      StringBuilder buffer = new StringBuilder(proto.length() + 3 +
39
+               forwardedHost.length() + 1 + port.length() + path.length() + 1 +
40
+               query.length());
41
+      buffer.append(proto).append("://").append(forwardedHost).append("/");
42
+      buffer.append(port).append(path).append("?").append(query);
43
+      //rewrite uri
44
+      return buffer.toString();
45
+   }
46
+   
47
    /**
48
     * Handle POST request. Spawn web client and redirect the request to the embedded server.
49
     * 
50
@@ -417,6 +440,8 @@
51
       
52
       // get referrer URL
53
       String referrer = base.getHeader(HttpHeader.REFERER.asString());
54
+      String forwardedHost  = base.getHeader(HttpHeader.X_FORWARDED_HOST.asString());
55
+      String forwardedProto = base.getHeader(HttpHeader.X_FORWARDED_PROTO.asString());
56
       
57
       // get form parameters;
58
       String user = base.getParameter("usr");
59
@@ -428,6 +453,21 @@
60
                                   
61
       if (result.uri != null)
62
       {
63
+         if (forwardedHost != null && !forwardedHost.isEmpty())
64
+         {
65
+            try
66
+            {
67
+               result.uri = rewriteUri(forwardedProto, forwardedHost, result.uri);
68
+            }
69
+            catch (URISyntaxException e)
70
+            {
71
+               LOG.logp(Level.SEVERE, 
72
+                        "WebHandler.handle", 
73
+                        "",
74
+                        LogHelper.generate("Rewrite failed: X_FORWARDED_HOST=%s X_FORWARDED_PROTO=%s",
75
+                                 forwardedHost, forwardedProto));
76
+            }
77
+         }
78
          String type = isGui ? "GUI" : "ChUI";
79
          
80
          LOG.logp(Level.INFO, 
81