package net.yacy.interaction; import java.io.IOException; import java.net.MalformedURLException; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; import net.yacy.cora.document.UTF8; import net.yacy.cora.lod.JenaTripleStore; import net.yacy.cora.protocol.HeaderFramework; import net.yacy.cora.protocol.RequestHeader; import net.yacy.cora.protocol.http.HTTPClient; import net.yacy.kelondro.blob.Tables.Row; import net.yacy.kelondro.data.meta.DigestURI; import net.yacy.kelondro.index.RowSpaceExceededException; import net.yacy.kelondro.logging.Log; import net.yacy.peers.Seed; import net.yacy.search.Switchboard; import org.apache.http.entity.mime.content.ContentBody; import com.hp.hpl.jena.rdf.model.Property; import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.rdf.model.StmtIterator; import de.anomic.data.UserDB; public class Interaction { // public static String GetInteractionData (String url) { // // // // Fetch information from external sciencenet server // // // TODO: Use internal database // // Log.logInfo("INTERACTION", "GetInteractionData: "+url); // try { // return (UTF8.String(new HTTPClient().GETbytes("http://sciencenet.kit.edu/GetDomainInfoJSON?DomainURL="+url))); // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // return ""; // } // // } public static String GetLoggedOnUser (RequestHeader requestHeader) { UserDB.Entry entry = null; String result = "anonymous"; entry = Switchboard.getSwitchboard().userDB.proxyAuth((requestHeader.get(RequestHeader.AUTHORIZATION, "xxxxxx"))); if(entry != null){ }else{ entry=Switchboard.getSwitchboard().userDB.cookieAuth(requestHeader.getHeaderCookies()); if(entry == null){ entry=Switchboard.getSwitchboard().userDB.ipAuth((requestHeader.get(HeaderFramework.CONNECTION_PROP_CLIENTIP, "xxxxxx"))); if(entry != null){ } } } //identified via userDB if(entry != null){ return entry.getUserName(); }else if(Switchboard.getSwitchboard().verifyAuthentication(requestHeader)){ return "staticadmin"; } return ""; } public static Set GetUsers() { Set res = new HashSet(); UserDB.Entry entry = null; final Iterator it = Switchboard.getSwitchboard().userDB.iterator(true); while (it.hasNext()) { entry = it.next(); if (entry == null) { continue; } res.add (entry.getUserName()); } return res; } public static String GetDomain (String url) { String domain = url; try { DigestURI uri = new DigestURI (url); domain = uri.getHost(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return domain; } // public static boolean IsInBookmarks (String domain) { // // // // TODO: Check if this bookmark exists // // Boolean result = false; // // DigestURI uri; // try { // uri = new DigestURI (domain); // // Bookmark b = Switchboard.getSwitchboard().bookmarksDB.getBookmark(UTF8.String(uri.hash())); // // if (!(b == null)) { // result = true; // } // // // } catch (MalformedURLException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // // return result; // // } // public static boolean SaveDomainVote (String domain, String vote) { // // // // TODO: Check if this bookmark exists // // Boolean result = false; // // DigestURI uri; // try { // uri = new DigestURI (domain); // // Bookmark b = Switchboard.getSwitchboard().bookmarksDB.getBookmark(UTF8.String(uri.hash())); // // if (!(b == null)) { // b.addTag(vote); // Switchboard.getSwitchboard().bookmarksDB.saveBookmark(b); // } else { // Bookmark b2 = Switchboard.getSwitchboard().bookmarksDB.createBookmark(domain, "admin"); // // b2.addTag(vote); // // Switchboard.getSwitchboard().bookmarksDB.saveBookmark(b2); // } // // // } catch (MalformedURLException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // // return result; // // } // public static boolean DomainWhite (String domain, String username) { // // // // Add userinteraction // // Boolean result = false; // //// Bookmark b = Interaction.Suggest(domain, username); //// //// // // // return result; // // } // public static Usercontribution DoUsercontribution(String domain, String uc, // String username) { // // final Switchboard sb = Switchboard.getSwitchboard(); // // Boolean existing = false; // // if (username == "") { // username = "anonymous"; // } // // Usercontribution result = null; // // if (!existing) { // // Boolean reject = false; // // // // // // count elements // Iterator it = sb.usercontributionsDB.getFeedbackitemsIterator(true); // // int count = 0; // while(it.hasNext()) { // it.next(); // count++; // } // // // if (count > 500) { // if (username.equals("crawlbot")) { // reject = true; // } // // } // // if (!reject) { // // try { // // Usercontribution new_uc = Switchboard.getSwitchboard().usercontributionsDB // .createUsercontribution(UUID.randomUUID().toString(), // username); // if (username.equals("anonymous")) { // new_uc.setPublic(true); // } else { // new_uc.setPublic(false); // } // // new_uc.setProperty(Usercontribution.feedbackitem_TITLE, username); // new_uc.setProperty(Usercontribution.feedbackitem_DESCRIPTION, uc); // new_uc.setProperty(Usercontribution.feedbackitem_TARGET, new DigestURI(domain).toNormalform(false, false)); // // Switchboard.getSwitchboard().usercontributionsDB // .saveUsercontribution(new_uc); // // result = new_uc; // // } catch (MalformedURLException e) { // // } // } // // } // // return result; // // } //public static String GetURLHash (String url) { // // // // TODO: Check if this bookmark exists // // String result = ""; // // DigestURI uri; // try { // uri = new DigestURI (url); // // result = UTF8.String(uri.hash()); // // // // } catch (MalformedURLException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // // return result; // // } public static String Suggest (String url, String username) { final Switchboard sb = Switchboard.getSwitchboard(); if (username == "") { username = "anonymous"; } Boolean processlocal = false; if (!sb.getConfig("interaction.suggest.accumulationpeer", "").equals("")) { if (sb.getConfig("interaction.suggest.accumulationpeer", "").equals(sb.peers.myName())) { // Our peer is meant to process the suggestion. processlocal = true; } else { // Forward suggestion to other peer Log.logInfo("INTERACTION", "Forwarding suggestion to "+sb.getConfig("interaction.suggest.accumulationpeer", "")+": " + url); try { Seed host = sb.peers.lookupByName(sb.getConfig("interaction.suggest.accumulationpeer", "")); return (UTF8.String(new HTTPClient().POSTbytes( "http://"+host.getPublicAddress()+"/interaction/Suggest.json" + "?url=" + url + "&username=" + username, new HashMap(), false))); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } if (processlocal) { final String date = String.valueOf(System.currentTimeMillis()); final Map map = new HashMap(); map.put("url", url.getBytes()); map.put("username", username.getBytes()); map.put("status", "new".getBytes()); map.put("timestamp_creation", date.getBytes()); try { sb.tables.insert("suggestion", map); } catch (final IOException e) { Log.logException(e); } catch (RowSpaceExceededException e) { // TODO Auto-generated catch block e.printStackTrace(); } // TODO: Remove the following part for future use Log.logInfo("INTERACTION", "Forwarding suggestion to bk: " + url); try { String reply = (UTF8.String(new HTTPClient().POSTbytes( "http://hwiki.fzk.de/jss/SiteBookmark?suggestUrl=" + url+"&username="+username, new HashMap(), false))); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return ""; } public static String Feedback(String url, String comment, String from, String peer) { final Switchboard sb = Switchboard.getSwitchboard(); if (peer == "") { peer = sb.peers.myName(); } Boolean processlocal = false; if (!sb.getConfig("interaction.feedback.accumulationpeer", "").equals("")) { if (sb.getConfig("interaction.feedback.accumulationpeer", "").equals(sb.peers.myName())) { // Our peer is meant to process the feedback. processlocal = true; } else { // Forward feedback to other peer Log.logInfo("INTERACTION", "Forwarding feedback to "+sb.getConfig("interaction.feedback.accumulationpeer", "")+": " + url + ": " + comment); try { Seed host = sb.peers.lookupByName(sb.getConfig("interaction.feedback.accumulationpeer", "")); return (UTF8.String(new HTTPClient().POSTbytes( "http://"+host.getPublicAddress()+"/interaction/Feedback.json" + "?url=" + url + "&comment=" + comment + "&from=" + from + "&peer=" + peer, new HashMap(), false))); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return ""; } } } if (processlocal) { final String date = String.valueOf(System.currentTimeMillis()); final Map map = new HashMap(); map.put("url", url.getBytes()); map.put("username", from.getBytes()); map.put("peer", peer.getBytes()); map.put("status", "new".getBytes()); map.put("comment", comment.getBytes()); map.put("timestamp_creation", date.getBytes()); try { sb.tables.insert("feedback", map); } catch (final IOException e) { Log.logException(e); } catch (RowSpaceExceededException e) { // TODO Auto-generated catch block e.printStackTrace(); } // TODO: Remove the following part for future use try { return (UTF8.String(new HTTPClient().POSTbytes( "http://sciencenet.kit.edu/Feedback?Url=" + url + "&Comment=" + comment + "&From=" + from + "&Peer=" + peer, new HashMap(), false))); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return ""; } } return ""; } public static String Contribution(String url, String value, String username, String peer) { return Tableentry(url, "comment", value, username, peer); } public static String GetTableentry(String url, String type, String username, String peer) { final Switchboard sb = Switchboard.getSwitchboard(); String retvalue = ""; try { Iterator it = sb.tables.iterator(username+"_contribution", "url", url.getBytes()); Log.logInfo ("TABLE", "GET "+username+" / "+url+" - "+type+" ..."); it = sb.tables.orderBy(it, -1, "timestamp_creation").iterator(); while (it.hasNext()) { Row r = it.next(); if (r.get("type", "").equals (type)) { retvalue = r.get("value", ""); } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.logInfo ("TABLE", "GET "+username+" / "+url+" - "+type+" - "+retvalue); return retvalue; } public static String Tableentry(String url, String type, String comment, String from, String peer) { final Switchboard sb = Switchboard.getSwitchboard(); if (peer == "") { peer = sb.peers.myName(); } Boolean processlocal = false; Log.logInfo ("TABLE", "PUT "+from+" / "+url+" - "+type+" - "+comment); if (!sb.getConfig("interaction.contribution.accumulationpeer", "").equals("")) { if (sb.getConfig("interaction.contribution.accumulationpeer", "").equals(sb.peers.myName())) { // Our peer is meant to process the feedback. processlocal = true; } else { // Forward feedback to other peer Log.logInfo("INTERACTION", "Forwarding contribution to "+sb.getConfig("interaction.contribution.accumulationpeer", "")+": " + url + ": " + comment); try { Seed host = sb.peers.lookupByName(sb.getConfig("interaction.contribution.accumulationpeer", "")); return (UTF8.String(new HTTPClient().POSTbytes( "http://"+host.getPublicAddress()+"/interaction/Contribution.json" + "?url=" + url + "&comment=" + comment + "&from=" + from + "&peer=" + peer, new HashMap(), false))); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return ""; } } } else { // No forward defined processlocal = true; } if (processlocal) { final String date = String.valueOf(System.currentTimeMillis()); final Map map = new HashMap(); map.put("url", url.getBytes()); map.put("username", from.getBytes()); map.put("peer", peer.getBytes()); map.put("status", "new".getBytes()); map.put("type", type.getBytes()); map.put("value", comment.getBytes()); map.put("timestamp_creation", date.getBytes()); try { sb.tables.insert(from+"_contribution", map); } catch (final IOException e) { Log.logException(e); } catch (RowSpaceExceededException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return ""; } public static String Triple(String url, String s, String p, String o) { return Triple (url, s, p, o, ""); } public static String Triple(String url, String s, String p, String o, String username) { if (username != "") { username = "/"+username; } Resource r = JenaTripleStore.getResource(s+username); Property pr = JenaTripleStore.getProperty(p); JenaTripleStore.model.removeAll(r, pr, (Resource) null); r.addProperty(pr, o); Log.logInfo ("TRIPLElSTORE", "PUT "+username+" / "+s+" - "+p+" - "+o); return ""; } public static String TripleGet(String s, String p) { return TripleGet (s, p, ""); } public static String TripleGet(String s, String p, String username) { if (username != "") { username = "/"+username; } Resource r = JenaTripleStore.getResource(s+username); Property pr = JenaTripleStore.getProperty(p); StmtIterator iter = JenaTripleStore.model.listStatements(r, pr, (Resource) null); Log.logInfo ("TRIPLESTORE", "GET "+username+" / "+s+" - "+p+" ... "); while (iter.hasNext()) { String obj = iter.nextStatement().getObject().toString(); Log.logInfo ("TRIPLESTORE", "GET "+username+" / "+s+" - "+p+" - "+obj); return (obj); } return ""; } public static String GetContribution(String url) { final Switchboard sb = Switchboard.getSwitchboard(); // Boolean processlocal = false; // // if (!sb.getConfig("interaction.contribution.accumulationpeer", "").equals("")) { // // if (sb.getConfig("interaction.contribution.accumulationpeer", "").equals(sb.peers.myName())) { // // // Our peer is meant to process the feedback. // processlocal = true; // // } else { // // // Forward feedback to other peer // Log.logInfo("INTERACTION", "Fetching contribution from "+sb.getConfig("interaction.contribution.accumulationpeer", "")+": " + url); // // try { // // Seed host = sb.peers.lookupByName(sb.getConfig("interaction.contribution.accumulationpeer", "")); // // return (UTF8.String(new HTTPClient().POSTbytes( // "http://"+host.getPublicAddress()+"/interaction/Contribution.json" // + "?url=" + url + "&comment=" + comment // + "&from=" + from + "&peer=" + peer, // new HashMap(), false))); // // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // // return ""; // } // } // } else { // // No forward defined // processlocal = true; // } // // if (processlocal) { // // final String date = String.valueOf(System.currentTimeMillis()); // // final Map map = new HashMap(); // // map.put("url", url.getBytes()); // map.put("username", from.getBytes()); // map.put("peer", peer.getBytes()); // map.put("status", "new".getBytes()); // map.put("comment", comment.getBytes()); // map.put("timestamp_creation", date.getBytes()); // // try { // sb.tables.insert("contribution", map); // } catch (final IOException e) { // Log.logException(e); // } catch (RowSpaceExceededException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } return ""; } //public static void Usertracking(String url) { // // final Switchboard sb = Switchboard.getSwitchboard(); // // Log.logInfo("INTERACTION", "Usertracking "+url); // // // // TOUCH: HIT +1 TO THE DOMAIN ENTRY // // try { // sb.addToIndex(new DigestURI(new DigestURI(url).getHost()), null, null); // sb.addToIndex(new DigestURI(url), null, null); // } catch (MalformedURLException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (Failure e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // //} }