- expand localHostName check of AbstractRemoteHandler

to pevent request is handled as proxy request 
- make domain handler not relay on included path in resolved .yacy address
pull/1/head
reger 11 years ago
parent 561ea135af
commit 6f9ed439d3

@ -25,12 +25,14 @@
package net.yacy.http;
import java.io.IOException;
import java.net.InetAddress;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.yacy.cora.protocol.Domains;
import net.yacy.search.Switchboard;
@ -45,16 +47,28 @@ import org.eclipse.jetty.server.handler.AbstractHandler;
abstract public class AbstractRemoteHandler extends AbstractHandler implements Handler {
protected Switchboard sb = null;
private List<String> localVirtualHostNames;
private List<String> localVirtualHostNames; // list for quick check for req to local peer
@Override
protected void doStart() {
sb = Switchboard.getSwitchboard();
localVirtualHostNames = new LinkedList<String>();
localVirtualHostNames.add("localpeer");
localVirtualHostNames.add("localhost");
localVirtualHostNames.add(sb.getConfig("fileHost", "localpeer"));
// add some other known local host names
InetAddress localInetAddress = Domains.myPublicLocalIP();
if (localInetAddress != null) {
if (!localVirtualHostNames.contains(localInetAddress.getHostName())) {
localVirtualHostNames.add(localInetAddress.getHostName());
}
if (!localVirtualHostNames.contains(localInetAddress.getCanonicalHostName())) {
localVirtualHostNames.add(localInetAddress.getCanonicalHostName());
}
}
localVirtualHostNames.add(sb.peers.mySeed().getIP());
}
abstract public void handleRemote(String target, Request baseRequest, HttpServletRequest request,
@ -68,8 +82,12 @@ abstract public class AbstractRemoteHandler extends AbstractHandler implements H
int hostSplitPos = host.indexOf(':');
String hostOnly = hostSplitPos < 0 ? host : host.substring(0, hostSplitPos);
if(localVirtualHostNames.contains(hostOnly)) return; // no proxy request, continue processing by handlers
if (localVirtualHostNames.contains(hostOnly)) return; // no proxy request (quick check), continue processing by handlers
if (Domains.isLocal(hostOnly, null)) return; // no proxy, continue processing by handlers
if (hostOnly.startsWith(sb.peers.myIP())) { // remote access to my external IP, continue processing by handlers
localVirtualHostNames.add(sb.peers.myIP()); // not available on init, add it now for quickcheck
return;
}
handleRemote(target, baseRequest, request, response);
}

@ -41,6 +41,10 @@ import org.eclipse.jetty.server.handler.AbstractHandler;
import net.yacy.server.http.AlternativeDomainNames;
/**
* handling of request to virtual ".yacy" domain determines public adress from
* seedlist and forwards modified/wrapped request to it
*/
public class YacyDomainHandler extends AbstractHandler implements Handler {
private AlternativeDomainNames alternativeResolvers;
@ -56,13 +60,26 @@ public class YacyDomainHandler extends AbstractHandler implements Handler {
String resolved = alternativeResolvers.resolve(host);
if (resolved != null) {
// split resolved into host, port and path
String path;
String hostPort;
int posPath = resolved.indexOf('/');
String path = resolved.substring(posPath);
String hostPort = resolved.substring(0, posPath);
if (posPath >= 0) {
path = resolved.substring(posPath);
hostPort = resolved.substring(0, posPath);
} else {
path = "";
hostPort = resolved;
}
int posPort = hostPort.lastIndexOf(':');
String newHost = hostPort.substring(0, posPort);
int newPort = Integer.parseInt(hostPort.substring(posPort + 1));
String newHost;
int newPort;
if (posPort >= 0) {
newHost = hostPort.substring(0, posPort);
newPort = Integer.parseInt(hostPort.substring(posPort + 1));
} else {
newHost = hostPort;
newPort = 80;
}
RequestDispatcher dispatcher = request.getRequestDispatcher(path + target);
dispatcher.forward(new DomainRequestWrapper(request, newHost, newPort), response);
baseRequest.setHandled(true);
@ -114,7 +131,6 @@ public class YacyDomainHandler extends AbstractHandler implements Handler {
}
return super.getHeaders(name);
}
}
}

Loading…
Cancel
Save