diff --git a/htroot/ConfigPortal.html b/htroot/ConfigPortal.html index 7fab4068e..3cb3756f1 100644 --- a/htroot/ConfigPortal.html +++ b/htroot/ConfigPortal.html @@ -57,6 +57,11 @@ Applications +
Show additional interaction features in footer
+
+ User-Logon  +
+
Snippet Fetch Strategy & Link Verification
ideaSpeed up search results with this option! (use CACHEONLY or FALSE to switch off verification)
diff --git a/htroot/ConfigPortal.java b/htroot/ConfigPortal.java index 5429644bc..8555889dd 100644 --- a/htroot/ConfigPortal.java +++ b/htroot/ConfigPortal.java @@ -80,6 +80,8 @@ public class ConfigPortal { sb.setConfig("publicTopmenu", post.getBoolean("publicTopmenu", true)); sb.setConfig("publicSearchpage", post.getBoolean("publicSearchpage", true)); sb.setConfig("search.options", post.getBoolean("search.options", false)); + + sb.setConfig("interaction.userlogon.enabled", post.getBoolean("interaction.userlogon", false)); sb.setConfig("search.text", post.getBoolean("search.text", false)); sb.setConfig("search.image", post.getBoolean("search.image", false)); @@ -129,6 +131,7 @@ public class ConfigPortal { sb.setConfig("publicSearchpage", true); sb.setConfig("search.navigation", "hosts,authors,namespace,topics"); sb.setConfig("search.options", true); + sb.setConfig("interaction.userlogon.enabled", false); sb.setConfig("search.text", true); sb.setConfig("search.image", true); sb.setConfig("search.audio", false); @@ -160,6 +163,8 @@ public class ConfigPortal { prop.put("publicSearchpage", sb.getConfigBool("publicSearchpage", false) ? 1 : 0); prop.put("search.options", sb.getConfigBool("search.options", false) ? 1 : 0); + prop.put("interaction.userlogon", sb.getConfigBool("interaction.userlogon.enabled", false) ? 1 : 0); + prop.put("search.text", sb.getConfigBool("search.text", false) ? 1 : 0); prop.put("search.image", sb.getConfigBool("search.image", false) ? 1 : 0); prop.put("search.audio", sb.getConfigBool("search.audio", false) ? 1 : 0); diff --git a/htroot/env/templates/embeddedfooter.template b/htroot/env/templates/embeddedfooter.template index 04f5b8449..c8a7fb0b9 100644 --- a/htroot/env/templates/embeddedfooter.template +++ b/htroot/env/templates/embeddedfooter.template @@ -1 +1,2 @@ + \ No newline at end of file diff --git a/htroot/env/templates/footer.template b/htroot/env/templates/footer.template index 7f5eaa32e..c8a7fb0b9 100644 --- a/htroot/env/templates/footer.template +++ b/htroot/env/templates/footer.template @@ -1 +1,2 @@ - \ No newline at end of file + + \ No newline at end of file diff --git a/htroot/env/templates/simplefooter.template b/htroot/env/templates/simplefooter.template index 04f5b8449..c8a7fb0b9 100644 --- a/htroot/env/templates/simplefooter.template +++ b/htroot/env/templates/simplefooter.template @@ -1 +1,2 @@ + \ No newline at end of file diff --git a/htroot/interaction_elements/Footer.html b/htroot/interaction_elements/Footer.html new file mode 100644 index 000000000..77c8a3ecd --- /dev/null +++ b/htroot/interaction_elements/Footer.html @@ -0,0 +1,88 @@ +#(enabled)#:: + + + +
+ +
+ +#(/enabled)# \ No newline at end of file diff --git a/htroot/interaction_elements/Footer.java b/htroot/interaction_elements/Footer.java new file mode 100644 index 000000000..6c3e66c9e --- /dev/null +++ b/htroot/interaction_elements/Footer.java @@ -0,0 +1,35 @@ +package interaction_elements; + + +import net.yacy.cora.protocol.RequestHeader; +import net.yacy.search.Switchboard; +import de.anomic.server.serverObjects; +import de.anomic.server.serverSwitch; + +public class Footer { + + public static serverObjects respond(final RequestHeader requestHeader, final serverObjects post, final serverSwitch env) { + + final Switchboard sb = (Switchboard) env; + + final serverObjects prop = new serverObjects(); + + prop.put("enabled_color", env.getConfig("color_tableheader", "")); + + int count = 0; + + prop.put("enabled_userlogonenabled", env.getConfigBool("interaction.userlogon.enabled", false) ? "1" : "0"); + if (env.getConfigBool("interaction.userlogon.enabled", false)) count++; + + if (count > 0) { + prop.put("enabled", "1"); + prop.put("enabled_userlogonenabled_ratio", Math.round(100/count)-1); + + } else { + prop.put("enabled", "0"); + } + + + return prop; + } +} diff --git a/htroot/interaction_elements/Loginstatus_part.html b/htroot/interaction_elements/Loginstatus_part.html new file mode 100644 index 000000000..2f01d93c9 --- /dev/null +++ b/htroot/interaction_elements/Loginstatus_part.html @@ -0,0 +1,10 @@ +#(enabled)#:: + +#(logged-in)# + #[username]# +:: + #[username]# +:: + #[username]# +#(/logged-in)# +#(/enabled)# \ No newline at end of file diff --git a/htroot/interaction_elements/Loginstatus_part.java b/htroot/interaction_elements/Loginstatus_part.java new file mode 100644 index 000000000..bc5290384 --- /dev/null +++ b/htroot/interaction_elements/Loginstatus_part.java @@ -0,0 +1,114 @@ +package interaction_elements; + +//ViewLog_p.java +//----------------------- +//part of the AnomicHTTPD caching proxy +//(C) by Michael Peter Christen; mc@yacy.net +//first published on http://www.anomic.de +//Frankfurt, Germany, 2004 +// +//This File is contributed by Alexander Schier +//last major change: 14.12.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 + + +//You must compile this file with +//javac -classpath .:../classes ViewLog_p.java +//if the shell's current path is HTROOT + +import net.yacy.cora.protocol.HeaderFramework; +import net.yacy.cora.protocol.RequestHeader; +import net.yacy.search.Switchboard; +import de.anomic.data.UserDB; +import de.anomic.server.serverObjects; +import de.anomic.server.serverSwitch; +import de.anomic.server.servletProperties; + +public class Loginstatus_part { + + public static serverObjects respond(final RequestHeader requestHeader, final serverObjects post, final serverSwitch env) { + + final Switchboard sb = (Switchboard) env; + + final servletProperties prop = new servletProperties(); + + prop.put("enabled", env.getConfigBool("interaction.userlogon.enabled", false) ? "1" : "0"); + + prop.put("enabled_color", env.getConfig("color_tableheader", "")); + + prop.put("enabled_logged-in_registrationenabled", env.getConfigBool("interaction.userselfregistration.enabled", false) ? "1" : "0"); + +// +// final String address = sb.peers.mySeed().getPublicAddress(); + + prop.put("enabled_peer", sb.peers.myName()); + + prop.put("enabled_logged-in_returnto", "/index.html"); + + + UserDB.Entry entry=null; + + //default values + prop.put("enabled_logged_in", "0"); + prop.put("enabled_logged-in_limit", "0"); + prop.put("enabled_logged-in_username", "anonymous"); + prop.put("enabled_status", "0"); + //identified via HTTPPassword + entry=sb.userDB.proxyAuth((requestHeader.get(RequestHeader.AUTHORIZATION, "xxxxxx"))); + if(entry != null){ + prop.put("enabled_logged-in_identified-by", "1"); + //try via cookie + }else{ + entry=sb.userDB.cookieAuth(requestHeader.getHeaderCookies()); + prop.put("enabled_logged-in_identified-by", "2"); + //try via ip + if(entry == null){ + entry=sb.userDB.ipAuth((requestHeader.get(HeaderFramework.CONNECTION_PROP_CLIENTIP, "xxxxxx"))); + if(entry != null){ + prop.put("enabled_logged-in_identified-by", "0"); + } + } + } + + //identified via userDB + if(entry != null){ + prop.put("enabled_logged-in", "1"); + prop.put("enabled_logged-in_username", entry.getUserName()); + if(entry.getTimeLimit() > 0){ + prop.put("enabled_logged-in_limit", "1"); + final long limit=entry.getTimeLimit(); + final long used=entry.getTimeUsed(); + prop.put("enabled_logged-in_limit_timelimit", limit); + prop.put("enabled_logged-in_limit_timeused", used); + int percent=0; + if(limit!=0 && used != 0) + percent=(int)((float)used/(float)limit*100); + prop.put("enabled_logged-in_limit_percent", percent/3); + prop.put("enabled_logged-in_limit_percent2", (100-percent)/3); + } + //logged in via static Password + }else if(sb.verifyAuthentication(requestHeader)){ + prop.put("enabled_logged-in", "2"); + prop.put("enabled_logged-in_username", "staticadmin"); + //identified via form-login + //TODO: this does not work for a static admin, yet. + } + + // return rewrite properties + return prop; + + } +} diff --git a/htroot/interaction_elements/OverlayInteraction.html b/htroot/interaction_elements/OverlayInteraction.html index 602c9b32b..22605cc94 100644 --- a/htroot/interaction_elements/OverlayInteraction.html +++ b/htroot/interaction_elements/OverlayInteraction.html @@ -9,7 +9,7 @@ font-size: 10px; position: fixed; right: 0; background: #ffffff; -border:1px solid #5a346e; +border:1px solid #[color]#; width: 210px; height: auto; @@ -17,7 +17,7 @@ padding: 30px 110px 30px 30px; z-index:99998; -color: #5a346e; +color: #[color]#; } .sci_right { @@ -36,31 +36,11 @@ padding: 5px 5px 5px 5px; z-index:99998; -color: #5a346e; +color: #[color]#; } -.sci_hide { - -font: arial,helvetica,sans-serif; -font-size: 10px; -position: fixed; -right: 0px; -top: 0; -background: #ffffff; -border:0px; - -width: 100px; -height: 20px; -padding: 5px 5px 5px 5px; - -z-index:99998; - -color: #5a346e; - -} - .sci_left { font: arial,helvetica,sans-serif; @@ -136,7 +116,7 @@ height: 2px; background: #ffffff; border:0px; -background: #5a346e; +background: #[color]#; padding: 0px 0px 0px 0px; diff --git a/htroot/interaction_elements/OverlayInteraction.java b/htroot/interaction_elements/OverlayInteraction.java index 21af427df..1a1bcc2a6 100644 --- a/htroot/interaction_elements/OverlayInteraction.java +++ b/htroot/interaction_elements/OverlayInteraction.java @@ -17,6 +17,8 @@ public class OverlayInteraction { prop.put("enabled_urlhash", post.get("urlhash", "")); prop.put("enabled_action", post.get("action", "")); + + prop.put("enabled_color", env.getConfig("color_tableheader", "")); return prop; } diff --git a/htroot/interaction_elements/login_admin.png b/htroot/interaction_elements/login_admin.png new file mode 100644 index 000000000..f54109ae9 Binary files /dev/null and b/htroot/interaction_elements/login_admin.png differ diff --git a/htroot/interaction_elements/login_empty.png b/htroot/interaction_elements/login_empty.png new file mode 100644 index 000000000..bcaaeb4f3 Binary files /dev/null and b/htroot/interaction_elements/login_empty.png differ diff --git a/htroot/interaction_elements/login_user.png b/htroot/interaction_elements/login_user.png new file mode 100644 index 000000000..770e29c4e Binary files /dev/null and b/htroot/interaction_elements/login_user.png differ diff --git a/htroot/yacysearch.html b/htroot/yacysearch.html index ff1bd2532..24a7db77a 100644 --- a/htroot/yacysearch.html +++ b/htroot/yacysearch.html @@ -252,5 +252,7 @@ window.setTimeout('latestinfo();',8000); window.setTimeout('latestinfo();',10000); + + diff --git a/source/net/yacy/interaction/AugmentHtmlStream.java b/source/net/yacy/interaction/AugmentHtmlStream.java index 6d7bcf3a2..2ec61e1bd 100644 --- a/source/net/yacy/interaction/AugmentHtmlStream.java +++ b/source/net/yacy/interaction/AugmentHtmlStream.java @@ -381,6 +381,8 @@ public class AugmentHtmlStream { NodeList bodychildren = bt.getChildren(); bodychildren.add(new org.htmlparser.nodes.TextNode(loadInternal("interaction_elements/OverlayInteraction.html?action="+action+"&urlhash="+ ASCII.String(url.hash()) +"&url="+url.toNormalform(false, true), requestHeader))); + + bodychildren.add(new org.htmlparser.nodes.TextNode(loadInternal("interaction_elements/Footer.html?action="+action+"&urlhash="+ ASCII.String(url.hash()) +"&url="+url.toNormalform(false, true), requestHeader))); bt.setChildren(bodychildren);