package org.apereo.cas.scim.v1;
import com.unboundid.scim.data.Entry;
import com.unboundid.scim.data.Name;
import com.unboundid.scim.data.UserResource;
import org.apereo.cas.authentication.UsernamePasswordCredential;
import org.apereo.cas.authentication.principal.Principal;
import org.apereo.cas.util.CollectionUtils;
import java.util.Arrays;
/**
* This is {@link Scim1PrincipalAttributeMapper}.
*
* @author Misagh Moayyed
* @since 5.1.0
*/
public class Scim1PrincipalAttributeMapper {
/**
* Gets principal attribute value.
*
* @param p the p
* @param attributeName the attribute name
* @return the principal attribute value
*/
public String getPrincipalAttributeValue(final Principal p, final String attributeName) {
if (p.getAttributes().containsKey(attributeName)) {
return CollectionUtils.toCollection(p.getAttributes().get(attributeName)).iterator().next().toString();
}
return null;
}
/**
* Map.
*
* @param user the user
* @param p the p
* @param credential the credential
*/
public void map(final UserResource user, final Principal p,
final UsernamePasswordCredential credential) {
user.setUserName(p.getId());
user.setPassword(credential.getPassword());
user.setActive(true);
user.setNickName(getPrincipalAttributeValue(p, "nickName"));
user.setDisplayName(getPrincipalAttributeValue(p, "displayName"));
final Name name = new Name(getPrincipalAttributeValue(p, "formattedName"),
getPrincipalAttributeValue(p, "familyName"),
getPrincipalAttributeValue(p, "middleName"),
getPrincipalAttributeValue(p, "givenName"),
getPrincipalAttributeValue(p, "honorificPrefix"),
getPrincipalAttributeValue(p, "honorificSuffix"));
user.setName(name);
Entry entry = new Entry(getPrincipalAttributeValue(p, "mail"), "primary");
user.setEmails(Arrays.asList(entry));
entry = new Entry(getPrincipalAttributeValue(p, "phoneNumber"), "primary");
user.setPhoneNumbers(Arrays.asList(entry));
}
}