// sharedBlacklist_p.java // ----------------------- // part of the AnomicHTTPProxy // (C) by Michael Peter Christen; mc@anomic.de // first published on http://www.anomic.de // Frankfurt, Germany, 2004 // // This File is contributed by Alexander Schier // last change: 04.07.2004 // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // Using this software in any meaning (reading, learning, copying, compiling, // running) means that you agree that the Author(s) is (are) not responsible // for cost, loss of data or any harm that may be caused directly or indirectly // by usage of this softare or this documentation. The usage of this software // is on your own risk. The installation and usage (starting/running) of this // software may allow other people or application to access your computer and // any attached devices and is highly dependent on the configuration of the // software which must be done by the user of the software; the author(s) is // (are) also not responsible for proper configuration and usage of the // software, even if provoked by documentation provided together with // the software. // // Any changes to this file according to the GPL as documented in the file // gpl.txt aside this file in the shipment you received can be done to the // lines that follows this copyright notice here, but changes must not be // done inside the copyright notive above. A re-distribution must contain // the intact and unchanged copyright notice. // Contributions and changes to the program code must be marked as such. // You must compile this file with // javac -classpath .:../Classes Blacklist_p.java // if the shell's current path is HTROOT import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; import java.util.HashSet; import de.anomic.http.httpHeader; import de.anomic.http.httpc; import de.anomic.plasma.plasmaSwitchboard; import de.anomic.server.serverCore; import de.anomic.server.serverObjects; import de.anomic.server.serverSwitch; import de.anomic.yacy.yacyCore; import de.anomic.yacy.yacySeed; public class sharedBlacklist_p { public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch env) { // return variable that accumulates replacements serverObjects prop = new serverObjects(); plasmaSwitchboard switchboard = (plasmaSwitchboard) env; File listsPath = new File(switchboard.getRootPath(), env.getConfig("listsPath", "DATA/LISTS")); String filename = ""; String line = ""; String out = ""; HashSet Blacklist = new HashSet(); ArrayList otherBlacklist = new ArrayList(); int num = 0; int i = 0; //loop-var int count = 0; String IP = "127.0.0.1"; //should be replaced later String Port = "8080"; //aua! String Name = ""; String Hash = ""; String address = ""; if( post != null && post.containsKey("filename") ){ filename = (String)post.get("filename"); }else{ filename = "shared.black"; } BufferedReader br = null; try{ //Read the List br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(listsPath, filename)))); while((line = br.readLine()) != null){ if(! (line.startsWith("#") || line.equals("")) ){ Blacklist.add(line); out += line + serverCore.crlfString; } } br.close(); }catch(IOException e){} finally { if (br!=null) try{br.close(); br=null;}catch(Exception e){} } prop.put("page", 0); //checkbox list if( post != null && post.containsKey("hash") ){ //Step 1: retrieve the Items Hash = (String) post.get("hash"); prop.put("status", 3);//YaCy-Peer not found prop.put("status_name", Name); yacySeed seed; if( yacyCore.seedDB != null ){ //no nullpointer error.. Enumeration e = yacyCore.seedDB.seedsConnected(true, false, null); while (e.hasMoreElements()) { seed = (yacySeed) e.nextElement(); if (seed != null && seed.hash.equals(Hash) ) { IP = seed.get("IP", "127.0.0.1"); Port = seed.get("Port", "8080"); Name = (String) seed.get("Name", "<" + IP + ":" + Port + ">"); prop.put("status", 0);//nothing }else{ //status = "No Seed found"; //wrong? The Name not known? } } } //DEBUG //IP = "217.234.127.107"; //Port = "8080"; //Name = "RootServer"; //Make Adresse address = "http://" + IP + ":" + Port + "/yacy/list.html?col=black"; try { otherBlacklist = httpc.wget(new URL(address), 6000, null, null, switchboard.remoteProxyHost, switchboard.remoteProxyPort); //get List } catch (Exception e) {} //Make HTML-Optionlist with retrieved items for(i = 0; i <= (otherBlacklist.size() -1); i++){ String tmp = (String) otherBlacklist.get(i); if( !Blacklist.contains(tmp) && (!tmp.equals("")) ){ //newBlacklist.add(tmp); count++; prop.put("page_urllist_"+(count-1)+"_name", Name); prop.put("page_urllist_"+(count-1)+"_url", tmp); prop.put("page_urllist_"+(count-1)+"_count", count); } } prop.put("page_urllist", (count)); //write the list try{ BufferedWriter bw = new BufferedWriter(new PrintWriter(new FileWriter(new File(listsPath, filename)))); bw.write(out); bw.close(); }catch(IOException e){} }else if( post != null && post.containsKey("url") ){ //load from URL address = (String)post.get("url"); prop.put("status", 4); prop.put("status_address", address); //Name = " "; //No Name Name = address; try { otherBlacklist = httpc.wget(new URL(address), 6000, null, null, switchboard.remoteProxyHost, switchboard.remoteProxyPort); //get List } catch (Exception e) {} prop.put("status", 0); //TODO: check if the wget failed... //Make HTML-Optionlist with retrieved items for(i = 0; i <= (otherBlacklist.size() -1); i++){ String tmp = (String) otherBlacklist.get(i); if( !Blacklist.contains(tmp) && (!tmp.equals("")) && (!tmp.startsWith("#")) ){ //This List may contain comments. //newBlacklist.add(tmp); count++; prop.put("page_urllist_"+(count-1)+"_name", Name); prop.put("page_urllist_"+(count-1)+"_url", tmp); prop.put("page_urllist_"+(count-1)+"_count", count); } } prop.put("page_urllist", (count)); }else if( post != null && post.containsKey("file") ){ try{ //Read the List br = new BufferedReader(new InputStreamReader(new FileInputStream( (String)post.get("file") ))); while((line = br.readLine()) != null){ if(! (line.startsWith("#") || line.equals("")) ){ otherBlacklist.add(line); } } br.close(); }catch(IOException e){ prop.put("status", 2); //File Error } finally { if (br != null) try {br.close(); br = null; } catch (Exception e){} } Name = (String)post.get("file"); //Make HTML-Optionlist with retrieved items for(i = 0; i <= (otherBlacklist.size() -1); i++){ String tmp = (String) otherBlacklist.get(i); if( !Blacklist.contains(tmp) && (!tmp.equals("")) && (!tmp.startsWith("#")) ){ //This List may contain comments. //newBlacklist.add(tmp); count++; prop.put("page_urllist_"+(count-1)+"_name", Name); prop.put("page_urllist_"+(count-1)+"_url", tmp); prop.put("page_urllist_"+(count-1)+"_count", count); } } prop.put("page_urllist", (count)); }else if( post != null && post.containsKey("add") ){ //Step 2: Add the Items prop.put("page", 1); //result page num = Integer.parseInt( (String)post.get("num") ); prop.put("status", 1); //list of added Entries count = 0;//couter of added entries for(i=1;i <= num; i++){ //count/num starts with 1! if( post.containsKey( String.valueOf(i) ) ){ String newItem = (String)post.get( String.valueOf(i) ); //This should not be needed... if ( newItem.startsWith("http://") ){ newItem = newItem.substring(7); } // separate the newItem into host and path int pos = newItem.indexOf("/"); if (pos < 0) { // add default empty path pattern pos = newItem.length(); newItem = newItem + "/.*"; } out += newItem+"\n"; prop.put("status_list_"+count+"_entry", newItem); count++; if (switchboard.urlBlacklist != null) switchboard.urlBlacklist.add(newItem.substring(0, pos), newItem.substring(pos + 1)); //write the list try{ BufferedWriter bw = new BufferedWriter(new PrintWriter(new FileWriter(new File(listsPath, filename)))); bw.write(out); bw.close(); }catch(IOException e){} }else{ } } prop.put("status_list", count); }else{ prop.put("status", 5);//Wrong Invokation } prop.put("filename", filename); prop.put("page_name", Name); prop.put("num", String.valueOf(count)); return prop; } }