diff --git a/build.xml b/build.xml index b6a199fda..7d447b48d 100644 --- a/build.xml +++ b/build.xml @@ -161,13 +161,14 @@ - - - - - - - + + + + + + + + @@ -222,7 +223,6 @@ - diff --git a/lib/javax.servlet-3.0.0.v201112011016.jar b/lib/javax.servlet-3.0.0.v201112011016.jar new file mode 100644 index 000000000..b13540968 Binary files /dev/null and b/lib/javax.servlet-3.0.0.v201112011016.jar differ diff --git a/lib/jetty-continuation-7.3.0.v20110203.jar b/lib/jetty-continuation-7.3.0.v20110203.jar deleted file mode 100644 index ca5011295..000000000 Binary files a/lib/jetty-continuation-7.3.0.v20110203.jar and /dev/null differ diff --git a/lib/jetty-continuation-9.0.5.v20130815.jar b/lib/jetty-continuation-9.0.5.v20130815.jar new file mode 100644 index 000000000..a79294670 Binary files /dev/null and b/lib/jetty-continuation-9.0.5.v20130815.jar differ diff --git a/lib/jetty-http-7.3.0.v20110203.jar b/lib/jetty-http-7.3.0.v20110203.jar deleted file mode 100644 index 7008d1794..000000000 Binary files a/lib/jetty-http-7.3.0.v20110203.jar and /dev/null differ diff --git a/lib/jetty-http-9.0.5.v20130815.jar b/lib/jetty-http-9.0.5.v20130815.jar new file mode 100644 index 000000000..ff4975d74 Binary files /dev/null and b/lib/jetty-http-9.0.5.v20130815.jar differ diff --git a/lib/jetty-io-7.3.0.v20110203.jar b/lib/jetty-io-7.3.0.v20110203.jar deleted file mode 100644 index ed08c1f4d..000000000 Binary files a/lib/jetty-io-7.3.0.v20110203.jar and /dev/null differ diff --git a/lib/jetty-io-9.0.5.v20130815.jar b/lib/jetty-io-9.0.5.v20130815.jar new file mode 100644 index 000000000..5459012fa Binary files /dev/null and b/lib/jetty-io-9.0.5.v20130815.jar differ diff --git a/lib/jetty-security-7.3.0.v20110203.jar b/lib/jetty-security-7.3.0.v20110203.jar deleted file mode 100644 index e978607dc..000000000 Binary files a/lib/jetty-security-7.3.0.v20110203.jar and /dev/null differ diff --git a/lib/jetty-security-9.0.5.v20130815.jar b/lib/jetty-security-9.0.5.v20130815.jar new file mode 100644 index 000000000..7ff8202da Binary files /dev/null and b/lib/jetty-security-9.0.5.v20130815.jar differ diff --git a/lib/jetty-server-7.3.0.v20110203.jar b/lib/jetty-server-7.3.0.v20110203.jar deleted file mode 100644 index c6c9eea39..000000000 Binary files a/lib/jetty-server-7.3.0.v20110203.jar and /dev/null differ diff --git a/lib/jetty-server-9.0.5.v20130815.jar b/lib/jetty-server-9.0.5.v20130815.jar new file mode 100644 index 000000000..da9bf3e71 Binary files /dev/null and b/lib/jetty-server-9.0.5.v20130815.jar differ diff --git a/lib/jetty-servlet-7.3.0.v20110203.jar b/lib/jetty-servlet-7.3.0.v20110203.jar deleted file mode 100644 index 0097f0039..000000000 Binary files a/lib/jetty-servlet-7.3.0.v20110203.jar and /dev/null differ diff --git a/lib/jetty-servlet-9.0.5.v20130815.jar b/lib/jetty-servlet-9.0.5.v20130815.jar new file mode 100644 index 000000000..961f23e53 Binary files /dev/null and b/lib/jetty-servlet-9.0.5.v20130815.jar differ diff --git a/lib/jetty-servlets-7.3.0.v20110203.jar b/lib/jetty-servlets-7.3.0.v20110203.jar deleted file mode 100644 index 6ea9b31aa..000000000 Binary files a/lib/jetty-servlets-7.3.0.v20110203.jar and /dev/null differ diff --git a/lib/jetty-servlets-9.0.5.v20130815.jar b/lib/jetty-servlets-9.0.5.v20130815.jar new file mode 100644 index 000000000..3cecab6c2 Binary files /dev/null and b/lib/jetty-servlets-9.0.5.v20130815.jar differ diff --git a/lib/jetty-util-7.3.0.v20110203.jar b/lib/jetty-util-7.3.0.v20110203.jar deleted file mode 100644 index 719113881..000000000 Binary files a/lib/jetty-util-7.3.0.v20110203.jar and /dev/null differ diff --git a/lib/jetty-util-9.0.5.v20130815.jar b/lib/jetty-util-9.0.5.v20130815.jar new file mode 100644 index 000000000..207eab459 Binary files /dev/null and b/lib/jetty-util-9.0.5.v20130815.jar differ diff --git a/lib/servlet-api-2.5-20081211.jar b/lib/servlet-api-2.5-20081211.jar deleted file mode 100644 index b0537c4db..000000000 Binary files a/lib/servlet-api-2.5-20081211.jar and /dev/null differ diff --git a/lib/servlet-api-LICENSE-ASL.txt b/lib/servlet-api-LICENSE-ASL.txt deleted file mode 100644 index d64569567..000000000 --- a/lib/servlet-api-LICENSE-ASL.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/source/net/yacy/document/parser/html/ContentScraper.java b/source/net/yacy/document/parser/html/ContentScraper.java index 1e9dd363c..230e804bf 100644 --- a/source/net/yacy/document/parser/html/ContentScraper.java +++ b/source/net/yacy/document/parser/html/ContentScraper.java @@ -277,7 +277,7 @@ public class ContentScraper extends AbstractScraper implements Scraper { break location; } // find tags inside text - String b = cleanLine(super.stripAllTags(newtext)); + String b = cleanLine(stripAllTags(newtext)); if ((insideTag != null) && (!(insideTag.equals("a")))) { // texts inside tags sometimes have no punctuation at the line end // this is bad for the text semantics, because it is not possible for the diff --git a/source/net/yacy/http/CrashProtectionHandler.java b/source/net/yacy/http/CrashProtectionHandler.java index 7f944affe..de47c433e 100644 --- a/source/net/yacy/http/CrashProtectionHandler.java +++ b/source/net/yacy/http/CrashProtectionHandler.java @@ -33,6 +33,7 @@ public class CrashProtectionHandler extends HandlerWrapper implements Handler, H } catch (Exception e) { // handle all we can writeResponse(request, response, e); + baseRequest.setHandled(true); } } @@ -44,9 +45,5 @@ public class CrashProtectionHandler extends HandlerWrapper implements Handler, H exc.printStackTrace(out); response.setContentType("text/plain"); response.setStatus(500); - - // we handled this request, break out of handler chain - Request base_request = (request instanceof Request) ? (Request)request:HttpConnection.getCurrentConnection().getRequest(); - base_request.setHandled(true); } } diff --git a/source/net/yacy/http/HttpServer.java b/source/net/yacy/http/HttpServer.java index d4c5be2a2..9c5cadab7 100644 --- a/source/net/yacy/http/HttpServer.java +++ b/source/net/yacy/http/HttpServer.java @@ -26,44 +26,42 @@ package net.yacy.http; import java.net.InetSocketAddress; import java.net.SocketException; -import java.util.logging.Level; -import java.util.logging.Logger; import net.yacy.cora.util.ConcurrentLog; import net.yacy.search.Switchboard; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.handler.ContextHandler; import org.eclipse.jetty.server.handler.DefaultHandler; import org.eclipse.jetty.server.handler.HandlerList; import org.eclipse.jetty.server.handler.ResourceHandler; -import org.eclipse.jetty.server.nio.SelectChannelConnector; /** * class to embedded jetty http server into YaCy */ public class HttpServer { - private Server server = new Server(); + private Server server; /** * @param port TCP Port to listen for http requests */ public HttpServer(int port) { Switchboard sb = Switchboard.getSwitchboard(); - - SelectChannelConnector connector = new SelectChannelConnector(); + server = new Server(); + ServerConnector connector = new ServerConnector(server); connector.setPort(port); + connector.setName("httpd:"+Integer.toString(port)); //connector.setThreadPool(new QueuedThreadPool(20)); server.addConnector(connector); - + YacyDomainHandler domainHandler = new YacyDomainHandler(); domainHandler.setAlternativeResolver(sb.peers); ResourceHandler resource_handler = new ResourceHandler(); resource_handler.setDirectoriesListed(true); resource_handler.setWelcomeFiles(new String[]{"index.html"}); - resource_handler.setResourceBase("htroot/"); HandlerList handlers = new HandlerList(); @@ -134,15 +132,7 @@ public class HttpServer { } public int getJobCount() { - return getMaxSessionCount()-server.getThreadPool().getIdleThreads(); // TODO: + return getMaxSessionCount() - server.getThreadPool().getIdleThreads(); // TODO: } - /** - * just for testing and debugging - */ - public static void main(String[] args) throws Exception { - HttpServer server = new HttpServer(8090); - server.start(); - server.stop(); - } } diff --git a/source/net/yacy/http/ProxyCacheHandler.java b/source/net/yacy/http/ProxyCacheHandler.java index a22f7a441..b2f7e3f4e 100644 --- a/source/net/yacy/http/ProxyCacheHandler.java +++ b/source/net/yacy/http/ProxyCacheHandler.java @@ -22,13 +22,12 @@ // along with this program in the file lgpl21.txt // If not, see . // - package net.yacy.http; import java.io.IOException; import java.util.Map.Entry; - import javax.servlet.ServletException; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -37,70 +36,63 @@ import net.yacy.cora.protocol.ResponseHeader; import net.yacy.kelondro.data.meta.DigestURI; import org.eclipse.jetty.server.Handler; -import org.eclipse.jetty.server.HttpConnection; import org.eclipse.jetty.server.Request; import net.yacy.crawler.data.Cache; import net.yacy.crawler.retrieval.Response; /** - * jetty http handler - * serves pages from cache if available and valid + * jetty http handler serves pages from cache if available and valid */ public class ProxyCacheHandler extends AbstractRemoteHandler implements Handler { - - private void handleRequestFromCache(HttpServletRequest request, HttpServletResponse response, ResponseHeader cachedResponseHeader, byte[] content) throws IOException { - System.err.println("handle from cache"); - // TODO: check if-modified - for(Entry entry: cachedResponseHeader.entrySet()) { - response.addHeader(entry.getKey(), entry.getValue()); - } - response.setStatus(HttpServletResponse.SC_NON_AUTHORITATIVE_INFORMATION); - response.getOutputStream().write(content); + private void handleRequestFromCache(HttpServletRequest request, HttpServletResponse response, ResponseHeader cachedResponseHeader, byte[] content) throws IOException { + System.err.println("handle from cache"); + // TODO: check if-modified + for (Entry entry : cachedResponseHeader.entrySet()) { + response.addHeader(entry.getKey(), entry.getValue()); + } + response.setStatus(HttpServletResponse.SC_NON_AUTHORITATIVE_INFORMATION); + response.getOutputStream().write(content); // we handled this request, break out of handler chain - Request base_request = (request instanceof Request) ? (Request)request:HttpConnection.getCurrentConnection().getRequest(); - base_request.setHandled(true); - } + } + + @Override + public void handleRemote(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + if (request.getMethod().equals("GET")) { + String queryString = request.getQueryString() != null ? "?" + request.getQueryString() : ""; + DigestURI url = new DigestURI(request.getRequestURL().toString() + queryString); + ResponseHeader cachedResponseHeader = Cache.getResponseHeader(url.hash()); - @Override - public void handleRemote(String target, Request baseRequest, - HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - if(request.getMethod().equals("GET")) { - String queryString = request.getQueryString()!=null ? "?" + request.getQueryString() : ""; - DigestURI url = new DigestURI(request.getRequestURL().toString() + queryString); - ResponseHeader cachedResponseHeader = Cache.getResponseHeader(url.hash()); - - if(cachedResponseHeader != null) { - RequestHeader proxyHeaders = ProxyHandler.convertHeaderFromJetty(request); - // TODO: this convertion is only necessary - final net.yacy.crawler.retrieval.Request yacyRequest = new net.yacy.crawler.retrieval.Request( - null, - url, - proxyHeaders.referer() == null ? null : new DigestURI(proxyHeaders.referer().toString()).hash(), - "", + if (cachedResponseHeader != null) { + RequestHeader proxyHeaders = ProxyHandler.convertHeaderFromJetty(request); + // TODO: this convertion is only necessary + final net.yacy.crawler.retrieval.Request yacyRequest = new net.yacy.crawler.retrieval.Request( + null, + url, + proxyHeaders.referer() == null ? null : new DigestURI(proxyHeaders.referer().toString()).hash(), + "", cachedResponseHeader.lastModified(), sb.crawler.defaultProxyProfile.handle(), - 0, - 0, + 0, + 0, 0, 0); final Response cachedResponse = new Response( - yacyRequest, - proxyHeaders, + yacyRequest, + proxyHeaders, cachedResponseHeader, sb.crawler.defaultProxyProfile, - false - ); + false); byte[] cacheContent = Cache.getContent(url.hash()); if (cacheContent != null && cachedResponse.isFreshForProxy()) { - handleRequestFromCache(request, response, cachedResponseHeader, cacheContent); + handleRequestFromCache(request, response, cachedResponseHeader, cacheContent); + baseRequest.setHandled(true); } - } - - } - } + } + + } + } } diff --git a/source/net/yacy/http/ProxyHandler.java b/source/net/yacy/http/ProxyHandler.java index c1d2f1413..5a6413418 100644 --- a/source/net/yacy/http/ProxyHandler.java +++ b/source/net/yacy/http/ProxyHandler.java @@ -45,7 +45,6 @@ import net.yacy.kelondro.data.meta.DigestURI; import org.apache.http.Header; import org.apache.http.HttpResponse; import org.eclipse.jetty.server.Handler; -import org.eclipse.jetty.server.HttpConnection; import org.eclipse.jetty.server.Request; import net.yacy.crawler.data.Cache; @@ -234,8 +233,7 @@ public class ProxyHandler extends AbstractRemoteHandler implements Handler { } // we handled this request, break out of handler chain - Request base_request = (request instanceof Request) ? (Request)request:HttpConnection.getCurrentConnection().getRequest(); - base_request.setHandled(true); + baseRequest.setHandled(true); } diff --git a/source/net/yacy/http/TemplateHandler.java b/source/net/yacy/http/TemplateHandler.java index e2071ac81..8cd83f358 100644 --- a/source/net/yacy/http/TemplateHandler.java +++ b/source/net/yacy/http/TemplateHandler.java @@ -193,10 +193,8 @@ public class TemplateHandler extends AbstractHandler implements Handler { public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { Switchboard sb = Switchboard.getSwitchboard(); - - System.err.println("Page: " + target); - String localeSelection = "default"; + String localeSelection = Switchboard.getSwitchboard().getConfig("locale.language","default"); File targetFile = getLocalizedFile(target, localeSelection); File targetClass = rewriteClassFile(new File(htDefaultPath, target)); String targetExt = target.substring(target.lastIndexOf('.') + 1, target.length()); diff --git a/source/net/yacy/http/YaCyLegacyCredential.java b/source/net/yacy/http/YaCyLegacyCredential.java index 78c3b8c08..dbd7a4abb 100644 --- a/source/net/yacy/http/YaCyLegacyCredential.java +++ b/source/net/yacy/http/YaCyLegacyCredential.java @@ -27,8 +27,8 @@ package net.yacy.http; import net.yacy.cora.order.Base64Order; import net.yacy.cora.order.Digest; import net.yacy.kelondro.util.MapTools; +import org.eclipse.jetty.util.security.Credential; -import org.eclipse.jetty.http.security.Credential; /** diff --git a/source/net/yacy/http/YaCyLoginService.java b/source/net/yacy/http/YaCyLoginService.java index 6a902ba6b..d4a4faf01 100644 --- a/source/net/yacy/http/YaCyLoginService.java +++ b/source/net/yacy/http/YaCyLoginService.java @@ -31,10 +31,10 @@ import javax.security.auth.Subject; import net.yacy.search.Switchboard; -import org.eclipse.jetty.http.security.Credential; import org.eclipse.jetty.security.IdentityService; import org.eclipse.jetty.security.MappedLoginService; import org.eclipse.jetty.server.UserIdentity; +import org.eclipse.jetty.util.security.Credential; /** * jetty login service, provides one admin user diff --git a/source/net/yacy/http/YaCySecurityHandler.java b/source/net/yacy/http/YaCySecurityHandler.java index 08ab4d254..5699c542c 100644 --- a/source/net/yacy/http/YaCySecurityHandler.java +++ b/source/net/yacy/http/YaCySecurityHandler.java @@ -30,6 +30,7 @@ import java.net.MalformedURLException; import net.yacy.cora.protocol.Domains; import net.yacy.kelondro.data.meta.DigestURI; import net.yacy.search.Switchboard; +import org.eclipse.jetty.security.RoleInfo; import org.eclipse.jetty.security.SecurityHandler; import org.eclipse.jetty.server.Request; @@ -42,46 +43,50 @@ import org.eclipse.jetty.server.UserIdentity; */ public class YaCySecurityHandler extends SecurityHandler { - @Override - protected boolean checkUserDataPermissions(String pathInContext, Request request, - Response response, Object constraintInfo) throws IOException { - // check the SecurityHandler code, denying here does not provide authentication - return true; - } + @Override + protected boolean checkUserDataPermissions(String pathInContext, Request request, + Response response, RoleInfo constraintInfo) throws IOException { + // check the SecurityHandler code, denying here does not provide authentication + return constraintInfo.isChecked(); + } - @Override - protected boolean checkWebResourcePermissions(String pathInContext, Request request, - Response response, Object constraintInfo, UserIdentity userIdentity) throws IOException { - // deny and request for authentication, if necessary - Boolean authMand = (Boolean)constraintInfo; - return !authMand || request.isUserInRole("admin"); - } + @Override + protected boolean checkWebResourcePermissions(String pathInContext, Request request, + Response response, Object constraintInfo, UserIdentity userIdentity) throws IOException { + // deny and request for authentication, if necessary + boolean auth = ((RoleInfo) constraintInfo).isChecked(); + return auth || request.isUserInRole("admin"); + } - @Override - protected boolean isAuthMandatory(Request base_request, Response base_response, Object constraintInfo) { - Boolean authMand = (Boolean)constraintInfo; - return authMand; - } + @Override + protected boolean isAuthMandatory(Request base_request, Response base_response, Object constraintInfo) { + return false; + } - @Override - protected Object prepareConstraintInfo(String pathInContext, Request request) { - final Switchboard sb = Switchboard.getSwitchboard(); + @Override + protected RoleInfo prepareConstraintInfo(String pathInContext, Request request) { + final Switchboard sb = Switchboard.getSwitchboard(); final boolean adminAccountForLocalhost = sb.getConfigBool("adminAccountForLocalhost", false); final String adminAccountBase64MD5 = sb.getConfig(YaCyLegacyCredential.ADMIN_ACCOUNT_B64MD5, ""); String refererHost; - try { - refererHost = new DigestURI(request.getHeader("Referer")).getHost(); - } catch (MalformedURLException e) { - refererHost = null; - } + try { + refererHost = new DigestURI(request.getHeader("Referer")).getHost(); + } catch (MalformedURLException e) { + refererHost = null; + } final boolean accessFromLocalhost = Domains.isLocalhost(request.getRemoteHost()) && (refererHost == null || refererHost.length() == 0 || Domains.isLocalhost(refererHost)); final boolean grantedForLocalhost = adminAccountForLocalhost && accessFromLocalhost; final boolean protectedPage = pathInContext.indexOf("_p.") > 0; final boolean accountEmpty = adminAccountBase64MD5.length() == 0; final boolean yacyBot = request.getHeader("User-Agent").startsWith("yacybot"); - - return protectedPage && ((!grantedForLocalhost && !accountEmpty) || yacyBot); - } + RoleInfo roleinfo = new RoleInfo(); + if (protectedPage) { // TODO: handle admin authentication & none public site + roleinfo.setChecked(((grantedForLocalhost && !accountEmpty) || yacyBot)); + } else { + roleinfo.setChecked(true); + } + return roleinfo; + } } diff --git a/source/net/yacy/yacy.java b/source/net/yacy/yacy.java index db77f78ce..0924d5512 100644 --- a/source/net/yacy/yacy.java +++ b/source/net/yacy/yacy.java @@ -331,7 +331,7 @@ public final class yacy { try { // start jetty http server - HttpServer httpServer = new HttpServer((int)port); + HttpServer httpServer = new HttpServer(port); httpServer.start(); //final HTTPDemon protocolHandler = new HTTPDemon(sb); //final serverCore server = new serverCore( diff --git a/test/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnectorTest.java b/test/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnectorTest.java index ce347ee77..69ae7abbf 100644 --- a/test/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnectorTest.java +++ b/test/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnectorTest.java @@ -12,14 +12,13 @@ import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrException; import org.apache.solr.common.SolrInputDocument; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.FilterHolder; +import org.eclipse.jetty.servlet.ServletContextHandler.Context; import org.junit.After; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; -import org.mortbay.jetty.Handler; -import org.mortbay.jetty.Server; -import org.mortbay.jetty.servlet.Context; -import org.mortbay.jetty.servlet.FilterHolder; public class EmbeddedSolrConnectorTest {