package org.apereo.cas.ws.idp.metadata;
import org.apache.wss4j.common.util.DOM2Writer;
import org.apereo.cas.configuration.CasConfigurationProperties;
import org.apereo.cas.ws.idp.WSFederationConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.w3c.dom.Document;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
/**
* This is {@link WSFederationMetadataController}.
*
* @author Misagh Moayyed
* @since 5.1.0
*/
@Controller("WSFederationMetadataController")
public class WSFederationMetadataController {
private static final long serialVersionUID = -6927484130511112872L;
private static final Logger LOGGER = LoggerFactory.getLogger(WSFederationMetadataController.class);
private final CasConfigurationProperties casProperties;
public WSFederationMetadataController(final CasConfigurationProperties casProperties) {
this.casProperties = casProperties;
}
/**
* Get Metadata.
*
* @param request the request
* @param response the response
* @throws Exception the exception
*/
@GetMapping(path = WSFederationConstants.ENDPOINT_FEDERATION_METADATA)
public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws Exception {
try {
response.setContentType(MediaType.TEXT_HTML_VALUE);
final PrintWriter out = response.getWriter();
final WSFederationMetadataWriter mw = new WSFederationMetadataWriter();
final Document metadata = mw.produceMetadataDocument(casProperties);
out.write(DOM2Writer.nodeToString(metadata));
} catch (final Exception ex) {
LOGGER.error("Failed to get metadata document", ex);
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
}