use of io.jans.scim.model.scim2.user.Email in project oxTrust by GluuFederation.
the class ServiceUtil method syncEmailReverse.
/**
* One-way sync from "mail" to "oxTrustEmail". This method takes current values of "oxTrustEmail" attribute, deletes
* those that do not match any of those in "mail", and adds new ones that are missing.
* @param gluuCustomPerson
* @param isScim2
* @return
* @throws Exception
*/
public static GluuCustomPerson syncEmailReverse(GluuCustomPerson gluuCustomPerson, boolean isScim2) throws Exception {
/*
Implementation of this method could not be simplified to creating a new empty list for oxTrustEmail and then do
the respective additions based on current mail values since information such as display, primary, etc. would be lost.
Instead, it uses set operations to know which existing entries must be removed or retained, and then apply additions
of new data.
*/
logger.info(" IN Utils.syncEmailReverse()...");
GluuCustomAttribute mail = gluuCustomPerson.getGluuCustomAttribute("mail");
GluuCustomAttribute oxTrustEmail = gluuCustomPerson.getGluuCustomAttribute("oxTrustEmail");
if (mail == null) {
gluuCustomPerson.setAttribute("oxTrustEmail", new String[0]);
} else {
ObjectMapper mapper = getObjectMapper();
Set<String> mailSet = new HashSet<String>();
if (mail.getValues() != null)
mailSet.addAll(Arrays.asList(mail.getValues()));
Set<String> mailSetCopy = new HashSet<String>(mailSet);
Set<String> oxTrustEmailSet = new HashSet<String>();
List<Email> oxTrustEmails = new ArrayList<Email>();
if (oxTrustEmail != null && oxTrustEmail.getValues() != null) {
for (String oxTrustEmailJson : oxTrustEmail.getValues()) oxTrustEmails.add(mapper.readValue(oxTrustEmailJson, Email.class));
for (Email email : oxTrustEmails) oxTrustEmailSet.add(email.getValue());
}
// Keep those in "mail" and not in oxTrustEmail
mailSetCopy.removeAll(oxTrustEmailSet);
// Keep those in oxTrustEmail and not in "mail"
oxTrustEmailSet.removeAll(mailSet);
List<Integer> delIndexes = new ArrayList<Integer>();
// Build a list of indexes that should be removed in oxTrustEmails
for (int i = 0; i < oxTrustEmails.size(); i++) {
if (oxTrustEmailSet.contains(oxTrustEmails.get(i).getValue()))
delIndexes.add(0, i);
}
// Delete unmatched oxTrustEmail entries from highest index to lowest
for (Integer idx : delIndexes) // must not pass an Integer directly
oxTrustEmails.remove(idx.intValue());
List<String> newValues = new ArrayList<String>();
for (Email email : oxTrustEmails) newValues.add(mapper.writeValueAsString(email));
for (String mailStr : mailSetCopy) {
Email email = new Email();
email.setValue(mailStr);
email.setPrimary(false);
newValues.add(mapper.writeValueAsString(email));
}
gluuCustomPerson.setAttribute("oxTrustEmail", newValues.toArray(new String[0]));
}
logger.info(" LEAVING Utils.syncEmailReverse()...");
return gluuCustomPerson;
}
use of io.jans.scim.model.scim2.user.Email in project oxTrust by GluuFederation.
the class UpdatePersonAction method syncEmailReverse.
/**
* One-way sync from "mail" to "oxTrustEmail". This method takes current values
* of "oxTrustEmail" attribute, deletes those that do not match any of those in
* "mail", and adds new ones that are missing.
*
* @param gluuCustomPerson
* @param isScim2
* @return
* @throws Exception
*/
public GluuCustomPerson syncEmailReverse(GluuCustomPerson gluuCustomPerson, boolean isScim2) throws Exception {
/*
* Implementation of this method could not be simplified to creating a new empty
* list for oxTrustEmail and then do the respective additions based on current
* mail values since information such as display, primary, etc. would be lost.
* Instead, it uses set operations to know which existing entries must be
* removed or retained, and then apply additions of new data.
*/
log.info(" IN Utils.syncEmailReverse()...");
GluuCustomAttribute mail = gluuCustomPerson.getGluuCustomAttribute("mail");
GluuCustomAttribute oxTrustEmail = gluuCustomPerson.getGluuCustomAttribute("oxTrustEmail");
if (mail == null) {
gluuCustomPerson.setAttribute("oxTrustEmail", new String[0]);
} else {
Set<String> mailSet = new HashSet<String>();
if (mail.getValues() != null)
mailSet.addAll(Arrays.asList(mail.getValues()));
Set<String> mailSetCopy = new HashSet<String>(mailSet);
Set<String> oxTrustEmailSet = new HashSet<String>();
List<Email> oxTrustEmails = new ArrayList<Email>();
if (oxTrustEmail != null && oxTrustEmail.getValues() != null) {
for (String oxTrustEmailJson : oxTrustEmail.getValues()) {
oxTrustEmails.add(jsonService.jsonToObject(oxTrustEmailJson, Email.class));
}
for (Email email : oxTrustEmails) {
oxTrustEmailSet.add(email.getValue());
}
}
// Keep those in "mail" and not in oxTrustEmail
mailSetCopy.removeAll(oxTrustEmailSet);
// Keep those in oxTrustEmail and not in "mail"
oxTrustEmailSet.removeAll(mailSet);
List<Integer> delIndexes = new ArrayList<Integer>();
// Build a list of indexes that should be removed in oxTrustEmails
for (int i = 0; i < oxTrustEmails.size(); i++) {
if (oxTrustEmailSet.contains(oxTrustEmails.get(i).getValue())) {
delIndexes.add(0, i);
}
}
// Delete unmatched oxTrustEmail entries from highest index to lowest
for (Integer idx : delIndexes) {
// must not pass an Integer directly
oxTrustEmails.remove(idx.intValue());
}
List<String> newValues = new ArrayList<String>();
for (Email email : oxTrustEmails) {
newValues.add(jsonService.objectToPerttyJson(email));
}
for (String mailStr : mailSetCopy) {
Email email = new Email();
email.setValue(mailStr);
email.setPrimary(false);
newValues.add(jsonService.objectToPerttyJson(email));
}
gluuCustomPerson.setAttribute("oxTrustEmail", newValues.toArray(new String[0]));
}
log.info(" LEAVING Utils.syncEmailReverse()...");
return gluuCustomPerson;
}
use of io.jans.scim.model.scim2.user.Email in project jans by JanssenProject.
the class Scim2UserService method transferAttributesToUserResource.
public void transferAttributesToUserResource(ScimCustomPerson person, UserResource res, String url) {
log.debug("transferAttributesToUserResource");
res.setId(person.getInum());
res.setExternalId(person.getAttribute("jansExtId"));
Meta meta = new Meta();
meta.setResourceType(ScimResourceUtil.getType(res.getClass()));
meta.setCreated(person.getAttribute("jansMetaCreated"));
if (meta.getCreated() == null) {
Date date = person.getCreationDate();
meta.setCreated(date == null ? null : DateUtil.millisToISOString(date.getTime()));
}
meta.setLastModified(person.getAttribute("jansMetaLastMod"));
if (meta.getLastModified() == null) {
Date date = person.getUpdatedAt();
meta.setLastModified(date == null ? null : DateUtil.millisToISOString(date.getTime()));
}
meta.setLocation(person.getAttribute("jansMetaLocation"));
if (meta.getLocation() == null) {
meta.setLocation(url + "/" + person.getInum());
}
res.setMeta(meta);
// Set values in order of appearance in UserResource class
res.setUserName(person.getUid());
Name name = new Name();
name.setGivenName(person.getGivenName());
name.setFamilyName(person.getSurname());
name.setMiddleName(person.getAttribute("middleName"));
name.setHonorificPrefix(person.getAttribute("jansHonorificPrefix"));
name.setHonorificSuffix(person.getAttribute("jansHonorificSuffix"));
String formatted = person.getAttribute("jansNameFormatted");
if (formatted == null) {
// recomputes the formatted name if absent in LDAP
name.computeFormattedName();
} else {
name.setFormatted(formatted);
}
res.setName(name);
res.setDisplayName(person.getDisplayName());
res.setNickName(person.getAttribute("nickname"));
res.setProfileUrl(person.getAttribute("jansProfileURL"));
res.setTitle(person.getAttribute("jansTitle"));
res.setUserType(person.getAttribute("jansUsrTyp"));
res.setPreferredLanguage(person.getPreferredLanguage());
res.setLocale(person.getAttribute("locale"));
res.setTimezone(person.getTimezone());
res.setActive(Boolean.valueOf(person.getAttribute("jansActive")) || GluuBoolean.getByValue(person.getAttribute("jansStatus")).isBooleanValue());
res.setPassword(person.getUserPassword());
res.setEmails(getAttributeListValue(person, Email.class, "jansEmail"));
if (res.getEmails() == null) {
// There can be cases where jansEmail is not synced with mail attribute....
List<Email> emails = person.getAttributeList("mail").stream().map(m -> {
Email email = new Email();
email.setValue(m);
email.setPrimary(false);
return email;
}).collect(Collectors.toList());
res.setEmails(emails.size() == 0 ? null : emails);
}
res.setPhoneNumbers(getAttributeListValue(person, PhoneNumber.class, "jansPhoneValue"));
res.setIms(getAttributeListValue(person, InstantMessagingAddress.class, "jansImsValue"));
res.setPhotos(getAttributeListValue(person, Photo.class, "jansPhotos"));
res.setAddresses(getAttributeListValue(person, Address.class, "jansAddres"));
List<String> listOfGroups = person.getMemberOf();
if (listOfGroups != null && listOfGroups.size() > 0) {
List<Group> groupList = new ArrayList<>();
for (String groupDN : listOfGroups) {
try {
GluuGroup gluuGroup = groupService.getGroupByDn(groupDN);
Group group = new Group();
group.setValue(gluuGroup.getInum());
String reference = groupEndpointUrl + "/" + gluuGroup.getInum();
group.setRef(reference);
group.setDisplay(gluuGroup.getDisplayName());
// Only support direct membership: see section 4.1.2 of RFC 7644
group.setType(Group.Type.DIRECT);
groupList.add(group);
} catch (Exception e) {
log.warn("transferAttributesToUserResource. Group with dn {} could not be added to User Resource. {}", groupDN, person.getUid());
log.error(e.getMessage(), e);
}
}
if (groupList.size() > 0) {
res.setGroups(groupList);
}
}
res.setEntitlements(getAttributeListValue(person, Entitlement.class, "jansEntitlements"));
res.setRoles(getAttributeListValue(person, Role.class, "jansRole"));
res.setX509Certificates(getAttributeListValue(person, X509Certificate.class, "jansx509Certificate"));
res.setPairwiseIdentifiers(person.getPpid());
transferExtendedAttributesToResource(person, res);
}
use of io.jans.scim.model.scim2.user.Email in project jans by JanssenProject.
the class PatchValueFilterUserTest method getDummyUser.
private UserResource getDummyUser() {
user = new UserResource();
user.setUserName("" + System.currentTimeMillis());
user.setEmails(new ArrayList<>());
user.setPhoneNumbers(new ArrayList<>());
Email email = new Email();
email.setValue("bjane@gluu.org");
email.setDisplay("bjane");
email.setPrimary(true);
email.setType("work");
user.getEmails().add(email);
email = new Email();
email.setValue("bjane@acme.org");
email.setDisplay("bjane acme");
email.setType("hobby");
user.getEmails().add(email);
PhoneNumber pn = new PhoneNumber();
pn.setValue("+57 1234 56789");
pn.setType("home");
user.getPhoneNumbers().add(pn);
pn = new PhoneNumber();
pn.setValue("+1 1234 56789");
pn.setType("work");
pn.setPrimary(true);
user.getPhoneNumbers().add(pn);
Address address = new Address();
address.setCountry("EG");
address.setPrimary(false);
address.setRegion("Somewhere");
address.setStreetAddress("59 Acacia avenue");
address.setLocality("Donington");
user.setAddresses(Collections.singletonList(address));
return user;
}
use of io.jans.scim.model.scim2.user.Email in project jans by JanssenProject.
the class QueryParamCreateUpdateTest method execAssertions.
private void execAssertions(UserResource user) {
// Verify "ALWAYS" attribs were retrieved
assertNotNull(user.getSchemas());
assertNotNull(user.getId());
// Verify no password was retrieved
assertNull(user.getPassword());
// Verify preferredLanguage is null (not provided in Json originally)
assertNull(user.getPreferredLanguage());
// Verify all others are present
assertNotNull(user.getUserName());
assertNotNull(user.getDisplayName());
assertNotNull(user.getNickName());
assertNotNull(user.getName().getGivenName());
// Verify cust attrs are there
CustomAttributes custAttrs = user.getCustomAttributes(USER_EXT_SCHEMA_ID);
assertNotNull(custAttrs.getValues("scimCustomSecond", Date.class));
assertNotNull(custAttrs.getValue("scimCustomThird", Integer.class));
// Verify e-mails were retrieved
assertNotNull(user.getEmails());
assertTrue(user.getEmails().stream().map(Email::getValue).map(Optional::ofNullable).allMatch(Optional::isPresent));
}
Aggregations