protected void doGet()

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);
        }
    }