package org.apereo.cas.authentication.principal;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apereo.cas.CasProtocolConstants;
import org.apereo.cas.web.support.WebUtils;
import org.springframework.http.HttpMethod;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
/**
* Abstract response builder that provides wrappers for building
* post and redirect responses.
*
* @author Misagh Moayyed
* @since 4.2
*/
public abstract class AbstractWebApplicationServiceResponseBuilder implements ResponseBuilder<WebApplicationService> {
private static final long serialVersionUID = -4584738964007702423L;
/**
* Build redirect.
*
* @param service the service
* @param parameters the parameters
* @return the response
*/
protected Response buildRedirect(final WebApplicationService service, final Map<String, String> parameters) {
return DefaultResponse.getRedirectResponse(service.getOriginalUrl(), parameters);
}
/**
* Build post.
*
* @param service the service
* @param parameters the parameters
* @return the response
*/
protected Response buildPost(final WebApplicationService service, final Map<String, String> parameters) {
return DefaultResponse.getPostResponse(service.getOriginalUrl(), parameters);
}
/**
* Determine response type response.
*
* @return the response type
*/
protected Response.ResponseType getWebApplicationServiceResponseType() {
final HttpServletRequest request = WebUtils.getHttpServletRequestFromRequestAttributes();
final String method = request != null ? request.getParameter(CasProtocolConstants.PARAMETER_METHOD) : null;
return StringUtils.isNotBlank(method)
&& HttpMethod.POST.name().equalsIgnoreCase(method) ? Response.ResponseType.POST : Response.ResponseType.REDIRECT;
}
@Override
public boolean equals(final Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (obj.getClass() != getClass()) {
return false;
}
return new EqualsBuilder().isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder().toHashCode();
}
@Override
public int getOrder() {
return 0;
}
}