package org.apereo.cas.authentication.principal;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apereo.cas.CasProtocolConstants;
import org.springframework.util.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
* Default response builder that passes back the ticket
* id to the original url of the service based on the response type.
*
* @author Misagh Moayyed
* @since 4.2
*/
public class WebApplicationServiceResponseBuilder extends AbstractWebApplicationServiceResponseBuilder {
private static final long serialVersionUID = -851233878780818494L;
public WebApplicationServiceResponseBuilder() {
}
@Override
public Response build(final WebApplicationService service, final String serviceTicketId) {
final Map<String, String> parameters = new HashMap<>();
if (StringUtils.hasText(serviceTicketId)) {
parameters.put(CasProtocolConstants.PARAMETER_TICKET, serviceTicketId);
}
final WebApplicationService finalService = buildInternal(service, parameters);
final Response.ResponseType responseType = getWebApplicationServiceResponseType();
if (responseType == Response.ResponseType.POST) {
return buildPost(finalService, parameters);
}
if (responseType == Response.ResponseType.REDIRECT) {
return buildRedirect(finalService, parameters);
}
throw new IllegalArgumentException("Response type is valid. Only POST/REDIRECT are supported");
}
/**
* Build internal service.
*
* @param service the service
* @param parameters the parameters
* @return the service
*/
protected WebApplicationService buildInternal(final WebApplicationService service, final Map<String, String> parameters) {
return service;
}
@Override
public boolean equals(final Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (obj.getClass() != getClass()) {
return false;
}
final WebApplicationServiceResponseBuilder rhs = (WebApplicationServiceResponseBuilder) obj;
return new EqualsBuilder()
.appendSuper(super.equals(obj))
.isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder()
.appendSuper(super.hashCode())
.toHashCode();
}
@Override
public boolean supports(final WebApplicationService service) {
return service instanceof WebApplicationService;
}
@Override
public int getOrder() {
return Integer.MAX_VALUE;
}
}