public void process() throws WSFederationException, IOException { String classMethod = "MetadataRequest.process: "; String realm = "/"; String entityId = null; int prefixLength = (request.getContextPath() + WSFederationConstants.METADATA_URL_PREFIX).length(); String suffix = request.getRequestURI().substring(prefixLength); WSFederationMetaManager metaManager = WSFederationUtils.getMetaManager(); if (suffix.equals(WSFederationConstants.METADATA_URL_SUFFIX)) { // No entity ID in request - return first defined List providers = metaManager.getAllHostedEntities(null); if ((providers != null) && !providers.isEmpty()) { entityId = (String) providers.iterator().next(); } else { throw new WSFederationException(WSFederationUtils.bundle.getString("noHostedEntities")); } } else { // Request URL is of the form METADATA_URL_PREFIX + metaalias + // + METADATA_URL_SUFFIX // e.g. /FederationMetadata/2006-12/red/idp/FederationMetadata.xml int metaAliasLength = suffix.length() - WSFederationConstants.METADATA_URL_SUFFIX.length(); String metaAlias = suffix.substring(0, metaAliasLength); realm = SAML2MetaUtils.getRealmByMetaAlias(metaAlias); entityId = metaManager.getEntityByMetaAlias(metaAlias); if (entityId == null || entityId.length() == 0) { String[] args = {metaAlias, realm}; throw new WSFederationException( WSFederationConstants.BUNDLE_NAME, "invalidMetaAlias", args); } } FederationElement fedElem = metaManager.getEntityDescriptor(realm, entityId); String metaXML = null; try { metaXML = WSFederationMetaUtils.convertJAXBToString(fedElem); } catch (JAXBException ex) { throw new WSFederationException(ex); } response.setContentType("text/xml"); response.setHeader("Pragma", "no-cache"); response.getWriter().print(metaXML); }
/** * Returns the attribute value configured in the given entity SP or IDP configuration. * * @param realm realm name. * @param entityID hosted <code>EntityID</code>. * @param attributeName name of the attribute. */ protected String getAttribute(String realm, String entityID, String attributeName) { if (realm == null || entityID == null || attributeName == null) { if (debug.messageEnabled()) { debug.message("DefaultAccountMapper.getAttribute: " + "null input parameters."); } return null; } try { BaseConfigType config = null; if (role.equals(IDP)) { config = WSFederationUtils.getMetaManager().getIDPSSOConfig(realm, entityID); } else { config = WSFederationUtils.getMetaManager().getSPSSOConfig(realm, entityID); } Map attributes = WSFederationMetaUtils.getAttributes(config); if (attributes == null || attributes.isEmpty()) { if (debug.messageEnabled()) { debug.message( "DefaultAccountMapper.getAttribute:" + " attribute configuration is not defined for " + "Entity " + entityID + " realm =" + realm + " role=" + role); } return null; } List list = (List) attributes.get(attributeName); if (list != null && list.size() > 0) { return (String) list.iterator().next(); } if (debug.messageEnabled()) { debug.message( "DefaultSPAccountMapper.getAttribute: " + attributeName + " is not configured."); } return null; } catch (WSFederationMetaException sme) { if (debug.warningEnabled()) { debug.warning("DefaultSPAccountMapper.getAttribute:" + "Meta Exception", sme); } } return null; }