001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.wicket.protocol.ws.javax; 018 019import java.io.BufferedReader; 020import java.io.IOException; 021import java.io.UnsupportedEncodingException; 022import java.security.Principal; 023import java.util.Collection; 024import java.util.Enumeration; 025import java.util.HashMap; 026import java.util.Iterator; 027import java.util.List; 028import java.util.Locale; 029import java.util.Map; 030import java.util.Set; 031 032import javax.servlet.AsyncContext; 033import javax.servlet.DispatcherType; 034import javax.servlet.RequestDispatcher; 035import javax.servlet.ServletContext; 036import javax.servlet.ServletException; 037import javax.servlet.ServletInputStream; 038import javax.servlet.ServletRequest; 039import javax.servlet.ServletResponse; 040import javax.servlet.http.Cookie; 041import javax.servlet.http.HttpServletRequest; 042import javax.servlet.http.HttpServletResponse; 043import javax.servlet.http.HttpSession; 044import javax.servlet.http.HttpUpgradeHandler; 045import javax.servlet.http.Part; 046import javax.websocket.EndpointConfig; 047import javax.websocket.Session; 048 049import org.apache.wicket.util.string.StringValue; 050 051/** 052 * An artificial HttpServletRequest with data collected from the 053 * available WebSocket Session and from the HandshakeRequest 054 */ 055public class JavaxUpgradeHttpRequest implements HttpServletRequest 056{ 057 private final HttpSession httpSession; 058 private final String queryString; 059 private final Principal userPrincipal; 060 private final String requestUri; 061 private final Map<String, String[]> parametersMap; 062 private final Map<String, List<String>> headers; 063 private final String contextPath; 064 065 public JavaxUpgradeHttpRequest(final Session session, EndpointConfig endpointConfig) 066 { 067 Map<String, Object> userProperties = session.getUserProperties(); 068 069 if (userProperties == null || userProperties.isEmpty()) 070 { 071 // workaround for JBoss Wildfly 8.0.Final 072 userProperties = endpointConfig.getUserProperties(); 073 } 074 075 this.httpSession = (HttpSession) userProperties.get("session"); 076 this.headers = (Map<String, List<String>>) userProperties.get("headers"); 077 this.queryString = session.getQueryString(); 078 this.userPrincipal = session.getUserPrincipal(); 079 Object requestURI = session.getRequestURI(); 080 this.requestUri = requestURI != null ? requestURI.toString() : ""; 081 this.contextPath = httpSession.getServletContext().getContextPath(); 082 083 this.parametersMap = new HashMap<>(); 084 085 Map<String, List<String>> parameters = session.getRequestParameterMap(); 086 if (parameters != null) 087 { 088 for (Map.Entry<String, List<String>> entry : parameters.entrySet()) 089 { 090 String name = entry.getKey(); 091 List<String> value = entry.getValue(); 092 parametersMap.put(name, value.toArray(new String[0])); 093 } 094 } 095 } 096 097 @Override 098 public String getAuthType() 099 { 100 return null; 101 } 102 103 @Override 104 public Cookie[] getCookies() 105 { 106 return new Cookie[0]; 107 } 108 109 @Override 110 public long getDateHeader(String name) 111 { 112 String headerValue = getHeader(name); 113 return StringValue.valueOf(headerValue).toLong(); 114 } 115 116 @Override 117 public String getHeader(String name) 118 { 119 String value = null; 120 if (headers != null) 121 { 122 List<String> headerValues = headers.get(name); 123 if (headerValues != null && !headerValues.isEmpty()) 124 { 125 value = headerValues.get(0); 126 } 127 } 128 return value; 129 } 130 131 @Override 132 public Enumeration<String> getHeaders(String name) 133 { 134 Enumeration<String> values = null; 135 if (headers != null) 136 { 137 List<String> headerValues = headers.get(name); 138 if (headerValues != null && !headerValues.isEmpty()) 139 { 140 final Iterator<String> iterator = headerValues.iterator(); 141 values = new Enumeration<String>() 142 { 143 @Override 144 public boolean hasMoreElements() 145 { 146 return iterator.hasNext(); 147 } 148 149 @Override 150 public String nextElement() 151 { 152 return iterator.next(); 153 } 154 }; 155 } 156 } 157 return values; 158 } 159 160 @Override 161 public Enumeration<String> getHeaderNames() 162 { 163 Enumeration<String> names = null; 164 if (headers != null) 165 { 166 Set<String> headerNames = headers.keySet(); 167 if (!headerNames.isEmpty()) 168 { 169 final Iterator<String> iterator = headerNames.iterator(); 170 names = new Enumeration<String>() 171 { 172 @Override 173 public boolean hasMoreElements() 174 { 175 return iterator.hasNext(); 176 } 177 178 @Override 179 public String nextElement() 180 { 181 return iterator.next(); 182 } 183 }; 184 } 185 } 186 return names; 187 } 188 189 @Override 190 public int getIntHeader(String name) 191 { 192 String headerValue = getHeader(name); 193 return StringValue.valueOf(headerValue).toInt(); 194 } 195 196 @Override 197 public String getMethod() 198 { 199 return null; 200 } 201 202 @Override 203 public String getPathInfo() 204 { 205 return null; 206 } 207 208 @Override 209 public String getPathTranslated() 210 { 211 return null; 212 } 213 214 @Override 215 public String getContextPath() 216 { 217 return contextPath; 218 } 219 220 @Override 221 public String getQueryString() 222 { 223 return queryString; 224 } 225 226 @Override 227 public String getRemoteUser() 228 { 229 return null; 230 } 231 232 @Override 233 public boolean isUserInRole(String role) 234 { 235 return false; 236 } 237 238 @Override 239 public Principal getUserPrincipal() 240 { 241 return userPrincipal; 242 } 243 244 @Override 245 public String getRequestedSessionId() 246 { 247 return null; 248 } 249 250 @Override 251 public String getRequestURI() 252 { 253 return requestUri; 254 } 255 256 @Override 257 public StringBuffer getRequestURL() 258 { 259 return new StringBuffer(requestUri); 260 } 261 262 @Override 263 public String getServletPath() 264 { 265 return null; 266 } 267 268 @Override 269 public HttpSession getSession(boolean create) 270 { 271 return httpSession; 272 } 273 274 @Override 275 public HttpSession getSession() 276 { 277 return httpSession; 278 } 279 280 @Override 281 public String changeSessionId() 282 { 283 return null; 284 } 285 286 @Override 287 public boolean isRequestedSessionIdValid() 288 { 289 return true; 290 } 291 292 @Override 293 public boolean isRequestedSessionIdFromCookie() 294 { 295 return true; 296 } 297 298 @Override 299 public boolean isRequestedSessionIdFromURL() 300 { 301 return false; 302 } 303 304 @Override 305 public boolean isRequestedSessionIdFromUrl() 306 { 307 return false; 308 } 309 310 @Override 311 public boolean authenticate(HttpServletResponse response) throws IOException, ServletException 312 { 313 return false; 314 } 315 316 @Override 317 public void login(String username, String password) throws ServletException 318 { 319 } 320 321 @Override 322 public void logout() throws ServletException 323 { 324 } 325 326 @Override 327 public Collection<Part> getParts() throws IOException, ServletException 328 { 329 return null; 330 } 331 332 @Override 333 public Part getPart(String name) throws IOException, ServletException 334 { 335 return null; 336 } 337 338 @Override 339 public <T extends HttpUpgradeHandler> T upgrade(Class<T> tClass) throws IOException, ServletException 340 { 341 return null; 342 } 343 344 @Override 345 public Object getAttribute(String name) 346 { 347 return null; 348 } 349 350 @Override 351 public Enumeration<String> getAttributeNames() 352 { 353 return new Enumeration<String>() 354 { 355 @Override 356 public boolean hasMoreElements() 357 { 358 return false; 359 } 360 361 @Override 362 public String nextElement() 363 { 364 return null; 365 } 366 }; 367 } 368 369 @Override 370 public String getCharacterEncoding() 371 { 372 return null; 373 } 374 375 @Override 376 public void setCharacterEncoding(String env) throws UnsupportedEncodingException 377 { 378 } 379 380 @Override 381 public int getContentLength() 382 { 383 return 0; 384 } 385 386 @Override 387 public long getContentLengthLong() 388 { 389 return 0; 390 } 391 392 @Override 393 public String getContentType() 394 { 395 return null; 396 } 397 398 @Override 399 public ServletInputStream getInputStream() throws IOException 400 { 401 return null; 402 } 403 404 @Override 405 public String getParameter(String name) 406 { 407 String[] values = parametersMap.get(name); 408 return values != null ? values[0] : null; 409 } 410 411 @Override 412 public Enumeration<String> getParameterNames() 413 { 414 final Iterator<String> iterator = parametersMap.keySet().iterator(); 415 return new Enumeration<>() 416 { 417 @Override 418 public boolean hasMoreElements() 419 { 420 return iterator.hasNext(); 421 } 422 423 @Override 424 public String nextElement() 425 { 426 return iterator.next(); 427 } 428 }; 429 } 430 431 @Override 432 public String[] getParameterValues(String name) 433 { 434 return parametersMap.get(name); 435 } 436 437 @Override 438 public Map<String, String[]> getParameterMap() 439 { 440 return parametersMap; 441 } 442 443 @Override 444 public String getProtocol() 445 { 446 return null; 447 } 448 449 @Override 450 public String getScheme() 451 { 452 return null; 453 } 454 455 @Override 456 public String getServerName() 457 { 458 return null; 459 } 460 461 @Override 462 public int getServerPort() 463 { 464 return 0; 465 } 466 467 @Override 468 public BufferedReader getReader() throws IOException 469 { 470 return null; 471 } 472 473 @Override 474 public String getRemoteAddr() 475 { 476 return null; 477 } 478 479 @Override 480 public String getRemoteHost() 481 { 482 return null; 483 } 484 485 @Override 486 public void setAttribute(String name, Object o) 487 { 488 } 489 490 @Override 491 public void removeAttribute(String name) 492 { 493 } 494 495 @Override 496 public Locale getLocale() 497 { 498 return null; 499 } 500 501 @Override 502 public Enumeration<Locale> getLocales() 503 { 504 return null; 505 } 506 507 @Override 508 public boolean isSecure() 509 { 510 return false; 511 } 512 513 @Override 514 public RequestDispatcher getRequestDispatcher(String path) 515 { 516 return null; 517 } 518 519 @Override 520 public String getRealPath(String path) 521 { 522 return null; 523 } 524 525 @Override 526 public int getRemotePort() 527 { 528 return 0; 529 } 530 531 @Override 532 public String getLocalName() 533 { 534 return null; 535 } 536 537 @Override 538 public String getLocalAddr() 539 { 540 return null; 541 } 542 543 @Override 544 public int getLocalPort() 545 { 546 return 0; 547 } 548 549 @Override 550 public ServletContext getServletContext() 551 { 552 return null; 553 } 554 555 @Override 556 public AsyncContext startAsync() throws IllegalStateException 557 { 558 return null; 559 } 560 561 @Override 562 public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) throws IllegalStateException 563 { 564 return null; 565 } 566 567 @Override 568 public boolean isAsyncStarted() 569 { 570 return false; 571 } 572 573 @Override 574 public boolean isAsyncSupported() 575 { 576 return false; 577 } 578 579 @Override 580 public AsyncContext getAsyncContext() 581 { 582 return null; 583 } 584 585 @Override 586 public DispatcherType getDispatcherType() 587 { 588 return null; 589 } 590}