package mujina.sp;
import mujina.saml.SAMLAttribute;
import mujina.saml.SAMLBuilder;
import mujina.saml.SAMLPrincipal;
import org.opensaml.saml2.core.NameID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.saml.SAMLCredential;
import org.springframework.security.saml.userdetails.SAMLUserDetailsService;
import java.security.Principal;
import java.util.List;
import java.util.Optional;
import static java.util.stream.Collectors.toList;
public class DefaultSAMLUserDetailsService implements SAMLUserDetailsService {
private static final Logger LOG = LoggerFactory.getLogger(DefaultSAMLUserDetailsService.class);
@Override
public Principal loadUserBySAML(SAMLCredential credential) {
LOG.debug("loadUserBySAML {}", credential);
List<SAMLAttribute> attributes = credential.getAttributes().stream().map(attribute ->
new SAMLAttribute(
attribute.getName(),
attribute.getAttributeValues().stream().map(SAMLBuilder::getStringValueFromXMLObject)
.filter(Optional::isPresent).map(Optional::get).collect(toList()))).collect(toList());
NameID nameID = credential.getNameID();
return new SAMLPrincipal(nameID.getValue(), nameID.getFormat(), attributes);
}
}