diff --git a/.classpath b/.classpath index c36811f6e..e3ddd58fa 100644 --- a/.classpath +++ b/.classpath @@ -32,14 +32,14 @@ - + - - + + @@ -64,26 +64,26 @@ - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/build.xml b/build.xml index 5195f29eb..07228fa83 100644 --- a/build.xml +++ b/build.xml @@ -183,7 +183,7 @@ - + @@ -222,41 +222,41 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - + - - + + - + diff --git a/defaults/yacy.init b/defaults/yacy.init index 357dd83ca..479626e61 100644 --- a/defaults/yacy.init +++ b/defaults/yacy.init @@ -1169,7 +1169,7 @@ content.phpbb3.dumpfile = # search engine teaser: an about box in search results # this is only shown, if the about.body is filled about.headline=Please support YaCy! -about.body=
If you run a YaCy server, feel free to replace our donation plea with your own support message, use the Portal Configuration servlet.
+about.body=
If you run a YaCy server, feel free to replace our donation plea with your own support message, use the Portal Configuration servlet.
donation.iframesource=http://yacy.net/include/donate.html donation.iframetarget=env/donate.html diff --git a/htroot/ConfigAppearance_p.html b/htroot/ConfigAppearance_p.html index c79d626c0..65f4e5f88 100644 --- a/htroot/ConfigAppearance_p.html +++ b/htroot/ConfigAppearance_p.html @@ -31,7 +31,7 @@

You can change the appearance of the YaCy interface with skins. The selected skin and language also affects the appearance of the search page. - If you create a search portal with YaCy then you can + If you create a search portal with YaCy then you can change the appearance of the search page here.

diff --git a/htroot/ConfigPortal.java b/htroot/ConfigPortal.java index 9362d20f6..adeb9ab7c 100644 --- a/htroot/ConfigPortal.java +++ b/htroot/ConfigPortal.java @@ -25,210 +25,22 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.net.MalformedURLException; -import java.util.Properties; - -import net.yacy.cora.document.id.DigestURL; import net.yacy.cora.protocol.RequestHeader; -import net.yacy.cora.util.ConcurrentLog; -import net.yacy.data.WorkTables; -import net.yacy.http.servlets.YaCyDefaultServlet; -import net.yacy.search.Switchboard; -import net.yacy.search.SwitchboardConstants; import net.yacy.server.serverObjects; import net.yacy.server.serverSwitch; -import net.yacy.server.http.HTTPDFileHandler; +/** + * @deprecated use now {@link ConfigPortal_p} + */ +@Deprecated public class ConfigPortal { - public static serverObjects respond(final RequestHeader header, final serverObjects post, final serverSwitch env) { + @SuppressWarnings("unused") + public static serverObjects respond(final RequestHeader header, final serverObjects post, final serverSwitch env) { final serverObjects prop = new serverObjects(); - final Switchboard sb = (Switchboard) env; - - if (post != null) { - // AUTHENTICATE - if (!sb.verifyAuthentication(header)) { - // force log-in - prop.authenticationRequired(); - return prop; - } - - if (post.containsKey("popup")) { - final String popup = post.get("popup", "status"); - if ("front".equals(popup)) { - sb.setConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, "index.html"); - } else if ("search".equals(popup)) { - sb.setConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, "yacysearch.html"); - } else if ("interactive".equals(popup)) { - sb.setConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, "yacyinteractive.html"); - } else { - sb.setConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, "Status.html"); - } - sb.setConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, sb.getConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, "index.html")); - HTTPDFileHandler.initDefaultPath(); - } - if (post.containsKey("searchpage_set")) { - final String newGreeting = post.get(SwitchboardConstants.GREETING, ""); - // store this call as api call - sb.tables.recordAPICall(post, "ConfigPortal.html", WorkTables.TABLE_API_TYPE_CONFIGURATION, "new portal design. greeting: " + newGreeting); - - sb.setConfig(SwitchboardConstants.GREETING, newGreeting); - sb.setConfig(SwitchboardConstants.GREETING_HOMEPAGE, post.get(SwitchboardConstants.GREETING_HOMEPAGE, "")); - sb.setConfig(SwitchboardConstants.GREETING_LARGE_IMAGE, post.get(SwitchboardConstants.GREETING_LARGE_IMAGE, "")); - sb.setConfig(SwitchboardConstants.GREETING_SMALL_IMAGE, post.get(SwitchboardConstants.GREETING_SMALL_IMAGE, "")); - sb.setConfig(SwitchboardConstants.GREETING_IMAGE_ALT, post.get(SwitchboardConstants.GREETING_IMAGE_ALT, "")); - sb.setConfig(SwitchboardConstants.SEARCH_TARGET_DEFAULT, post.get("target", "_self")); - sb.setConfig(SwitchboardConstants.SEARCH_TARGET_SPECIAL, post.get("target_special", "_self")); - sb.setConfig(SwitchboardConstants.SEARCH_TARGET_SPECIAL_PATTERN, post.get("target_special_pattern", "_self")); - sb.setConfig(SwitchboardConstants.SEARCH_ITEMS, post.getInt("maximumRecords", 10)); - sb.setConfig(SwitchboardConstants.INDEX_FORWARD, post.get(SwitchboardConstants.INDEX_FORWARD, "")); - HTTPDFileHandler.indexForward = post.get(SwitchboardConstants.INDEX_FORWARD, ""); - sb.setConfig("publicTopmenu", !post.containsKey("publicTopmenu") || post.getBoolean("publicTopmenu")); - sb.setConfig(SwitchboardConstants.PUBLIC_SEARCHPAGE, !post.containsKey(SwitchboardConstants.PUBLIC_SEARCHPAGE) || post.getBoolean(SwitchboardConstants.PUBLIC_SEARCHPAGE)); - sb.setConfig("search.options", post.getBoolean("search.options")); - - sb.setConfig(SwitchboardConstants.GREEDYLEARNING_ACTIVE, post.getBoolean(SwitchboardConstants.GREEDYLEARNING_ACTIVE)); - - final boolean storeresult = post.getBoolean(SwitchboardConstants.REMOTESEARCH_RESULT_STORE); - sb.setConfig(SwitchboardConstants.REMOTESEARCH_RESULT_STORE, storeresult); - sb.setConfig(SwitchboardConstants.REMOTESEARCH_RESULT_STORE_MAXSIZE, post.getLong(SwitchboardConstants.REMOTESEARCH_RESULT_STORE_MAXSIZE, -1)); - - sb.setConfig(SwitchboardConstants.SEARCH_VERIFY, post.get("search.verify", "ifexist")); - sb.setConfig(SwitchboardConstants.SEARCH_VERIFY_DELETE, post.getBoolean("search.verify.delete")); - - sb.setConfig("about.headline", post.get("about.headline", "")); - sb.setConfig("about.body", post.get("about.body", "")); - - String excludehosts = post.get("search.excludehosts", ""); - sb.setConfig("search.excludehosts", excludehosts); - try { - sb.setConfig("search.excludehosth", DigestURL.hosthashes(excludehosts)); - } catch (MalformedURLException e) { - ConcurrentLog.logException(e); - sb.setConfig("search.excludehosth", ""); - } - } - if (post.containsKey("searchpage_default")) { - // load defaults from defaults/yacy.init file - final Properties config = new Properties(); - final String mes = "ConfigPortal"; - FileInputStream fis = null; - try { - fis = new FileInputStream(new File(sb.appPath, "defaults/yacy.init")); - config.load(fis); - } catch (final FileNotFoundException e) { - ConcurrentLog.severe(mes, "could not find configuration file."); - return prop; - } catch (final IOException e) { - ConcurrentLog.severe(mes, "could not read configuration file."); - return prop; - } finally { - if (fis != null) { - try { - fis.close(); - } catch (final IOException e) { - ConcurrentLog.logException(e); - } - } - } - sb.setConfig(SwitchboardConstants.GREETING, config.getProperty(SwitchboardConstants.GREETING,"P2P Web Search")); - sb.setConfig(SwitchboardConstants.GREETING_HOMEPAGE, config.getProperty(SwitchboardConstants.GREETING_HOMEPAGE,"http://yacy.net")); - sb.setConfig(SwitchboardConstants.GREETING_LARGE_IMAGE, config.getProperty(SwitchboardConstants.GREETING_LARGE_IMAGE,"env/grafics/YaCyLogo_120ppi.png")); - sb.setConfig(SwitchboardConstants.GREETING_SMALL_IMAGE, config.getProperty(SwitchboardConstants.GREETING_SMALL_IMAGE,"env/grafics/YaCyLogo_60ppi.png")); - sb.setConfig(SwitchboardConstants.GREETING_IMAGE_ALT, config.getProperty(SwitchboardConstants.GREETING_IMAGE_ALT,"YaCy project web site")); - sb.setConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, config.getProperty(SwitchboardConstants.BROWSER_POP_UP_PAGE,"Status.html")); - sb.setConfig(SwitchboardConstants.INDEX_FORWARD, config.getProperty(SwitchboardConstants.INDEX_FORWARD,"")); - HTTPDFileHandler.indexForward = ""; - sb.setConfig(SwitchboardConstants.SEARCH_TARGET_DEFAULT, config.getProperty(SwitchboardConstants.SEARCH_TARGET_DEFAULT,"_self")); - sb.setConfig(SwitchboardConstants.SEARCH_TARGET_SPECIAL, config.getProperty(SwitchboardConstants.SEARCH_TARGET_SPECIAL,"_self")); - sb.setConfig(SwitchboardConstants.SEARCH_TARGET_SPECIAL_PATTERN, config.getProperty(SwitchboardConstants.SEARCH_TARGET_SPECIAL_PATTERN,"")); - sb.setConfig("publicTopmenu", config.getProperty("publicTopmenu","true")); - sb.setConfig(SwitchboardConstants.PUBLIC_SEARCHPAGE, config.getProperty(SwitchboardConstants.PUBLIC_SEARCHPAGE,"true")); - sb.setConfig("search.navigation", config.getProperty("search.navigation","hosts,authors,namespace,topics")); - sb.setConfig("search.options", config.getProperty("search.options","true")); - sb.setConfig(SwitchboardConstants.GREEDYLEARNING_ACTIVE, config.getProperty(SwitchboardConstants.GREEDYLEARNING_ACTIVE)); - sb.setConfig(SwitchboardConstants.REMOTESEARCH_RESULT_STORE, config.getProperty(SwitchboardConstants.REMOTESEARCH_RESULT_STORE)); - sb.setConfig(SwitchboardConstants.REMOTESEARCH_RESULT_STORE_MAXSIZE, config.getProperty(SwitchboardConstants.REMOTESEARCH_RESULT_STORE_MAXSIZE)); - sb.setConfig(SwitchboardConstants.SEARCH_VERIFY, config.getProperty(SwitchboardConstants.SEARCH_VERIFY,"iffresh")); - sb.setConfig(SwitchboardConstants.SEARCH_VERIFY_DELETE, config.getProperty(SwitchboardConstants.SEARCH_VERIFY_DELETE,"true")); - sb.setConfig("about.headline", config.getProperty("about.headline","")); - sb.setConfig("about.body", config.getProperty("about.body","")); - sb.setConfig("search.excludehosts", config.getProperty("search.excludehosts","")); - sb.setConfig("search.excludehosth", config.getProperty("search.excludehosth","")); - } - } - - prop.putHTML(SwitchboardConstants.GREETING, sb.getConfig(SwitchboardConstants.GREETING, "")); - prop.putHTML(SwitchboardConstants.GREETING_HOMEPAGE, sb.getConfig(SwitchboardConstants.GREETING_HOMEPAGE, "")); - prop.putHTML(SwitchboardConstants.GREETING_LARGE_IMAGE, sb.getConfig(SwitchboardConstants.GREETING_LARGE_IMAGE, "")); - prop.putHTML(SwitchboardConstants.GREETING_SMALL_IMAGE, sb.getConfig(SwitchboardConstants.GREETING_SMALL_IMAGE, "")); - prop.putHTML(SwitchboardConstants.GREETING_IMAGE_ALT, sb.getConfig(SwitchboardConstants.GREETING_IMAGE_ALT, "")); - prop.putHTML(SwitchboardConstants.INDEX_FORWARD, sb.getConfig(SwitchboardConstants.INDEX_FORWARD, "")); - prop.put("publicTopmenu", sb.getConfigBool("publicTopmenu", false) ? 1 : 0); - prop.put(SwitchboardConstants.PUBLIC_SEARCHPAGE, sb.getConfigBool(SwitchboardConstants.PUBLIC_SEARCHPAGE, false) ? 1 : 0); - prop.put("search.options", sb.getConfigBool("search.options", false) ? 1 : 0); - - prop.put(SwitchboardConstants.GREEDYLEARNING_ACTIVE, sb.getConfigBool(SwitchboardConstants.GREEDYLEARNING_ACTIVE, false) ? 1 : 0); - prop.put(SwitchboardConstants.GREEDYLEARNING_LIMIT_DOCCOUNT, sb.getConfig(SwitchboardConstants.GREEDYLEARNING_LIMIT_DOCCOUNT, "0")); - - prop.put(SwitchboardConstants.REMOTESEARCH_RESULT_STORE, sb.getConfigBool(SwitchboardConstants.REMOTESEARCH_RESULT_STORE, true) ? 1 : 0); - long resultStoredMaxSize = sb.getConfigLong(SwitchboardConstants.REMOTESEARCH_RESULT_STORE_MAXSIZE, -1); - if(resultStoredMaxSize > 0) { - prop.put(SwitchboardConstants.REMOTESEARCH_RESULT_STORE_MAXSIZE, resultStoredMaxSize); - } else { - prop.put(SwitchboardConstants.REMOTESEARCH_RESULT_STORE_MAXSIZE, ""); - } - - prop.put("search.verify.nocache", sb.getConfig("search.verify", "").equals("nocache") ? 1 : 0); - prop.put("search.verify.iffresh", sb.getConfig("search.verify", "").equals("iffresh") ? 1 : 0); - prop.put("search.verify.ifexist", sb.getConfig("search.verify", "").equals("ifexist") ? 1 : 0); - prop.put("search.verify.cacheonly", sb.getConfig("search.verify", "").equals("cacheonly") ? 1 : 0); - prop.put("search.verify.false", sb.getConfig("search.verify", "").equals("false") ? 1 : 0); - prop.put("search.verify.delete", sb.getConfigBool(SwitchboardConstants.SEARCH_VERIFY_DELETE, true) ? 1 : 0); - - prop.put("about.headline", sb.getConfig("about.headline", "")); - prop.put("about.body", sb.getConfig("about.body", "")); - - prop.put("search.excludehosts", sb.getConfig("search.excludehosts", "")); - prop.put("search.excludehosth", sb.getConfig("search.excludehosth", "")); - - final String browserPopUpPage = sb.getConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, "ConfigBasic.html"); - prop.put("popupFront", 0); - prop.put("popupSearch", 0); - prop.put("popupInteractive", 0); - prop.put("popupStatus", 0); - if (browserPopUpPage.startsWith("index")) { - prop.put("popupFront", 1); - } else if (browserPopUpPage.startsWith("yacysearch")) { - prop.put("popupSearch", 1); - } else if (browserPopUpPage.startsWith("yacyinteractive")) { - prop.put("popupInteractive", 1); - } else { - prop.put("popupStatus", 1); - } - - prop.put("maximumRecords", sb.getConfigInt(SwitchboardConstants.SEARCH_ITEMS, 10)); - - final String target = sb.getConfig(SwitchboardConstants.SEARCH_TARGET_DEFAULT, "_self"); - prop.put("target_selected_blank", "_blank".equals(target) ? 1 : 0); - prop.put("target_selected_self", "_self".equals(target) ? 1 : 0); - prop.put("target_selected_parent", "_parent".equals(target) ? 1 : 0); - prop.put("target_selected_top", "_top".equals(target) ? 1 : 0); - prop.put("target_selected_searchresult", "searchresult".equals(target) ? 1 : 0); - - final String target_special = sb.getConfig(SwitchboardConstants.SEARCH_TARGET_SPECIAL, "_self"); - prop.put("target_selected_special_blank", "_blank".equals(target_special) ? 1 : 0); - prop.put("target_selected_special_self", "_self".equals(target_special) ? 1 : 0); - prop.put("target_selected_special_parent", "_parent".equals(target_special) ? 1 : 0); - prop.put("target_selected_special_top", "_top".equals(target_special) ? 1 : 0); - prop.put("target_selected_special_searchresult", "searchresult".equals(target_special) ? 1 : 0); - prop.put("target_special_pattern", sb.getConfig(SwitchboardConstants.SEARCH_TARGET_SPECIAL_PATTERN, "")); - prop.put("myContext", YaCyDefaultServlet.getContext(header, sb)); + /* Redirect to ConfigPortal_p */ + prop.put(serverObjects.ACTION_LOCATION, "ConfigPortal_p.html"); return prop; } diff --git a/htroot/ConfigPortal.html b/htroot/ConfigPortal_p.html similarity index 98% rename from htroot/ConfigPortal.html rename to htroot/ConfigPortal_p.html index 0938a4767..d0de8afaf 100644 --- a/htroot/ConfigPortal.html +++ b/htroot/ConfigPortal_p.html @@ -15,7 +15,8 @@ and a link to a home page that is reached when the 'corporate identity'-images are clicked. To change also colours and styles use the Appearance Servlet for different skins and languages.

-
+ +
Greeting Line
diff --git a/htroot/ConfigPortal_p.java b/htroot/ConfigPortal_p.java new file mode 100644 index 000000000..60576bebb --- /dev/null +++ b/htroot/ConfigPortal_p.java @@ -0,0 +1,235 @@ +// ConfigPortal_p.java +// ----------------------- +// part of YaCy +// (C) by Michael Peter Christen; mc@yacy.net +// first published on http://yacy.net +// Frankfurt, Germany, 4.7.2008 +// +//$LastChangedDate$ +//$LastChangedRevision$ +//$LastChangedBy$ +// +// LICENSE +// +// 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 + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.MalformedURLException; +import java.util.Properties; + +import net.yacy.cora.document.id.DigestURL; +import net.yacy.cora.protocol.RequestHeader; +import net.yacy.cora.util.ConcurrentLog; +import net.yacy.data.TransactionManager; +import net.yacy.data.WorkTables; +import net.yacy.http.servlets.YaCyDefaultServlet; +import net.yacy.search.Switchboard; +import net.yacy.search.SwitchboardConstants; +import net.yacy.server.serverObjects; +import net.yacy.server.serverSwitch; +import net.yacy.server.http.HTTPDFileHandler; + +public class ConfigPortal_p { + + public static serverObjects respond(final RequestHeader header, final serverObjects post, final serverSwitch env) { + final serverObjects prop = new serverObjects(); + final Switchboard sb = (Switchboard) env; + + if (post != null) { + /* Check this is a valid transaction */ + TransactionManager.checkPostTransaction(header, post); + + if (post.containsKey("popup")) { + final String popup = post.get("popup", "status"); + if ("front".equals(popup)) { + sb.setConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, "index.html"); + } else if ("search".equals(popup)) { + sb.setConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, "yacysearch.html"); + } else if ("interactive".equals(popup)) { + sb.setConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, "yacyinteractive.html"); + } else { + sb.setConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, "Status.html"); + } + sb.setConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, sb.getConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, "index.html")); + HTTPDFileHandler.initDefaultPath(); + } + if (post.containsKey("searchpage_set")) { + final String newGreeting = post.get(SwitchboardConstants.GREETING, ""); + // store this call as api call + sb.tables.recordAPICall(post, "ConfigPortal_p.html", WorkTables.TABLE_API_TYPE_CONFIGURATION, "new portal design. greeting: " + newGreeting); + + sb.setConfig(SwitchboardConstants.GREETING, newGreeting); + sb.setConfig(SwitchboardConstants.GREETING_HOMEPAGE, post.get(SwitchboardConstants.GREETING_HOMEPAGE, "")); + sb.setConfig(SwitchboardConstants.GREETING_LARGE_IMAGE, post.get(SwitchboardConstants.GREETING_LARGE_IMAGE, "")); + sb.setConfig(SwitchboardConstants.GREETING_SMALL_IMAGE, post.get(SwitchboardConstants.GREETING_SMALL_IMAGE, "")); + sb.setConfig(SwitchboardConstants.GREETING_IMAGE_ALT, post.get(SwitchboardConstants.GREETING_IMAGE_ALT, "")); + sb.setConfig(SwitchboardConstants.SEARCH_TARGET_DEFAULT, post.get("target", "_self")); + sb.setConfig(SwitchboardConstants.SEARCH_TARGET_SPECIAL, post.get("target_special", "_self")); + sb.setConfig(SwitchboardConstants.SEARCH_TARGET_SPECIAL_PATTERN, post.get("target_special_pattern", "_self")); + sb.setConfig(SwitchboardConstants.SEARCH_ITEMS, post.getInt("maximumRecords", 10)); + sb.setConfig(SwitchboardConstants.INDEX_FORWARD, post.get(SwitchboardConstants.INDEX_FORWARD, "")); + HTTPDFileHandler.indexForward = post.get(SwitchboardConstants.INDEX_FORWARD, ""); + sb.setConfig("publicTopmenu", !post.containsKey("publicTopmenu") || post.getBoolean("publicTopmenu")); + sb.setConfig(SwitchboardConstants.PUBLIC_SEARCHPAGE, !post.containsKey(SwitchboardConstants.PUBLIC_SEARCHPAGE) || post.getBoolean(SwitchboardConstants.PUBLIC_SEARCHPAGE)); + sb.setConfig("search.options", post.getBoolean("search.options")); + + sb.setConfig(SwitchboardConstants.GREEDYLEARNING_ACTIVE, post.getBoolean(SwitchboardConstants.GREEDYLEARNING_ACTIVE)); + + final boolean storeresult = post.getBoolean(SwitchboardConstants.REMOTESEARCH_RESULT_STORE); + sb.setConfig(SwitchboardConstants.REMOTESEARCH_RESULT_STORE, storeresult); + sb.setConfig(SwitchboardConstants.REMOTESEARCH_RESULT_STORE_MAXSIZE, post.getLong(SwitchboardConstants.REMOTESEARCH_RESULT_STORE_MAXSIZE, -1)); + + sb.setConfig(SwitchboardConstants.SEARCH_VERIFY, post.get("search.verify", "ifexist")); + sb.setConfig(SwitchboardConstants.SEARCH_VERIFY_DELETE, post.getBoolean("search.verify.delete")); + + sb.setConfig("about.headline", post.get("about.headline", "")); + sb.setConfig("about.body", post.get("about.body", "")); + + String excludehosts = post.get("search.excludehosts", ""); + sb.setConfig("search.excludehosts", excludehosts); + try { + sb.setConfig("search.excludehosth", DigestURL.hosthashes(excludehosts)); + } catch (MalformedURLException e) { + ConcurrentLog.logException(e); + sb.setConfig("search.excludehosth", ""); + } + } + if (post.containsKey("searchpage_default")) { + // load defaults from defaults/yacy.init file + final Properties config = new Properties(); + final String mes = "ConfigPortal"; + FileInputStream fis = null; + try { + fis = new FileInputStream(new File(sb.appPath, "defaults/yacy.init")); + config.load(fis); + } catch (final FileNotFoundException e) { + ConcurrentLog.severe(mes, "could not find configuration file."); + return prop; + } catch (final IOException e) { + ConcurrentLog.severe(mes, "could not read configuration file."); + return prop; + } finally { + if (fis != null) { + try { + fis.close(); + } catch (final IOException e) { + ConcurrentLog.logException(e); + } + } + } + sb.setConfig(SwitchboardConstants.GREETING, config.getProperty(SwitchboardConstants.GREETING,"P2P Web Search")); + sb.setConfig(SwitchboardConstants.GREETING_HOMEPAGE, config.getProperty(SwitchboardConstants.GREETING_HOMEPAGE,"http://yacy.net")); + sb.setConfig(SwitchboardConstants.GREETING_LARGE_IMAGE, config.getProperty(SwitchboardConstants.GREETING_LARGE_IMAGE,"env/grafics/YaCyLogo_120ppi.png")); + sb.setConfig(SwitchboardConstants.GREETING_SMALL_IMAGE, config.getProperty(SwitchboardConstants.GREETING_SMALL_IMAGE,"env/grafics/YaCyLogo_60ppi.png")); + sb.setConfig(SwitchboardConstants.GREETING_IMAGE_ALT, config.getProperty(SwitchboardConstants.GREETING_IMAGE_ALT,"YaCy project web site")); + sb.setConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, config.getProperty(SwitchboardConstants.BROWSER_POP_UP_PAGE,"Status.html")); + sb.setConfig(SwitchboardConstants.INDEX_FORWARD, config.getProperty(SwitchboardConstants.INDEX_FORWARD,"")); + HTTPDFileHandler.indexForward = ""; + sb.setConfig(SwitchboardConstants.SEARCH_TARGET_DEFAULT, config.getProperty(SwitchboardConstants.SEARCH_TARGET_DEFAULT,"_self")); + sb.setConfig(SwitchboardConstants.SEARCH_TARGET_SPECIAL, config.getProperty(SwitchboardConstants.SEARCH_TARGET_SPECIAL,"_self")); + sb.setConfig(SwitchboardConstants.SEARCH_TARGET_SPECIAL_PATTERN, config.getProperty(SwitchboardConstants.SEARCH_TARGET_SPECIAL_PATTERN,"")); + sb.setConfig("publicTopmenu", config.getProperty("publicTopmenu","true")); + sb.setConfig(SwitchboardConstants.PUBLIC_SEARCHPAGE, config.getProperty(SwitchboardConstants.PUBLIC_SEARCHPAGE,"true")); + sb.setConfig("search.navigation", config.getProperty("search.navigation","hosts,authors,namespace,topics")); + sb.setConfig("search.options", config.getProperty("search.options","true")); + sb.setConfig(SwitchboardConstants.GREEDYLEARNING_ACTIVE, config.getProperty(SwitchboardConstants.GREEDYLEARNING_ACTIVE)); + sb.setConfig(SwitchboardConstants.REMOTESEARCH_RESULT_STORE, config.getProperty(SwitchboardConstants.REMOTESEARCH_RESULT_STORE)); + sb.setConfig(SwitchboardConstants.REMOTESEARCH_RESULT_STORE_MAXSIZE, config.getProperty(SwitchboardConstants.REMOTESEARCH_RESULT_STORE_MAXSIZE)); + sb.setConfig(SwitchboardConstants.SEARCH_VERIFY, config.getProperty(SwitchboardConstants.SEARCH_VERIFY,"iffresh")); + sb.setConfig(SwitchboardConstants.SEARCH_VERIFY_DELETE, config.getProperty(SwitchboardConstants.SEARCH_VERIFY_DELETE,"true")); + sb.setConfig("about.headline", config.getProperty("about.headline","")); + sb.setConfig("about.body", config.getProperty("about.body","")); + sb.setConfig("search.excludehosts", config.getProperty("search.excludehosts","")); + sb.setConfig("search.excludehosth", config.getProperty("search.excludehosth","")); + } + } + + /* Acquire a transaction token for the next POST form submission */ + prop.put(TransactionManager.TRANSACTION_TOKEN_PARAM, TransactionManager.getTransactionToken(header)); + + prop.putHTML(SwitchboardConstants.GREETING, sb.getConfig(SwitchboardConstants.GREETING, "")); + prop.putHTML(SwitchboardConstants.GREETING_HOMEPAGE, sb.getConfig(SwitchboardConstants.GREETING_HOMEPAGE, "")); + prop.putHTML(SwitchboardConstants.GREETING_LARGE_IMAGE, sb.getConfig(SwitchboardConstants.GREETING_LARGE_IMAGE, "")); + prop.putHTML(SwitchboardConstants.GREETING_SMALL_IMAGE, sb.getConfig(SwitchboardConstants.GREETING_SMALL_IMAGE, "")); + prop.putHTML(SwitchboardConstants.GREETING_IMAGE_ALT, sb.getConfig(SwitchboardConstants.GREETING_IMAGE_ALT, "")); + prop.putHTML(SwitchboardConstants.INDEX_FORWARD, sb.getConfig(SwitchboardConstants.INDEX_FORWARD, "")); + prop.put("publicTopmenu", sb.getConfigBool("publicTopmenu", false) ? 1 : 0); + prop.put(SwitchboardConstants.PUBLIC_SEARCHPAGE, sb.getConfigBool(SwitchboardConstants.PUBLIC_SEARCHPAGE, false) ? 1 : 0); + prop.put("search.options", sb.getConfigBool("search.options", false) ? 1 : 0); + + prop.put(SwitchboardConstants.GREEDYLEARNING_ACTIVE, sb.getConfigBool(SwitchboardConstants.GREEDYLEARNING_ACTIVE, false) ? 1 : 0); + prop.put(SwitchboardConstants.GREEDYLEARNING_LIMIT_DOCCOUNT, sb.getConfig(SwitchboardConstants.GREEDYLEARNING_LIMIT_DOCCOUNT, "0")); + + prop.put(SwitchboardConstants.REMOTESEARCH_RESULT_STORE, sb.getConfigBool(SwitchboardConstants.REMOTESEARCH_RESULT_STORE, true) ? 1 : 0); + long resultStoredMaxSize = sb.getConfigLong(SwitchboardConstants.REMOTESEARCH_RESULT_STORE_MAXSIZE, -1); + if(resultStoredMaxSize > 0) { + prop.put(SwitchboardConstants.REMOTESEARCH_RESULT_STORE_MAXSIZE, resultStoredMaxSize); + } else { + prop.put(SwitchboardConstants.REMOTESEARCH_RESULT_STORE_MAXSIZE, ""); + } + + prop.put("search.verify.nocache", sb.getConfig("search.verify", "").equals("nocache") ? 1 : 0); + prop.put("search.verify.iffresh", sb.getConfig("search.verify", "").equals("iffresh") ? 1 : 0); + prop.put("search.verify.ifexist", sb.getConfig("search.verify", "").equals("ifexist") ? 1 : 0); + prop.put("search.verify.cacheonly", sb.getConfig("search.verify", "").equals("cacheonly") ? 1 : 0); + prop.put("search.verify.false", sb.getConfig("search.verify", "").equals("false") ? 1 : 0); + prop.put("search.verify.delete", sb.getConfigBool(SwitchboardConstants.SEARCH_VERIFY_DELETE, true) ? 1 : 0); + + prop.put("about.headline", sb.getConfig("about.headline", "")); + prop.put("about.body", sb.getConfig("about.body", "")); + + prop.put("search.excludehosts", sb.getConfig("search.excludehosts", "")); + prop.put("search.excludehosth", sb.getConfig("search.excludehosth", "")); + + final String browserPopUpPage = sb.getConfig(SwitchboardConstants.BROWSER_POP_UP_PAGE, "ConfigBasic.html"); + prop.put("popupFront", 0); + prop.put("popupSearch", 0); + prop.put("popupInteractive", 0); + prop.put("popupStatus", 0); + if (browserPopUpPage.startsWith("index")) { + prop.put("popupFront", 1); + } else if (browserPopUpPage.startsWith("yacysearch")) { + prop.put("popupSearch", 1); + } else if (browserPopUpPage.startsWith("yacyinteractive")) { + prop.put("popupInteractive", 1); + } else { + prop.put("popupStatus", 1); + } + + prop.put("maximumRecords", sb.getConfigInt(SwitchboardConstants.SEARCH_ITEMS, 10)); + + final String target = sb.getConfig(SwitchboardConstants.SEARCH_TARGET_DEFAULT, "_self"); + prop.put("target_selected_blank", "_blank".equals(target) ? 1 : 0); + prop.put("target_selected_self", "_self".equals(target) ? 1 : 0); + prop.put("target_selected_parent", "_parent".equals(target) ? 1 : 0); + prop.put("target_selected_top", "_top".equals(target) ? 1 : 0); + prop.put("target_selected_searchresult", "searchresult".equals(target) ? 1 : 0); + + final String target_special = sb.getConfig(SwitchboardConstants.SEARCH_TARGET_SPECIAL, "_self"); + prop.put("target_selected_special_blank", "_blank".equals(target_special) ? 1 : 0); + prop.put("target_selected_special_self", "_self".equals(target_special) ? 1 : 0); + prop.put("target_selected_special_parent", "_parent".equals(target_special) ? 1 : 0); + prop.put("target_selected_special_top", "_top".equals(target_special) ? 1 : 0); + prop.put("target_selected_special_searchresult", "searchresult".equals(target_special) ? 1 : 0); + prop.put("target_special_pattern", sb.getConfig(SwitchboardConstants.SEARCH_TARGET_SPECIAL_PATTERN, "")); + + prop.put("myContext", YaCyDefaultServlet.getContext(header, sb)); + return prop; + } + +} diff --git a/htroot/ConfigSearchPage_p.html b/htroot/ConfigSearchPage_p.html index 9a576f440..fa133af3b 100644 --- a/htroot/ConfigSearchPage_p.html +++ b/htroot/ConfigSearchPage_p.html @@ -17,7 +17,7 @@

Below is a generic template of the search result page. Mark the check boxes for features you would like to be displayed. To change colors and styles use the Appearance menu for different skins. - Other portal settings can be adjusted in Generic Search Portal menu. + Other portal settings can be adjusted in Generic Search Portal menu.

Page Template

diff --git a/htroot/ConfigSearchPage_p.java b/htroot/ConfigSearchPage_p.java index c46ac9d93..54dc08d2a 100644 --- a/htroot/ConfigSearchPage_p.java +++ b/htroot/ConfigSearchPage_p.java @@ -32,7 +32,6 @@ import java.io.IOException; import java.sql.Date; import java.util.Map; import java.util.Properties; -import java.util.TreeMap; import net.yacy.cora.date.GenericFormatter; import net.yacy.cora.protocol.RequestHeader; import net.yacy.cora.util.ConcurrentLog; @@ -62,7 +61,7 @@ public class ConfigSearchPage_p { if (post.containsKey("searchpage_set")) { final String newGreeting = post.get(SwitchboardConstants.GREETING, ""); // store this call as api call - sb.tables.recordAPICall(post, "ConfigPortal.html", WorkTables.TABLE_API_TYPE_CONFIGURATION, "new portal design. greeting: " + newGreeting); + sb.tables.recordAPICall(post, "ConfigPortal_p.html", WorkTables.TABLE_API_TYPE_CONFIGURATION, "new portal design. greeting: " + newGreeting); sb.setConfig("publicTopmenu", post.getBoolean("publicTopmenu")); sb.setConfig("search.options", post.getBoolean("search.options")); diff --git a/htroot/IndexImportOAIPMH_p.html b/htroot/IndexImportOAIPMH_p.html index 671d3acdd..84c9da15f 100644 --- a/htroot/IndexImportOAIPMH_p.html +++ b/htroot/IndexImportOAIPMH_p.html @@ -19,12 +19,12 @@ #(import-one)#:: -

+
Source:
#[source]#
Processed:
#[count]# records
ResumptionToken:
#[rt]#
-

- ::

Import failed: #[error]#

+
+ ::

Import failed: #[error]#

#(/import-one)#
diff --git a/htroot/IndexImportWarc_p.html b/htroot/IndexImportWarc_p.html new file mode 100644 index 000000000..d6003bc9e --- /dev/null +++ b/htroot/IndexImportWarc_p.html @@ -0,0 +1,51 @@ + + + + YaCy '#[clientname]#': Warc Import + #%env/templates/metas.template%# + #(import)#:: + + #(/import)# + + + #%env/templates/header.template%# + #%env/templates/submenuIndexImport.template%# +

Web Archive File Import

+ + #(import)# +

No import thread is running, you can start a new thread here

+
+ +
+ Warc File Selection: select an warc file (which may be gz compressed) +

+ You can download warc archives for example here + Internet Archive. +

+
+ + +
+ +
+
+
+
+ +
+ :: +
Import Process +
+
Thread:
#[thread]#
+
Warc File:
#[warcfile]#
+
Processed:
#[count]# Entries
+
Speed:
#[speed]# pages per second
+
Running Time:
#[runningHours]# hours, #[runningMinutes]# minutes
+
Remaining Time:
#[remainingHours]# hours, #[remainingMinutes]# minutes
+
+
+ #(/import)# + + #%env/templates/footer.template%# + + \ No newline at end of file diff --git a/htroot/IndexImportWarc_p.java b/htroot/IndexImportWarc_p.java new file mode 100644 index 000000000..f503fe98b --- /dev/null +++ b/htroot/IndexImportWarc_p.java @@ -0,0 +1,76 @@ +// IndexImportWarc_p.java +// ------------------------- +// (c) 2017 by reger24; https://github.com/reger24 +// +// 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 + +import java.io.File; +import java.io.FileNotFoundException; + +import net.yacy.cora.protocol.RequestHeader; +import net.yacy.document.importer.WarcImporter; +import net.yacy.search.Switchboard; +import net.yacy.server.serverObjects; +import net.yacy.server.serverSwitch; + +public class IndexImportWarc_p { + + public static serverObjects respond(@SuppressWarnings("unused") final RequestHeader header, final serverObjects post, final serverSwitch env) { + final serverObjects prop = new serverObjects(); + final Switchboard sb = (Switchboard) env; + + if (WarcImporter.job != null && WarcImporter.job.isAlive()) { + // one import is running, no option to insert anything + prop.put("import", 1); + prop.put("import_thread", "running"); + prop.put("import_warcfile", WarcImporter.job.source()); + prop.put("import_count", WarcImporter.job.count()); + prop.put("import_speed", WarcImporter.job.speed()); + prop.put("import_runningHours", (WarcImporter.job.runningTime() / 60) / 60); + prop.put("import_runningMinutes", (WarcImporter.job.runningTime() / 60) % 60); + prop.put("import_remainingHours", (WarcImporter.job.remainingTime() / 60) / 60); + prop.put("import_remainingMinutes", (WarcImporter.job.remainingTime() / 60) % 60); + } else { + prop.put("import", 0); + if (post != null) { + if (post.containsKey("file")) { + String file = post.get("file"); + final File sourcefile = new File(file); + if (sourcefile.exists()) { + try { + WarcImporter wi = new WarcImporter(sourcefile); + wi.start(); + prop.put("import_thread", "started"); + } catch (FileNotFoundException ex) { + prop.put("import_thread", "Error: file not found [" + file + "]"); + } + prop.put("import_warcfile", file); + } else { + prop.put("import_warcfile", ""); + prop.put("import_thread", "Error: file not found [" + file + "]"); + } + prop.put("import", 1); + prop.put("import_count", 0); + prop.put("import_speed", 0); + prop.put("import_runningHours", 0); + prop.put("import_runningMinutes", 0); + prop.put("import_remainingHours", 0); + prop.put("import_remainingMinutes", 0); + } + } + } + return prop; + } +} diff --git a/htroot/Table_API_p.html b/htroot/Table_API_p.html index 230d5b013..8ad8f4f94 100644 --- a/htroot/Table_API_p.html +++ b/htroot/Table_API_p.html @@ -46,6 +46,7 @@ To see a list of all APIs, please visit the +
Recorded Actions
diff --git a/htroot/Table_API_p.java b/htroot/Table_API_p.java index 43ee5bca3..17a51a124 100644 --- a/htroot/Table_API_p.java +++ b/htroot/Table_API_p.java @@ -35,6 +35,7 @@ import net.yacy.cora.document.id.MultiProtocolURL; import net.yacy.cora.protocol.Domains; import net.yacy.cora.protocol.RequestHeader; import net.yacy.cora.util.ConcurrentLog; +import net.yacy.data.TransactionManager; import net.yacy.data.WorkTables; import net.yacy.kelondro.blob.Tables; import net.yacy.kelondro.blob.Tables.Row; @@ -46,10 +47,10 @@ import net.yacy.server.serverSwitch; public class Table_API_p { - public static serverObjects respond(@SuppressWarnings("unused") final RequestHeader header, final serverObjects post, final serverSwitch env) { + public static serverObjects respond(final RequestHeader header, final serverObjects post, final serverSwitch env) { final Switchboard sb = (Switchboard) env; final serverObjects prop = new serverObjects(); - + prop.put("showexec", 0); prop.put("showtable", 0); @@ -85,6 +86,10 @@ public class Table_API_p { current_pk = post.get("current_pk", ""); } if (post != null && scheduleeventaction && !current_pk.isEmpty()) { + + /* Check this is a valid transaction */ + TransactionManager.checkPostTransaction(header, post); + try { Tables.Row row = sb.tables.select(WorkTables.TABLE_API_NAME, current_pk.getBytes()); if (row != null) { @@ -150,6 +155,10 @@ public class Table_API_p { } if (post != null && !post.get("deleterows", "").isEmpty()) { + + /* Check this is a valid transaction */ + TransactionManager.checkPostTransaction(header, post); + for (final Map.Entry entry : post.entrySet()) { if (entry.getValue().startsWith("mark_")) { try { @@ -162,6 +171,10 @@ public class Table_API_p { } if (post != null && !post.get("deleteold", "").isEmpty()) { + + /* Check this is a valid transaction */ + TransactionManager.checkPostTransaction(header, post); + int days = post.getInt("deleteoldtime", 365); try { Iterator ri = sb.tables.iterator(WorkTables.TABLE_API_NAME); @@ -199,6 +212,10 @@ public class Table_API_p { } if (post != null && !post.get("execrows", "").isEmpty()) { + + /* Check this is a valid transaction */ + TransactionManager.checkPostTransaction(header, post); + // create a time-ordered list of events to execute final Set pks = new TreeSet(); for (final Map.Entry entry : post.entrySet()) { @@ -234,6 +251,11 @@ public class Table_API_p { // generate table prop.put("showtable", 1); prop.put("showtable_inline", inline ? 1 : 0); + + /* Acquire a transaction token for the next POST form submission */ + final String nextTransactionToken = TransactionManager.getTransactionToken(header); + prop.put(TransactionManager.TRANSACTION_TOKEN_PARAM, nextTransactionToken); + prop.put("showtable_" + TransactionManager.TRANSACTION_TOKEN_PARAM, nextTransactionToken); // insert rows final List table = new ArrayList(maximumRecords); @@ -287,7 +309,7 @@ public class Table_API_p { prop.put("showtable_list_" + count + "_dateLastExec", date_last_exec == null ? "-" : GenericFormatter.FORMAT_SIMPLE.format(date_last_exec)); prop.put("showtable_list_" + count + "_dateNextExec", date_next_exec == null ? "-" : GenericFormatter.FORMAT_SIMPLE.format(date_next_exec)); prop.put("showtable_list_" + count + "_type", row.get(WorkTables.TABLE_API_COL_TYPE)); - prop.put("showtable_list_" + count + "_comment", row.get(WorkTables.TABLE_API_COL_COMMENT)); + prop.putHTML("showtable_list_" + count + "_comment", row.get(WorkTables.TABLE_API_COL_COMMENT)); // check type & action to link crawl start URLs back to CrawlStartExpert.html if (prop.get("showtable_list_" + count + "_type", "").equals(WorkTables.TABLE_API_TYPE_CRAWLER) && prop.get("showtable_list_" + count + "_comment", "").startsWith("crawl start for")) { diff --git a/htroot/Translator_p.html b/htroot/Translator_p.html index 79b0deeca..e4925791e 100644 --- a/htroot/Translator_p.html +++ b/htroot/Translator_p.html @@ -13,6 +13,7 @@

Translate untranslated text of the user interface (current language). The modified translation file is stored in DATA/LOCALE directory.

+
diff --git a/htroot/Translator_p.java b/htroot/Translator_p.java index 31d97760f..ffbd14dc2 100644 --- a/htroot/Translator_p.java +++ b/htroot/Translator_p.java @@ -24,6 +24,7 @@ import java.util.Iterator; import java.util.Map; import net.yacy.cora.protocol.RequestHeader; import net.yacy.cora.util.ConcurrentLog; +import net.yacy.data.TransactionManager; import net.yacy.search.Switchboard; import net.yacy.search.SwitchboardConstants; import net.yacy.server.serverObjects; @@ -33,7 +34,7 @@ import net.yacy.utils.translation.TranslationManager; public class Translator_p { - public static servletProperties respond(@SuppressWarnings("unused") final RequestHeader requestHeader, @SuppressWarnings("unused") final serverObjects post, @SuppressWarnings("unused") final serverSwitch env) { + public static servletProperties respond(final RequestHeader requestHeader, final serverObjects post, final serverSwitch env) { try { final servletProperties prop = new servletProperties(); final Switchboard sb = (Switchboard) env; @@ -112,6 +113,9 @@ public class Translator_p { } // handle (modified) input text if (i == textlistid && post != null) { + /* Check this is a valid transaction */ + TransactionManager.checkPostTransaction(requestHeader, post); + if (editapproved) { // switch already translated in edit mode by copying to local translation // not saved here as not yet modified/approved localTransMgr.addTranslation(localTrans, filename, sourcetext, targettxt); @@ -138,6 +142,9 @@ public class Translator_p { changed = true; } if (changed) { + /* Check this is a valid transaction */ + TransactionManager.checkPostTransaction(requestHeader, post); + localTransMgr.saveAsLngFile(langcfg, locallngfile, localTrans); // adhoc translate this file // 1. get/calc the path @@ -150,6 +157,10 @@ public class Translator_p { localTransMgr.translateFile(sourceFile, destFile, origTextList); // do the translation } } + + /* Acquire a transaction token for the next POST form submission */ + prop.put(TransactionManager.TRANSACTION_TOKEN_PARAM, TransactionManager.getTransactionToken(requestHeader)); + prop.put("textlist", i); return prop; } catch (IOException ex) { diff --git a/htroot/env/templates/header.template b/htroot/env/templates/header.template index 9b684a293..32e70cc59 100644 --- a/htroot/env/templates/header.template +++ b/htroot/env/templates/header.template @@ -176,7 +176,7 @@ diff --git a/htroot/env/templates/submenuIndexImport.template b/htroot/env/templates/submenuIndexImport.template index b44d9d95a..d85b313c2 100644 --- a/htroot/env/templates/submenuIndexImport.template +++ b/htroot/env/templates/submenuIndexImport.template @@ -13,6 +13,7 @@ diff --git a/htroot/env/templates/submenuPortalConfiguration.template b/htroot/env/templates/submenuPortalConfiguration.template index 896f9b592..21b177ab7 100644 --- a/htroot/env/templates/submenuPortalConfiguration.template +++ b/htroot/env/templates/submenuPortalConfiguration.template @@ -1,7 +1,7 @@