package org.apereo.cas.scim.v2; import com.unboundid.scim2.common.types.Email; import com.unboundid.scim2.common.types.Name; import com.unboundid.scim2.common.types.PhoneNumber; import com.unboundid.scim2.common.types.UserResource; import org.apache.commons.lang3.StringUtils; import org.apereo.cas.authentication.UsernamePasswordCredential; import org.apereo.cas.authentication.principal.Principal; import org.apereo.cas.util.CollectionUtils; import java.util.Collections; /** * This is {@link Scim2PrincipalAttributeMapper}. * * @author Misagh Moayyed * @since 5.1.0 */ public class Scim2PrincipalAttributeMapper { /** * Gets principal attribute value. * * @param p the principal * @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); String attr = getPrincipalAttributeValue(p, "nickName"); user.setNickName(attr); attr = getPrincipalAttributeValue(p, "displayName"); user.setDisplayName(attr); final Name name = new Name(); attr = getPrincipalAttributeValue(p, "givenName"); name.setGivenName(attr); attr = getPrincipalAttributeValue(p, "familyName"); name.setFamilyName(attr); attr = getPrincipalAttributeValue(p, "middleName"); name.setMiddleName(attr); user.setName(name); final Email email = new Email(); email.setPrimary(true); attr = getPrincipalAttributeValue(p, "mail"); if (StringUtils.isBlank(attr)) { attr = getPrincipalAttributeValue(p, "email"); } email.setValue(attr); user.setEmails(Collections.singletonList(email)); final PhoneNumber phone = new PhoneNumber(); phone.setPrimary(true); attr = getPrincipalAttributeValue(p, "phone"); if (StringUtils.isBlank(attr)) { attr = getPrincipalAttributeValue(p, "phoneNumber"); } phone.setValue(attr); user.setPhoneNumbers(Collections.singletonList(phone)); } }