blob: 06637bd8b9e4020ffd2b06aed64049b731850a4f [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.cxf.fediz.service.idp.util;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.util.Assert;
import org.springframework.webflow.execution.RequestContext;
/**
* Utility class to bind with webflow artifacts
*/
public final class WebUtils {
private WebUtils() {
super();
}
public static HttpServletRequest getHttpServletRequest(
final RequestContext context) {
Object request = context.getExternalContext().getNativeRequest();
Assert.isInstanceOf(HttpServletRequest.class,
request,
"Cannot obtain HttpServletRequest from event of type: "
+ context.getExternalContext().getClass().getName());
return (HttpServletRequest) request;
}
public static HttpSession getHttpSession(final RequestContext context) {
HttpServletRequest httpServletRequest = getHttpServletRequest(context);
return httpServletRequest.getSession();
}
public static HttpServletResponse getHttpServletResponse(
final RequestContext context) {
Object response = context.getExternalContext().getNativeResponse();
Assert.isInstanceOf(HttpServletResponse.class,
response,
"Cannot obtain HttpServletResponse from event of type: "
+ context.getExternalContext().getClass().getName());
return (HttpServletResponse) response;
}
public static String getHttpHeader(RequestContext requestContext, String headerName) {
return getHttpServletRequest(requestContext).getHeader(headerName);
}
public static void putAttributeInRequestScope(final RequestContext context,
final String attributeKey, final Object attributeValue) {
context.getRequestScope().put(attributeKey, attributeValue);
}
public static void putAttributeInExternalContext(
final RequestContext context, final String attributeKey,
final Object attributeValue) {
context.getExternalContext().getSessionMap()
.put(attributeKey, attributeValue);
}
/**
* put attribute in request or in session depending on storeInSession.
*
* @param context
* @param attributeKey
*/
public static void putAttribute(final RequestContext context,
final String attributeKey, final Object attributeValue,
boolean storeInSession) {
if (storeInSession) {
putAttributeInExternalContext(context, attributeKey, attributeValue);
} else {
putAttributeInRequestScope(context, attributeKey, attributeValue);
}
}
public static Object getAttributeFromRequestScope(
final RequestContext context, final String attributeKey) {
return context.getRequestScope().get(attributeKey);
}
public static Object getAttributeFromExternalContext(
final RequestContext context, final String attributeKey) {
return context.getExternalContext().getSessionMap()
.get(attributeKey);
}
/**
* get attribute from request; if not found get it from session.
*
* @param context
* @param attributeKey
* @return the attribute from the request or session
*/
public static Object getAttribute(final RequestContext context,
final String attributeKey) {
Object value = getAttributeFromRequestScope(context, attributeKey);
if (value != null) {
return value;
}
return getAttributeFromExternalContext(context, attributeKey);
}
public static Object removeAttributeFromRequestScope(
final RequestContext context, final String attributeKey) {
return context.getRequestScope().remove(attributeKey);
}
public static Object removeAttributeFromExternalContext(
final RequestContext context, final String attributeKey) {
return context.getExternalContext().getSessionMap()
.remove(attributeKey);
}
/**
* remove attribute from request and session.
*
* @param context
* @param attributeKey
* @return the removed attribute
*/
public static Object removeAttribute(final RequestContext context,
final String attributeKey) {
Object valueReq = removeAttributeFromRequestScope(context, attributeKey);
Object valueSes = removeAttributeFromExternalContext(context,
attributeKey);
if (valueSes != null) {
return valueSes; // not clean if request has different value !
}
if (valueReq != null) {
return valueReq;
}
return null;
}
public static void putAttributeInFlowScope(final RequestContext context,
final String attributeKey, final Object attributeValue) {
context.getFlowScope().put(attributeKey, attributeValue);
}
public static Object getAttributeFromFlowScope(
final RequestContext context, final String attributeKey) {
return context.getFlowScope().get(attributeKey);
}
public static Object removeAttributeFromFlowScope(
final RequestContext context, final String attributeKey) {
return context.getFlowScope().remove(attributeKey);
}
public static String getParamFromRequestParameters(
final RequestContext context, final String attributeKey) {
return context.getRequestParameters().get(attributeKey);
}
public static Cookie readCookie(
final RequestContext context, final String cookieName) {
HttpServletRequest httpServletRequest = getHttpServletRequest(context);
Cookie[] cookies = httpServletRequest.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals(cookieName)) {
return cookies[i];
}
}
}
return null;
}
public static void addCookie(
final RequestContext context, final String cookieName, final String cookieValue) {
HttpServletResponse httpServletResponse = getHttpServletResponse(context);
Cookie cookie = new Cookie(cookieName, cookieValue);
cookie.setSecure(true);
cookie.setMaxAge(-1);
cookie.setHttpOnly(true);
cookie.setPath("/fediz-idp");
httpServletResponse.addCookie(cookie);
}
public static void removeCookie(
final RequestContext context, final String cookieName) {
HttpServletResponse httpServletResponse = getHttpServletResponse(context);
Cookie cookie = readCookie(context, cookieName);
if (cookie != null) {
cookie.setMaxAge(0);
cookie.setValue("");
httpServletResponse.addCookie(cookie);
}
}
}