package org.pac4j.play.http;
import org.pac4j.core.context.HttpConstants;
import org.pac4j.core.exception.TechnicalException;
import org.pac4j.core.http.HttpActionAdapter;
import org.pac4j.play.PlayWebContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import play.mvc.Http;
import play.mvc.Result;
import java.util.Map;
import static play.mvc.Results.*;
/**
* Default implementation.
*
* @author Jerome Leleu
* @since 2.0.0
*/
public class DefaultHttpActionAdapter implements HttpActionAdapter<Result, PlayWebContext> {
protected final Logger logger = LoggerFactory.getLogger(getClass());
@Override
public Result adapt(final int code, final PlayWebContext context) {
logger.debug("requires HTTP action: {}", code);
if (code == HttpConstants.UNAUTHORIZED) {
return unauthorized("authentication required");
} else if (code == HttpConstants.FORBIDDEN) {
return forbidden("forbidden");
} else if (code == HttpConstants.TEMP_REDIRECT) {
return redirect(getLocation(context));
} else if (code == HttpConstants.BAD_REQUEST) {
return badRequest("bad request");
} else if (code == HttpConstants.OK) {
final String content = context.getResponseContent();
logger.debug("render: {}", content);
return ok(content).as(HttpConstants.HTML_CONTENT_TYPE);
}
final String message = "Unsupported HTTP action: " + code;
logger.error(message);
throw new TechnicalException(message);
}
private String getLocation(final PlayWebContext webContext){
final Http.Context context = webContext.getJavaContext();
final Http.Response response = context.response();
final Map<String, String> headers = response.getHeaders();
return headers.get(HttpConstants.LOCATION_HEADER);
}
}