Authorizable auth = userManager.getAuthorizable(id);
if (auth == null) {
return false;
}
// check if we need to deal with this authorizable
ExternalIdentityRef ref = getIdentityRef(auth);
if (ref == null || !idp.getName().equals(ref.getProviderName())) {
return false;
}
if (auth instanceof Group) {
Group group = (Group) auth;
ExternalGroup external = idp.getGroup(id);
timer.mark("retrieve");
if (external == null) {
if (group.getDeclaredMembers().hasNext()) {
log.info("won't remove local group with members: {}", id);
} else {
auth.remove();
log.debug("removing authorizable '{}' that no longer exists on IDP {}", id, idp.getName());
timer.mark("remove");
ret = true;
}
} else {
ret = syncGroup(external, group);
timer.mark("sync");
}
} else {
ExternalUser external = idp.getUser(id);
timer.mark("retrieve");
if (external == null) {
auth.remove();
log.debug("removing authorizable '{}' that no longer exists on IDP {}", id, idp.getName());
timer.mark("remove");
ret = true;
} else {
ret = syncUser(external, (User) auth);
timer.mark("sync");
}
}
if (log.isDebugEnabled()) {
log.debug("sync({}) -> {} {}", id, ref.getString(), timer.getString());
}
return ret;
} catch (RepositoryException e) {
throw new SyncException(e);
} catch (ExternalIdentityException e) {