|
|
|
@ -62,7 +62,6 @@ import java.util.HashSet;
|
|
|
|
|
import java.util.Iterator;
|
|
|
|
|
import java.util.Properties;
|
|
|
|
|
import java.util.StringTokenizer;
|
|
|
|
|
import java.lang.StringIndexOutOfBoundsException;
|
|
|
|
|
|
|
|
|
|
import de.anomic.server.serverByteBuffer;
|
|
|
|
|
import de.anomic.server.serverCodings;
|
|
|
|
@ -73,8 +72,6 @@ import de.anomic.server.serverObjects;
|
|
|
|
|
import de.anomic.server.serverSwitch;
|
|
|
|
|
import de.anomic.server.logging.serverLog;
|
|
|
|
|
import de.anomic.yacy.yacyCore;
|
|
|
|
|
import de.anomic.plasma.plasmaSwitchboard;
|
|
|
|
|
import de.anomic.data.userDB;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -104,7 +101,7 @@ public final class httpd implements serverHandler {
|
|
|
|
|
private httpdHandler proxyHandler = null; // a servlet that holds the proxy functions
|
|
|
|
|
private httpdHandler fileHandler = null; // a servlet that holds the file serving functions
|
|
|
|
|
private httpdHandler soapHandler = null;
|
|
|
|
|
private static plasmaSwitchboard switchboard = null;
|
|
|
|
|
private static serverSwitch switchboard = null;
|
|
|
|
|
private static String virtualHost = null;
|
|
|
|
|
|
|
|
|
|
public static boolean keepAliveSupport = false;
|
|
|
|
@ -128,13 +125,11 @@ public final class httpd implements serverHandler {
|
|
|
|
|
|
|
|
|
|
// needed for logging
|
|
|
|
|
private final serverLog log = new serverLog("HTTPD");
|
|
|
|
|
|
|
|
|
|
private final serverCodings codings = new serverCodings(true);
|
|
|
|
|
|
|
|
|
|
// class methods
|
|
|
|
|
public httpd(serverSwitch s, httpdHandler fileHandler, httpdHandler proxyHandler) {
|
|
|
|
|
// handler info
|
|
|
|
|
httpd.switchboard = (plasmaSwitchboard)s;
|
|
|
|
|
httpd.switchboard = s;
|
|
|
|
|
this.fileHandler = fileHandler;
|
|
|
|
|
this.proxyHandler = proxyHandler;
|
|
|
|
|
httpd.virtualHost = switchboard.getConfig("fileHost","localhost");
|
|
|
|
@ -310,38 +305,18 @@ public final class httpd implements serverHandler {
|
|
|
|
|
if (this.proxyAccountBase64MD5 == null)
|
|
|
|
|
this.proxyAccountBase64MD5 = switchboard.getConfig("proxyAccountBase64MD5", "");
|
|
|
|
|
|
|
|
|
|
if (this.proxyAccountBase64MD5.length() > 0) { //TODO replace with a simple switch
|
|
|
|
|
if (this.proxyAccountBase64MD5.length() > 0) {
|
|
|
|
|
String auth = (String) header.get(httpHeader.PROXY_AUTHORIZATION,"xxxxxx");
|
|
|
|
|
auth=auth.trim().substring(6);
|
|
|
|
|
try{
|
|
|
|
|
auth=codings.decodeBase64String(auth);
|
|
|
|
|
}catch(StringIndexOutOfBoundsException e){} //no valid Base64
|
|
|
|
|
String[] tmp=auth.split(":");
|
|
|
|
|
if(tmp.length == 2){
|
|
|
|
|
userDB.Entry entry=switchboard.userDB.getEntry(tmp[0]);
|
|
|
|
|
if( entry != null && entry.getMD5EncodedUserPwd().equals(serverCodings.encodeMD5Hex(auth)) ){
|
|
|
|
|
//TODO: Check Timelimits
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// ask for authenticate
|
|
|
|
|
this.session.out.write((httpVersion + " 407 Proxy Authentication Required" + serverCore.crlfString +
|
|
|
|
|
httpHeader.PROXY_AUTHENTICATE + ": Basic realm=\"log-in\"" + serverCore.crlfString).getBytes());
|
|
|
|
|
this.session.out.write((httpHeader.CONTENT_LENGTH + ": 0\r\n").getBytes());
|
|
|
|
|
this.session.out.write("\r\n".getBytes());
|
|
|
|
|
return false;
|
|
|
|
|
// if (!this.proxyAccountBase64MD5.equals(serverCodings.encodeMD5Hex(auth.trim().substring(6)))) {
|
|
|
|
|
// // ask for authenticate
|
|
|
|
|
// this.session.out.write((httpVersion + " 407 Proxy Authentication Required" + serverCore.crlfString +
|
|
|
|
|
// httpHeader.PROXY_AUTHENTICATE + ": Basic realm=\"log-in\"" + serverCore.crlfString).getBytes());
|
|
|
|
|
// this.session.out.write((httpHeader.CONTENT_LENGTH + ": 0\r\n").getBytes());
|
|
|
|
|
// this.session.out.write("\r\n".getBytes());
|
|
|
|
|
// return false;
|
|
|
|
|
// }
|
|
|
|
|
}else{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
//return false; //UNREACHABLE
|
|
|
|
|
if (!this.proxyAccountBase64MD5.equals(serverCodings.encodeMD5Hex(auth.trim().substring(6)))) {
|
|
|
|
|
// ask for authenticate
|
|
|
|
|
this.session.out.write((httpVersion + " 407 Proxy Authentication Required" + serverCore.crlfString +
|
|
|
|
|
httpHeader.PROXY_AUTHENTICATE + ": Basic realm=\"log-in\"" + serverCore.crlfString).getBytes());
|
|
|
|
|
this.session.out.write((httpHeader.CONTENT_LENGTH + ": 0\r\n").getBytes());
|
|
|
|
|
this.session.out.write("\r\n".getBytes());
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Boolean UNKNOWN(String requestLine) throws IOException {
|
|
|
|
|