in services/idp-core/src/main/java/org/apache/cxf/fediz/service/idp/MetadataServlet.java [57:104]
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
response.setContentType("text/xml; charset=utf-8");
PrintWriter out = response.getWriter();
ConfigService cs = (ConfigService)getApplicationContext().getBean("config");
Idp idpConfig = cs.getIDP(realm);
try {
boolean isSamlRequest = request.getQueryString() != null
&& request.getQueryString().contains("protocol=saml");
if (request.getServletPath() != null && request.getServletPath().startsWith("/metadata")) {
String parsedRealm =
request.getRequestURI().substring(request.getRequestURI().indexOf("/metadata")
+ "/metadata".length());
if (parsedRealm != null && !parsedRealm.isEmpty() && parsedRealm.charAt(0) == '/') {
parsedRealm = parsedRealm.substring(1);
}
// Default to writing out the metadata for the IdP
if (idpConfig.getRealm().equals(parsedRealm) || parsedRealm == null || parsedRealm.isEmpty()) {
IdpMetadataWriter mw = new IdpMetadataWriter();
Document metadata = mw.getMetaData(idpConfig, isSamlRequest);
out.write(DOM2Writer.nodeToString(metadata));
return;
}
// Otherwise try to find the metadata for the trusted third party IdP
TrustedIdp trustedIdp = idpConfig.findTrustedIdp(parsedRealm);
if (trustedIdp == null) {
LOG.error("No TrustedIdp found for desired realm: " + parsedRealm);
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
ServiceMetadataWriter mw = new ServiceMetadataWriter();
Document metadata = mw.getMetaData(idpConfig, trustedIdp);
out.write(DOM2Writer.nodeToString(metadata));
} else {
// Otherwise return the Metadata for the Idp
LOG.debug(idpConfig.toString());
IdpMetadataWriter mw = new IdpMetadataWriter();
Document metadata = mw.getMetaData(idpConfig, isSamlRequest);
out.write(DOM2Writer.nodeToString(metadata));
}
} catch (Exception ex) {
LOG.error("Failed to get metadata document: ", ex);
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}