package org.apereo.cas.support.saml.web.idp.profile.builders.enc; import org.apache.commons.lang3.StringUtils; import org.apereo.cas.authentication.ProtocolAttributeEncoder; import org.apereo.cas.services.RegisteredService; import org.apereo.cas.util.EncodingUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Map; /** * This is {@link SamlAttributeEncoder}. * * @author Misagh Moayyed * @since 5.0.0 */ public class SamlAttributeEncoder implements ProtocolAttributeEncoder { private static final Logger LOGGER = LoggerFactory.getLogger(SamlAttributeEncoder.class); @Override public Map<String, Object> encodeAttributes(final Map<String, Object> attributes, final RegisteredService service) { final Map<String, Object> finalAttributes = new HashMap<>(attributes.size()); attributes.forEach((k, v) -> { final String attributeName = EncodingUtils.hexDecode(k); if (StringUtils.isNotBlank(attributeName)) { LOGGER.debug("Decoded SAML attribute [{}] to [{}] with value(s) [{}]", k, attributeName, v); finalAttributes.put(attributeName, v); } else { LOGGER.debug("Unable to decode SAML attribute [{}]; accepting it verbatim", k); finalAttributes.put(k, v); } }); return finalAttributes; } }