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
|
|