From a4b747fe970f402d978c1c42827ee72e1d03932d Mon Sep 17 00:00:00 2001 From: allo Date: Mon, 3 Oct 2005 14:26:08 +0000 Subject: [PATCH] ProxyAccounts based on userDB git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@841 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- source/de/anomic/http/httpd.java | 51 ++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/source/de/anomic/http/httpd.java b/source/de/anomic/http/httpd.java index af5656f60..f4841c596 100644 --- a/source/de/anomic/http/httpd.java +++ b/source/de/anomic/http/httpd.java @@ -62,6 +62,7 @@ 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; @@ -72,6 +73,8 @@ 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; /** @@ -101,7 +104,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 serverSwitch switchboard = null; + private static plasmaSwitchboard switchboard = null; private static String virtualHost = null; public static boolean keepAliveSupport = false; @@ -125,11 +128,13 @@ 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 = s; + httpd.switchboard = (plasmaSwitchboard)s; this.fileHandler = fileHandler; this.proxyHandler = proxyHandler; httpd.virtualHost = switchboard.getConfig("fileHost","localhost"); @@ -305,18 +310,38 @@ public final class httpd implements serverHandler { if (this.proxyAccountBase64MD5 == null) this.proxyAccountBase64MD5 = switchboard.getConfig("proxyAccountBase64MD5", ""); - if (this.proxyAccountBase64MD5.length() > 0) { + if (this.proxyAccountBase64MD5.length() > 0) { //TODO replace with a simple switch String auth = (String) header.get(httpHeader.PROXY_AUTHORIZATION,"xxxxxx"); - 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; + 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 } public Boolean UNKNOWN(String requestLine) throws IOException {