blob: 10d1b2cd301f3d39809785c0fe91d87b3c6e66fb [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
package org.apache.wicket.protocol.ws.javax;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.Principal;
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import jakarta.servlet.AsyncContext;
import jakarta.servlet.DispatcherType;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import jakarta.servlet.http.HttpUpgradeHandler;
import jakarta.servlet.http.Part;
import jakarta.websocket.EndpointConfig;
import jakarta.websocket.Session;
import org.apache.wicket.util.string.StringValue;
/**
* An artificial HttpServletRequest with data collected from the
* available WebSocket Session and from the HandshakeRequest
*/
public class JavaxUpgradeHttpRequest implements HttpServletRequest
{
private final HttpSession httpSession;
private final String queryString;
private final Principal userPrincipal;
private final String requestUri;
private final Map<String, String[]> parametersMap;
private final Map<String, List<String>> headers;
public JavaxUpgradeHttpRequest(final Session session, EndpointConfig endpointConfig)
{
Map<String, Object> userProperties = session.getUserProperties();
if (userProperties == null || userProperties.isEmpty())
{
// workaround for JBoss Wildfly 8.0.Final
userProperties = endpointConfig.getUserProperties();
}
this.httpSession = (HttpSession) userProperties.get("session");
this.headers = (Map<String, List<String>>) userProperties.get("headers");
this.queryString = session.getQueryString();
this.userPrincipal = session.getUserPrincipal();
Object requestURI = session.getRequestURI();
this.requestUri = requestURI != null ? requestURI.toString() : "";
this.parametersMap = new HashMap<>();
Map<String, List<String>> parameters = session.getRequestParameterMap();
if (parameters != null)
{
for (Map.Entry<String, List<String>> entry : parameters.entrySet())
{
String name = entry.getKey();
List<String> value = entry.getValue();
parametersMap.put(name, value.toArray(new String[0]));
}
}
}
@Override
public String getAuthType()
{
return null;
}
@Override
public Cookie[] getCookies()
{
return new Cookie[0];
}
@Override
public long getDateHeader(String name)
{
String headerValue = getHeader(name);
return StringValue.valueOf(headerValue).toLong();
}
@Override
public String getHeader(String name)
{
String value = null;
if (headers != null)
{
List<String> headerValues = headers.get(name);
if (headerValues != null && !headerValues.isEmpty())
{
value = headerValues.get(0);
}
}
return value;
}
@Override
public Enumeration<String> getHeaders(String name)
{
Enumeration<String> values = null;
if (headers != null)
{
List<String> headerValues = headers.get(name);
if (headerValues != null && !headerValues.isEmpty())
{
final Iterator<String> iterator = headerValues.iterator();
values = new Enumeration<String>()
{
@Override
public boolean hasMoreElements()
{
return iterator.hasNext();
}
@Override
public String nextElement()
{
return iterator.next();
}
};
}
}
return values;
}
@Override
public Enumeration<String> getHeaderNames()
{
Enumeration<String> names = null;
if (headers != null)
{
Set<String> headerNames = headers.keySet();
if (!headerNames.isEmpty())
{
final Iterator<String> iterator = headerNames.iterator();
names = new Enumeration<String>()
{
@Override
public boolean hasMoreElements()
{
return iterator.hasNext();
}
@Override
public String nextElement()
{
return iterator.next();
}
};
}
}
return names;
}
@Override
public int getIntHeader(String name)
{
String headerValue = getHeader(name);
return StringValue.valueOf(headerValue).toInt();
}
@Override
public String getMethod()
{
return null;
}
@Override
public String getPathInfo()
{
return null;
}
@Override
public String getPathTranslated()
{
return null;
}
@Override
public String getContextPath()
{
return "";
}
@Override
public String getQueryString()
{
return queryString;
}
@Override
public String getRemoteUser()
{
return null;
}
@Override
public boolean isUserInRole(String role)
{
return false;
}
@Override
public Principal getUserPrincipal()
{
return userPrincipal;
}
@Override
public String getRequestedSessionId()
{
return null;
}
@Override
public String getRequestURI()
{
return requestUri;
}
@Override
public StringBuffer getRequestURL()
{
return new StringBuffer(requestUri);
}
@Override
public String getServletPath()
{
return null;
}
@Override
public HttpSession getSession(boolean create)
{
return httpSession;
}
@Override
public HttpSession getSession()
{
return httpSession;
}
@Override
public String changeSessionId()
{
return null;
}
@Override
public boolean isRequestedSessionIdValid()
{
return true;
}
@Override
public boolean isRequestedSessionIdFromCookie()
{
return true;
}
@Override
public boolean isRequestedSessionIdFromURL()
{
return false;
}
@Override
public boolean isRequestedSessionIdFromUrl()
{
return false;
}
@Override
public boolean authenticate(HttpServletResponse response) throws IOException, ServletException
{
return false;
}
@Override
public void login(String username, String password) throws ServletException
{
}
@Override
public void logout() throws ServletException
{
}
@Override
public Collection<Part> getParts() throws IOException, ServletException
{
return null;
}
@Override
public Part getPart(String name) throws IOException, ServletException
{
return null;
}
@Override
public <T extends HttpUpgradeHandler> T upgrade(Class<T> tClass) throws IOException, ServletException
{
return null;
}
@Override
public Object getAttribute(String name)
{
return null;
}
@Override
public Enumeration<String> getAttributeNames()
{
return new Enumeration<String>()
{
@Override
public boolean hasMoreElements()
{
return false;
}
@Override
public String nextElement()
{
return null;
}
};
}
@Override
public String getCharacterEncoding()
{
return null;
}
@Override
public void setCharacterEncoding(String env) throws UnsupportedEncodingException
{
}
@Override
public int getContentLength()
{
return 0;
}
@Override
public long getContentLengthLong()
{
return 0;
}
@Override
public String getContentType()
{
return null;
}
@Override
public ServletInputStream getInputStream() throws IOException
{
return null;
}
@Override
public String getParameter(String name)
{
String[] values = parametersMap.get(name);
return values != null ? values[0] : null;
}
@Override
public Enumeration<String> getParameterNames()
{
final Iterator<String> iterator = parametersMap.keySet().iterator();
return new Enumeration<>()
{
@Override
public boolean hasMoreElements()
{
return iterator.hasNext();
}
@Override
public String nextElement()
{
return iterator.next();
}
};
}
@Override
public String[] getParameterValues(String name)
{
return parametersMap.get(name);
}
@Override
public Map<String, String[]> getParameterMap()
{
return parametersMap;
}
@Override
public String getProtocol()
{
return null;
}
@Override
public String getScheme()
{
return null;
}
@Override
public String getServerName()
{
return null;
}
@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 name, Object o)
{
}
@Override
public void removeAttribute(String name)
{
}
@Override
public Locale getLocale()
{
return null;
}
@Override
public Enumeration<Locale> getLocales()
{
return null;
}
@Override
public boolean isSecure()
{
return false;
}
@Override
public RequestDispatcher getRequestDispatcher(String path)
{
return null;
}
@Override
public String getRealPath(String path)
{
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 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;
}
}