| /* |
| * 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.unomi.web; |
| |
| import org.apache.unomi.api.Persona; |
| import org.apache.unomi.api.Profile; |
| |
| import javax.servlet.ServletResponse; |
| import javax.servlet.http.Cookie; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| import java.io.BufferedReader; |
| import java.io.IOException; |
| import java.util.Enumeration; |
| import java.util.LinkedHashMap; |
| import java.util.Map; |
| |
| public class HttpUtils { |
| |
| public static void setupCORSHeaders(HttpServletRequest httpServletRequest, ServletResponse response) throws IOException { |
| if (response instanceof HttpServletResponse) { |
| HttpServletResponse httpServletResponse = (HttpServletResponse) response; |
| if (httpServletRequest != null && httpServletRequest.getHeader("Origin") != null) { |
| httpServletResponse.setHeader("Access-Control-Allow-Origin", httpServletRequest.getHeader("Origin")); |
| } else { |
| httpServletResponse.setHeader("Access-Control-Allow-Origin", "*"); |
| } |
| httpServletResponse.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); |
| httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true"); |
| httpServletResponse.setHeader("Access-Control-Allow-Methods", "OPTIONS, POST, GET"); |
| // httpServletResponse.setHeader("Access-Control-Max-Age", "600"); |
| // httpServletResponse.setHeader("Access-Control-Expose-Headers","Access-Control-Allow-Origin"); |
| // httpServletResponse.flushBuffer(); |
| } |
| } |
| |
| public static String dumpRequestInfo(HttpServletRequest httpServletRequest) { |
| StringBuilder stringBuilder = new StringBuilder(); |
| stringBuilder.append("\n"); |
| stringBuilder.append("======================================================================================\n"); |
| stringBuilder.append(dumpBasicRequestInfo(httpServletRequest)); |
| stringBuilder.append(dumpRequestHeaders(httpServletRequest)); |
| stringBuilder.append(dumpRequestCookies(httpServletRequest.getCookies())); |
| stringBuilder.append("======================================================================================\n"); |
| return stringBuilder.toString(); |
| } |
| |
| public static String dumpBasicRequestInfo(HttpServletRequest httpServletRequest) { |
| StringBuilder stringBuilder = new StringBuilder(); |
| stringBuilder.append(httpServletRequest.getMethod()).append(" ").append(httpServletRequest.getRequestURI()); |
| if (httpServletRequest.getQueryString() != null) { |
| stringBuilder.append("?").append(httpServletRequest.getQueryString()); |
| } |
| stringBuilder.append(" serverName=").append(httpServletRequest.getServerName()).append(" serverPort=").append(httpServletRequest.getServerPort()).append(" remoteAddr=").append(httpServletRequest.getRemoteAddr()).append(" remotePort=").append(httpServletRequest.getRemotePort()).append("\n"); |
| return stringBuilder.toString(); |
| } |
| |
| |
| public static String dumpRequestCookies(Cookie[] cookies) { |
| StringBuilder stringBuilder = new StringBuilder(); |
| stringBuilder.append("Cookies:\n"); |
| if (cookies == null) { |
| stringBuilder.append(" none"); |
| } else { |
| for (Cookie cookie : cookies) { |
| stringBuilder.append(" ").append(cookie.getName()).append("=").append(cookie.getValue()).append(" domain=").append(cookie.getDomain()).append(" path=").append(cookie.getPath()).append(" maxAge=").append(cookie.getMaxAge()).append(" httpOnly=").append(cookie.isHttpOnly()).append(" secure=").append(cookie.getSecure()).append(" version=").append(cookie.getVersion()).append(" comment=").append(cookie.getComment()).append("\n"); |
| } |
| } |
| return stringBuilder.toString(); |
| } |
| |
| public static String dumpRequestHeaders(HttpServletRequest httpServletRequest) { |
| StringBuilder stringBuilder = new StringBuilder(); |
| stringBuilder.append("Headers:\n"); |
| Enumeration<String> headerNameEnum = httpServletRequest.getHeaderNames(); |
| while (headerNameEnum.hasMoreElements()) { |
| String headerName = headerNameEnum.nextElement(); |
| stringBuilder.append(" ").append(headerName).append(": ").append(httpServletRequest.getHeader(headerName)).append("\n"); |
| } |
| return stringBuilder.toString(); |
| } |
| |
| public static String getBaseRequestURL(HttpServletRequest httpServletRequest) { |
| String baseRequestURL; |
| baseRequestURL = httpServletRequest.getScheme() + "://" + httpServletRequest.getServerName(); |
| if (("http".equals(httpServletRequest.getScheme()) && (httpServletRequest.getServerPort() == 80)) || |
| ("https".equals(httpServletRequest.getScheme()) && (httpServletRequest.getServerPort() == 443))) { |
| // normal case, don't add the port |
| } else { |
| baseRequestURL += ":" + httpServletRequest.getServerPort(); |
| } |
| return baseRequestURL; |
| } |
| |
| public static void sendProfileCookie(Profile profile, ServletResponse response, String profileIdCookieName, String profileIdCookieDomain, int profileIdCookieMaxAgeInSeconds) { |
| if (response instanceof HttpServletResponse) { |
| HttpServletResponse httpServletResponse = (HttpServletResponse) response; |
| if (!(profile instanceof Persona)) { |
| Cookie profileIdCookie = new Cookie(profileIdCookieName, profile.getItemId()); |
| profileIdCookie.setPath("/"); |
| if (profileIdCookieDomain != null && !profileIdCookieDomain.equals("")) { |
| profileIdCookie.setDomain(profileIdCookieDomain); |
| } |
| profileIdCookie.setMaxAge(profileIdCookieMaxAgeInSeconds); |
| httpServletResponse.addCookie(profileIdCookie); |
| } |
| } |
| } |
| |
| public static void clearCookie(ServletResponse response, String cookieName) { |
| if (response instanceof HttpServletResponse) { |
| HttpServletResponse httpServletResponse = (HttpServletResponse) response; |
| Cookie cookie = new Cookie(cookieName, ""); |
| cookie.setPath("/"); |
| cookie.setMaxAge(0); |
| httpServletResponse.addCookie(cookie); |
| } |
| } |
| |
| public static Map<String, Cookie> getCookieMap(Cookie[] cookieArray) { |
| Map<String, Cookie> cookieMap = new LinkedHashMap<String, Cookie>(); |
| for (Cookie cookie : cookieArray) { |
| cookieMap.put(cookie.getName(), cookie); |
| } |
| return cookieMap; |
| } |
| |
| public static String getPayload(HttpServletRequest request) throws IOException { |
| if ("post".equals(request.getMethod().toLowerCase())) { |
| StringBuilder buffer = new StringBuilder(); |
| String line; |
| BufferedReader reader = request.getReader(); |
| while ((line = reader.readLine()) != null) { |
| buffer.append(line); |
| } |
| if (buffer.length() > 0) { |
| return buffer.toString(); |
| } |
| } else if ("get".equals(request.getMethod().toLowerCase()) && request.getParameter("payload") != null) { |
| return request.getParameter("payload"); |
| } |
| return null; |
| } |
| } |