Search in sources :

Example 1 with Email

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;
}
Also used : GluuCustomAttribute(org.gluu.oxtrust.model.GluuCustomAttribute) Email(org.gluu.oxtrust.model.scim2.user.Email) ObjectMapper(org.codehaus.jackson.map.ObjectMapper)

Example 2 with Email

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;
}
Also used : GluuCustomAttribute(org.gluu.oxtrust.model.GluuCustomAttribute) Email(org.gluu.oxtrust.model.scim2.user.Email) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet)

Example 3 with Email

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);
}
Also used : ExtensionField(io.jans.scim.model.scim2.extensions.ExtensionField) StringUtils(org.apache.commons.lang.StringUtils) Date(java.util.Date) Path(javax.ws.rs.Path) Meta(io.jans.scim.model.scim2.Meta) PhoneNumber(io.jans.scim.model.scim2.user.PhoneNumber) GluuStatus(io.jans.model.GluuStatus) BaseScimResource(io.jans.scim.model.scim2.BaseScimResource) Map(java.util.Map) GluuGroup(io.jans.scim.model.GluuGroup) SortOrder(io.jans.orm.model.SortOrder) ScimCustomPerson(io.jans.scim.model.scim.ScimCustomPerson) UserResource(io.jans.scim.model.scim2.user.UserResource) Collection(java.util.Collection) IntrospectUtil(io.jans.scim.model.scim2.util.IntrospectUtil) AppConfiguration(io.jans.scim.model.conf.AppConfiguration) Address(io.jans.scim.model.scim2.user.Address) ScimFilterParserService(io.jans.scim.service.antlr.scimFilter.ScimFilterParserService) Collectors(java.util.stream.Collectors) PersistenceEntryManager(io.jans.orm.PersistenceEntryManager) X509Certificate(io.jans.scim.model.scim2.user.X509Certificate) Serializable(java.io.Serializable) List(java.util.List) Group(io.jans.scim.model.scim2.user.Group) PostConstruct(javax.annotation.PostConstruct) Optional(java.util.Optional) WebApplicationException(javax.ws.rs.WebApplicationException) ApplicationScoped(javax.enterprise.context.ApplicationScoped) GluuBoolean(io.jans.scim.model.GluuBoolean) GroupService(io.jans.scim.service.GroupService) Photo(io.jans.scim.model.scim2.user.Photo) Filter(io.jans.orm.search.filter.Filter) Extension(io.jans.scim.model.scim2.extensions.Extension) Email(io.jans.scim.model.scim2.user.Email) HashMap(java.util.HashMap) DateUtil(io.jans.scim.model.scim2.util.DateUtil) PairwiseIdentifier(io.jans.as.persistence.model.PairwiseIdentifier) ArrayList(java.util.ArrayList) ScimResourceUtil(io.jans.scim.model.scim2.util.ScimResourceUtil) Inject(javax.inject.Inject) InstantMessagingAddress(io.jans.scim.model.scim2.user.InstantMessagingAddress) PersonService(io.jans.scim.service.PersonService) Role(io.jans.scim.model.scim2.user.Role) Entitlement(io.jans.scim.model.scim2.user.Entitlement) GroupWebService(io.jans.scim.ws.rs.scim2.GroupWebService) ServiceUtil(io.jans.scim.util.ServiceUtil) Status(javax.ws.rs.core.Response.Status) Logger(org.slf4j.Logger) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Name(io.jans.scim.model.scim2.user.Name) InvalidAttributeValueException(javax.management.InvalidAttributeValueException) ExternalScimService(io.jans.scim.service.external.ExternalScimService) PagedResult(io.jans.orm.model.PagedResult) Meta(io.jans.scim.model.scim2.Meta) GluuGroup(io.jans.scim.model.GluuGroup) Group(io.jans.scim.model.scim2.user.Group) Email(io.jans.scim.model.scim2.user.Email) Address(io.jans.scim.model.scim2.user.Address) InstantMessagingAddress(io.jans.scim.model.scim2.user.InstantMessagingAddress) ArrayList(java.util.ArrayList) Photo(io.jans.scim.model.scim2.user.Photo) GluuGroup(io.jans.scim.model.GluuGroup) Date(java.util.Date) WebApplicationException(javax.ws.rs.WebApplicationException) InvalidAttributeValueException(javax.management.InvalidAttributeValueException) X509Certificate(io.jans.scim.model.scim2.user.X509Certificate) Name(io.jans.scim.model.scim2.user.Name) Role(io.jans.scim.model.scim2.user.Role) PhoneNumber(io.jans.scim.model.scim2.user.PhoneNumber) Entitlement(io.jans.scim.model.scim2.user.Entitlement) InstantMessagingAddress(io.jans.scim.model.scim2.user.InstantMessagingAddress)

Example 4 with Email

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;
}
Also used : Email(io.jans.scim.model.scim2.user.Email) Address(io.jans.scim.model.scim2.user.Address) UserResource(io.jans.scim.model.scim2.user.UserResource) PhoneNumber(io.jans.scim.model.scim2.user.PhoneNumber)

Example 5 with Email

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));
}
Also used : CustomAttributes(io.jans.scim.model.scim2.CustomAttributes) Optional(java.util.Optional) Date(java.util.Date)

Aggregations

Address (io.jans.scim.model.scim2.user.Address)3 Email (io.jans.scim.model.scim2.user.Email)3 PhoneNumber (io.jans.scim.model.scim2.user.PhoneNumber)3 UserResource (io.jans.scim.model.scim2.user.UserResource)3 ArrayList (java.util.ArrayList)3 Date (java.util.Date)2 Optional (java.util.Optional)2 GluuCustomAttribute (org.gluu.oxtrust.model.GluuCustomAttribute)2 Email (org.gluu.oxtrust.model.scim2.user.Email)2 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 PairwiseIdentifier (io.jans.as.persistence.model.PairwiseIdentifier)1 GluuStatus (io.jans.model.GluuStatus)1 PersistenceEntryManager (io.jans.orm.PersistenceEntryManager)1 PagedResult (io.jans.orm.model.PagedResult)1 SortOrder (io.jans.orm.model.SortOrder)1 Filter (io.jans.orm.search.filter.Filter)1 GluuBoolean (io.jans.scim.model.GluuBoolean)1 GluuGroup (io.jans.scim.model.GluuGroup)1 AppConfiguration (io.jans.scim.model.conf.AppConfiguration)1 ScimCustomPerson (io.jans.scim.model.scim.ScimCustomPerson)1