/* * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package com.xpn.xwiki.web; import java.io.BufferedReader; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URL; import java.security.Principal; import java.util.Collection; import java.util.Collections; import java.util.Enumeration; import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; import javax.servlet.AsyncContext; import javax.servlet.DispatcherType; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletInputStream; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.servlet.http.Part; import org.apache.commons.lang3.ArrayUtils; /** * This stub is intended to simulate a servlet request in a daemon context, in order to be able to create a custom XWiki * context. This trick is used in to give a daemon thread access to the XWiki api. * * @version $Id: f20cc42afd7a17fb8bfea20ebd26aa7db90d3b09 $ */ public class XWikiServletRequestStub implements XWikiRequest { /** * The scheme used by the runtime instance. This is required for creating URLs from daemon thread. */ private String scheme; private String host; /** * The context path used by the runtime instance. This is required for creating URLs from daemon thread. */ private String contextPath; private StringBuffer requestURL; private String requestURI; private String serverName; private Map<String, String[]> parameters; public XWikiServletRequestStub() { setHost(""); } /** * @since 8.4RC1 */ public XWikiServletRequestStub(URL requestURL, Map<String, String[]> requestParameters) { if (requestURL != null) { setScheme(requestURL.getProtocol()); setHost(requestURL.getHost()); setRequestURI(requestURL.toString()); setrequestURL(new StringBuffer(requestURL.toString())); } else { setHost(""); } this.parameters = clone(requestParameters); } private Map<String, String[]> clone(Map<String, String[]> map) { Map<String, String[]> clone; if (this.parameters != null) { clone = new LinkedHashMap<>(map.size()); for (Map.Entry<String, String[]> entry : map.entrySet()) { clone.put(entry.getKey(), entry.getValue().clone()); } } else { clone = null; } return clone; } public void setContextPath(String contextPath) { this.contextPath = contextPath; } public void setHost(String host) { this.host = host; } public void setScheme(String scheme) { this.scheme = scheme; } /** * @since 7.1RC1 * @since 6.4.5 */ public void setrequestURL(StringBuffer requestURL) { this.requestURL = requestURL; } /** * @since 7.2M2 */ public void setRequestURI(String requestURI) { this.requestURI = requestURI; } /** * @since 7.1RC1 * @since 6.4.5 */ public void setServerName(String serverName) { this.serverName = serverName; } @Override public String getHeader(String s) { if (s.equals("x-forwarded-host")) { return this.host; } return ""; } /** * @since 7.3M1 */ public void put(String key, String value) { if (this.parameters == null) { this.parameters = new LinkedHashMap<>(); } String[] values = this.parameters.get(key); if (values == null) { values = new String[] { value }; } else { values = ArrayUtils.add(values, value); } this.parameters.put(key, values); } @Override public String get(String name) { return getParameter(name); } @Override public HttpServletRequest getHttpServletRequest() { return null; } @Override public Cookie getCookie(String cookieName) { return null; } @Override public String getAuthType() { return ""; } @Override public Cookie[] getCookies() { return new Cookie[0]; } @Override public long getDateHeader(String s) { return 0; } @Override public Enumeration<String> getHeaders(String s) { return null; } @Override public Enumeration<String> getHeaderNames() { return null; } @Override public int getIntHeader(String s) { return 0; } @Override public String getMethod() { return null; } @Override public String getPathInfo() { return null; } @Override public String getPathTranslated() { return null; } @Override public String getContextPath() { return this.contextPath; } @Override public String getQueryString() { return ""; } @Override public String getRemoteUser() { return null; } @Override public boolean isUserInRole(String s) { return false; } @Override public Principal getUserPrincipal() { return null; } @Override public String getRequestedSessionId() { return null; } @Override public String getRequestURI() { return this.requestURI; } @Override public StringBuffer getRequestURL() { return this.requestURL == null ? new StringBuffer() : this.requestURL; } @Override public String getServletPath() { return null; } @Override public HttpSession getSession(boolean b) { return null; } @Override public HttpSession getSession() { return null; } @Override public boolean isRequestedSessionIdValid() { return false; } @Override public boolean isRequestedSessionIdFromCookie() { return false; } @Override public boolean isRequestedSessionIdFromURL() { return false; } /** * @deprecated */ @Override @Deprecated public boolean isRequestedSessionIdFromUrl() { return false; } @Override public Object getAttribute(String s) { return null; } @Override public Enumeration<String> getAttributeNames() { return null; } @Override public String getCharacterEncoding() { return null; } @Override public void setCharacterEncoding(String s) throws UnsupportedEncodingException { } @Override public int getContentLength() { return 0; } @Override public String getContentType() { return null; } @Override public ServletInputStream getInputStream() throws IOException { return null; } @Override public String getParameter(String s) { if (this.parameters != null) { String[] values = this.parameters.get(s); return values != null && values.length > 0 ? values[0] : null; } return null; } @Override public Enumeration<String> getParameterNames() { return this.parameters != null ? Collections.enumeration(this.parameters.keySet()) : null; } @Override public String[] getParameterValues(String s) { if (this.parameters != null) { String[] values = this.parameters.get(s); return values != null ? values.clone() : null; } return null; } @Override public Map<String, String[]> getParameterMap() { return clone(this.parameters); } @Override public String getProtocol() { return null; } @Override public String getScheme() { return this.scheme; } @Override public String getServerName() { return this.serverName; } @Override public int getServerPort() { return 0; } @Override public BufferedReader getReader() throws IOException { return null; } @Override public String getRemoteAddr() { return null; } @Override public String getRemoteHost() { return null; } @Override public void setAttribute(String s, Object o) { } @Override public void removeAttribute(String s) { } @Override public Locale getLocale() { return null; } @Override public Enumeration<Locale> getLocales() { return null; } @Override public boolean isSecure() { return false; } @Override public RequestDispatcher getRequestDispatcher(String s) { return null; } /** * @deprecated */ @Override @Deprecated public String getRealPath(String s) { return null; } @Override public int getRemotePort() { return 0; } @Override public String getLocalName() { return null; } @Override public String getLocalAddr() { return null; } @Override public int getLocalPort() { return 0; } @Override public boolean authenticate(HttpServletResponse httpServletResponse) throws IOException, ServletException { return false; } @Override public void login(String s, String s1) throws ServletException { } @Override public void logout() throws ServletException { } @Override public Collection<Part> getParts() throws IOException, ServletException { return null; } @Override public Part getPart(String s) throws IOException, ServletException { return null; } @Override public ServletContext getServletContext() { return null; } @Override public AsyncContext startAsync() throws IllegalStateException { return null; } @Override public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) throws IllegalStateException { return null; } @Override public boolean isAsyncStarted() { return false; } @Override public boolean isAsyncSupported() { return false; } @Override public AsyncContext getAsyncContext() { return null; } @Override public DispatcherType getDispatcherType() { return null; } }