diff --git a/src/main/java/org/ligoj/app/plugin/id/resource/AbstractOrgResource.java b/src/main/java/org/ligoj/app/plugin/id/resource/AbstractOrgResource.java index bc43cb1..10d602a 100644 --- a/src/main/java/org/ligoj/app/plugin/id/resource/AbstractOrgResource.java +++ b/src/main/java/org/ligoj/app/plugin/id/resource/AbstractOrgResource.java @@ -35,7 +35,7 @@ public abstract class AbstractOrgResource { * * @return User repository provider. */ - protected IUserRepository getUser() { + public IUserRepository getUserRepository() { return iamProvider[0].getConfiguration().getUserRepository(); } @@ -44,7 +44,7 @@ protected IUserRepository getUser() { * * @return Company repository provider. */ - protected ICompanyRepository getCompany() { + public ICompanyRepository getCompanyRepository() { return iamProvider[0].getConfiguration().getCompanyRepository(); } @@ -53,7 +53,7 @@ protected ICompanyRepository getCompany() { * * @return Group repository provider. */ - protected IGroupRepository getGroup() { + public IGroupRepository getGroupRepository() { return iamProvider[0].getConfiguration().getGroupRepository(); } } diff --git a/src/main/java/org/ligoj/app/plugin/id/resource/CompanyResource.java b/src/main/java/org/ligoj/app/plugin/id/resource/CompanyResource.java index b2e979d..9d84b10 100644 --- a/src/main/java/org/ligoj/app/plugin/id/resource/CompanyResource.java +++ b/src/main/java/org/ligoj/app/plugin/id/resource/CompanyResource.java @@ -55,7 +55,7 @@ public CacheCompanyRepository getCacheRepository() { @Override public ICompanyRepository getRepository() { - return getCompany(); + return getCompanyRepository(); } /** @@ -64,7 +64,7 @@ public ICompanyRepository getRepository() { * @return The company name of current user or null if the current user is not in the repository. */ public CompanyOrg getUserCompany() { - final var user = getUser().findById(securityHelper.getLogin()); + final var user = getUserRepository().findById(securityHelper.getLogin()); if (user == null) { return null; } @@ -91,7 +91,7 @@ private String getUserCompanyDn() { */ public boolean isUserInternalCompany() { return ObjectUtils.defaultIfNull(getUserCompanyDn(), "") - .endsWith(ObjectUtils.defaultIfNull(getUser().getPeopleInternalBaseDn(), "")); + .endsWith(ObjectUtils.defaultIfNull(getUserRepository().getPeopleInternalBaseDn(), "")); } /** @@ -111,8 +111,8 @@ public TableItem findAll(@Context final UriInfo uriInfo) { .collect(Collectors.toSet()); final var writeCompanies = getContainersIdForWrite(); final var adminCompanies = getContainersIdForAdmin(); - final var users = getUser().findAll(); - final var companies = getCompany().findAll(); + final var users = getUserRepository().findAll(); + final var companies = getCompanyRepository().findAll(); // Search the companies final var findAll = getRepository().findAll(visibleCompanies, @@ -142,7 +142,7 @@ protected void checkForDeletion(final ContainerOrg container) { super.checkForDeletion(container); // Company deletion is only possible where there is no user inside this company, or inside any sub-company - final var users = getUser().findAll(); + final var users = getUserRepository().findAll(); if (getRepository().findAll().values().stream() .filter(c -> DnUtils.equalsOrParentOf(container.getDn(), c.getDn())) .anyMatch(c -> users.values().stream().map(UserOrg::getCompany).anyMatch(c.getId()::equals))) { diff --git a/src/main/java/org/ligoj/app/plugin/id/resource/GroupResource.java b/src/main/java/org/ligoj/app/plugin/id/resource/GroupResource.java index 1b4687a..188f9ad 100644 --- a/src/main/java/org/ligoj/app/plugin/id/resource/GroupResource.java +++ b/src/main/java/org/ligoj/app/plugin/id/resource/GroupResource.java @@ -59,7 +59,7 @@ public GroupResource() { @Override public IGroupRepository getRepository() { - return getGroup(); + return getGroupRepository(); } @Override @@ -77,12 +77,12 @@ public CacheGroupRepository getCacheRepository() { @GET public TableItem findAll(@Context final UriInfo uriInfo) { final var types = containerScopeResource.findAllDescOrder(ContainerType.GROUP); - final var companies = getCompany().findAll(); + final var companies = getCompanyRepository().findAll(); final var visibleCompanies = organizationResource.getContainers(); final var writeGroups = getContainersIdForWrite(); final var adminGroups = getContainersIdForAdmin(); - final var users = getUser().findAll(); - final var groups = getGroup().findAll(); + final var users = getUserRepository().findAll(); + final var groups = getGroupRepository().findAll(); // Search the groups final var page = getContainers(DataTableAttributes.getSearch(uriInfo), @@ -137,7 +137,7 @@ protected String toDn(final GroupEditionVo container, final ContainerScope scope * @return The corresponding DN. */ private List toDn(final List uids) { - return CollectionUtils.emptyIfNull(uids).stream().map(getUser()::findByIdExpected).map(UserOrg::getDn).toList(); + return CollectionUtils.emptyIfNull(uids).stream().map(getUserRepository()::findByIdExpected).map(UserOrg::getDn).toList(); } /** @@ -158,7 +158,7 @@ public void empty(@PathParam("id") final String id) { } // Perform the update - getRepository().empty(container, getUser().findAll()); + getRepository().empty(container, getUserRepository().findAll()); } @Override diff --git a/src/main/java/org/ligoj/app/plugin/id/resource/UserOrgResource.java b/src/main/java/org/ligoj/app/plugin/id/resource/UserOrgResource.java index 42ed658..e1180e7 100644 --- a/src/main/java/org/ligoj/app/plugin/id/resource/UserOrgResource.java +++ b/src/main/java/org/ligoj/app/plugin/id/resource/UserOrgResource.java @@ -132,7 +132,7 @@ public List findAllNotSecure(final String company, final String group) private Page findAllNotSecure(final Set visibleGroups, final String company, final String group, final String criteria, @Context final UriInfo uriInfo) { final var pageRequest = paginationJson.getPageRequest(uriInfo, ORDERED_COLUMNS); final var visibleCompanies = companyResource.getContainers().stream().map(CompanyOrg::getId).collect(Collectors.toSet()); - final var allGroups = getGroup().findAll(); + final var allGroups = getGroupRepository().findAll(); // The companies to use final var filteredCompanies = computeFilteredCompanies(Normalizer.normalize(company), visibleCompanies); @@ -141,7 +141,7 @@ private Page findAllNotSecure(final Set visibleGroups, final final var filteredGroups = group == null ? null : computeFilteredGroups(group, visibleGroups, allGroups); // Search the users - return getUser().findAll(filteredGroups, filteredCompanies, StringUtils.trimToNull(criteria), pageRequest); + return getUserRepository().findAll(filteredGroups, filteredCompanies, StringUtils.trimToNull(criteria), pageRequest); } /** @@ -183,7 +183,7 @@ public TableItem findAll(@QueryParam(SimpleUser.COMPANY_ALIAS) final }); // Forward custom attributes definition - result.setExtensions(Map.of("customAttributes", getUser().getCustomAttributes())); + result.setExtensions(Map.of("customAttributes", getUserRepository().getCustomAttributes())); return result; } @@ -228,10 +228,10 @@ private List computeFilteredGroups(final String group, final Set(mergedGroups), userOrg); + getUserRepository().updateMembership(new ArrayList<>(mergedGroups), userOrg); } } @@ -311,7 +311,7 @@ public UserUpdateResult update(final UserOrgEditionVo user) { final var hasAttributeChange = validateChanges(securityHelper.getLogin(), user); // Check the user exists - getUser().findByIdExpected(user.getId()); + getUserRepository().findByIdExpected(user.getId()); return saveOrUpdate(user, hasAttributeChange); } @@ -328,7 +328,7 @@ public String create(final UserOrgEditionVo user, final boolean quiet) { validateChanges(securityHelper.getLogin(), user); // Check the user does not exist - if (getUser().findById(user.getId()) != null) { + if (getUserRepository().findById(user.getId()) != null) { throw new ValidationJsonException(USER_KEY, "already-exist", "0", USER_KEY, "1", user.getId()); } @@ -373,11 +373,11 @@ private boolean validateChanges(final String principal, final UserOrgEditionVo i final var delegates = delegateRepository.findAllByUser(principal); // Get the stored data of the implied user - final var userOrg = getUser().findById(importEntry.getId()); + final var userOrg = getUserRepository().findById(importEntry.getId()); // Check the implied company and request changes final var cleanCompany = Normalizer.normalize(importEntry.getCompany()); - final var companyDn = getCompany().findByIdExpected(principal, cleanCompany).getDn(); + final var companyDn = getCompanyRepository().findByIdExpected(principal, cleanCompany).getDn(); final var hasAttributeChange = hasAttributeChange(importEntry, userOrg); if (hasAttributeChange && !canWrite(delegates, companyDn, DelegateType.COMPANY)) { // Visible but without write access @@ -434,7 +434,8 @@ private void validateAndGroupsCN(final UserOrg userOrg, final UserOrgEditionVo i */ private void validateAndGroupsCN(final Collection previousGroups, final Collection desiredGroups, final List delegates) { // Check visibility of the desired groups - desiredGroups.forEach(g -> getGroup().findByIdExpected(securityHelper.getLogin(), g)); + final var repository = getGroupRepository(); + desiredGroups.forEach(g -> repository.findByIdExpected(securityHelper.getLogin(), g)); // Check the visible updated groups can be edited by the principal CollectionUtils.disjunction(desiredGroups, previousGroups).forEach(g -> validateWriteGroup(g, delegates)); @@ -450,7 +451,7 @@ private void validateAndGroupsCN(final Collection previousGroups, final private void validateWriteGroup(final String updatedGroup, final List delegates) { // Check the visible updated groups can be edited by the principal - Optional.ofNullable(getGroup().findById(securityHelper.getLogin(), updatedGroup)).filter(g -> !canWrite(delegates, g.getDn(), DelegateType.GROUP)).ifPresent(g -> { + Optional.ofNullable(getGroupRepository().findById(securityHelper.getLogin(), updatedGroup)).filter(g -> !canWrite(delegates, g.getDn(), DelegateType.GROUP)).ifPresent(g -> { throw new ValidationJsonException(GROUP, READ_ONLY, "0", GROUP, "1", g.getId()); }); } @@ -477,8 +478,9 @@ private Collection mergeGroups(final List delegates, final // Compute the groups merged groups final Collection newGroups = new HashSet<>(userOrg.getGroups()); newGroups.addAll(groups); + final var repository = getGroupRepository(); for (final var oldGroup : userOrg.getGroups()) { - final var oldGroupDn = getGroup().findById(oldGroup).getDn(); + final var oldGroupDn = repository.findById(oldGroup).getDn(); if (!groups.contains(oldGroup) && canWrite(delegates, oldGroupDn, DelegateType.GROUP)) { // This group is writable, so it has been explicitly removed by the current user newGroups.remove(oldGroup); @@ -564,7 +566,7 @@ private boolean hasAttributeChange(final SimpleUser user1, final SimpleUser user private UserUpdateResult saveOrUpdate(final UserOrgEditionVo importEntry, final boolean quiet, final boolean hasAttributeChange) { // Create as needed the user, groups will be proceeded after. - final var repository = getUser(); + final var repository = getUserRepository(); var user = repository.findById(importEntry.getId()); final var newUser = toUserOrg(importEntry); if (user == null) { @@ -609,12 +611,12 @@ private void updateUser(final UserOrg oldUser, final UserOrg newUser, final bool log.info("{} already exists", newUser.getId()); // First update the DN - newUser.setDn(getUser().toDn(newUser)); + newUser.setDn(getUserRepository().toDn(newUser)); updateCompanyAsNeeded(oldUser, newUser); // Then, update the unsecured attributes : first name, etc. final var hadNoMail = oldUser.getMails().isEmpty(); - getUser().updateUser(newUser); + getUserRepository().updateUser(newUser); // Then update the mail and/or password if (newUser.getMails().isEmpty()) { @@ -670,10 +672,10 @@ public void delete(@PathParam("user") final String user) { // Hard deletion // Check the group : You can't delete a user if he is the last member // of a group - final var allGroups = getGroup().findAll(); + final var allGroups = getGroupRepository().findAll(); checkLastMemberInGroups(userOrg, allGroups); - final var repository = getUser(); + final var repository = getUserRepository(); // Revoke all memberships of this user repository.updateMembership(new ArrayList<>(), userOrg); @@ -697,7 +699,7 @@ public void delete(@PathParam("user") final String user) { @DELETE @Path("{user}/lock") public void lock(@PathParam("user") final String user) { - getUser().lock(securityHelper.getLogin(), checkDeletionRight(user, "lock")); + getUserRepository().lock(securityHelper.getLogin(), checkDeletionRight(user, "lock")); } /** @@ -719,7 +721,7 @@ public void lock(@PathParam("user") final String user) { @DELETE @Path("{user}/isolate") public void isolate(@PathParam("user") final String user) { - getUser().isolate(securityHelper.getLogin(), checkDeletionRight(user, "isolate")); + getUserRepository().isolate(securityHelper.getLogin(), checkDeletionRight(user, "isolate")); } /** @@ -738,7 +740,7 @@ public void isolate(@PathParam("user") final String user) { @PUT @Path("{user}/unlock") public void unlock(@PathParam("user") final String user) { - getUser().unlock(checkDeletionRight(user, "unlock")); + getUserRepository().unlock(checkDeletionRight(user, "unlock")); } /** @@ -757,7 +759,7 @@ public void unlock(@PathParam("user") final String user) { @PUT @Path("{user}/restore") public void restore(@PathParam("user") final String user) { - getUser().restore(checkDeletionRight(user, "restore")); + getUserRepository().restore(checkDeletionRight(user, "restore")); } /** @@ -782,7 +784,7 @@ public void restore(@PathParam("user") final String user) { public String resetPassword(@PathParam("user") final String uid) { if (uid.equals(securityHelper.getLogin())) { // Self-service reset password - final var user = getUser().findByIdExpected(uid); + final var user = getUserRepository().findByIdExpected(uid); return updatePassword(user, false); } @@ -792,7 +794,7 @@ public String resetPassword(@PathParam("user") final String uid) { return Optional.ofNullable(updatePassword(user, false)).map(p -> { // Unlock account if locked - getUser().unlock(user); + getUserRepository().unlock(user); // Log the action logAdminReset(user); @@ -819,10 +821,10 @@ private void logAdminReset(final UserOrg user) { */ private UserOrg checkResetRight(final String user) { // Check the user exists - final var userOrg = getUser().findByIdExpected(securityHelper.getLogin(), Normalizer.normalize(user)); + final var userOrg = getUserRepository().findByIdExpected(securityHelper.getLogin(), Normalizer.normalize(user)); // Check the company - final var companyDn = getCompany().findById(userOrg.getCompany()).getDn(); + final var companyDn = getCompanyRepository().findById(userOrg.getCompany()).getDn(); if (delegateRepository.findByMatchingDnForWrite(securityHelper.getLogin(), companyDn, DelegateType.TREE).isEmpty()) { // Report this attempt to delete a non-writable user log.warn("Attempt to reset the password of a user '{}' out of scope", user); @@ -840,10 +842,10 @@ private UserOrg checkResetRight(final String user) { */ private UserOrg checkDeletionRight(final String user, final String mode) { // Check the user exists - final var userOrg = getUser().findByIdExpected(securityHelper.getLogin(), Normalizer.normalize(user)); + final var userOrg = getUserRepository().findByIdExpected(securityHelper.getLogin(), Normalizer.normalize(user)); // Check the company - final var companyDn = getCompany().findById(userOrg.getCompany()).getDn(); + final var companyDn = getCompanyRepository().findById(userOrg.getCompany()).getDn(); if (delegateRepository.findByMatchingDnForWrite(securityHelper.getLogin(), companyDn, DelegateType.COMPANY).isEmpty()) { // Report this attempt to delete a non-writable user log.warn("Attempt to {} a user '{}' out of scope", mode, user); @@ -895,7 +897,7 @@ protected String updatePassword(final UserOrg user, final boolean quiet) { * @return the found users. May be empty. */ public List findAllBy(final String attribute, final String value) { - return getUser().findAllBy(attribute, value); + return getUserRepository().findAllBy(attribute, value); } /** @@ -905,7 +907,7 @@ public List findAllBy(final String attribute, final String value) { * @return the found user or null when not found. Groups are not fetched for this operation. */ public UserOrg findByIdNoCache(final String user) { - return getUser().findByIdNoCache(Normalizer.normalize(user)); + return getUserRepository().findByIdNoCache(Normalizer.normalize(user)); } /** @@ -918,7 +920,7 @@ private void updateCompanyAsNeeded(final UserOrg userOrg, final UserOrg newUser) // Check the company if (ObjectUtils.notEqual(userOrg.getCompany(), newUser.getCompany())) { // Move the user - getUser().move(userOrg, getCompany().findById(newUser.getCompany())); + getUserRepository().move(userOrg, getCompanyRepository().findById(newUser.getCompany())); } } @@ -929,7 +931,7 @@ private void updateCompanyAsNeeded(final UserOrg userOrg, final UserOrg newUser) * @return The group corresponding to the given department or null. */ private GroupOrg toDepartmentGroup(final String department) { - return Optional.ofNullable(department).map(getGroup()::findByDepartment).orElse(null); + return Optional.ofNullable(department).map(getGroupRepository()::findByDepartment).orElse(null); } /** @@ -945,10 +947,10 @@ public void mergeUser(final UserOrg userOrg, final UserOrg newUser) { // Merge department if (ObjectUtils.notEqual(userOrg.getDepartment(), newUser.getDepartment())) { // Remove membership from the old department if exist - Optional.ofNullable(toDepartmentGroup(userOrg.getDepartment())).ifPresent(g -> getGroup().removeUser(userOrg, g.getId())); + Optional.ofNullable(toDepartmentGroup(userOrg.getDepartment())).ifPresent(g -> getGroupRepository().removeUser(userOrg, g.getId())); // Add membership to the new department if exist - Optional.ofNullable(toDepartmentGroup(newUser.getDepartment())).ifPresent(g -> getGroup().addUser(userOrg, g.getId())); + Optional.ofNullable(toDepartmentGroup(newUser.getDepartment())).ifPresent(g -> getGroupRepository().addUser(userOrg, g.getId())); userOrg.setDepartment(newUser.getDepartment()); needUpdate = true; @@ -961,7 +963,7 @@ public void mergeUser(final UserOrg userOrg, final UserOrg newUser) { // Updated as needed if (needUpdate) { - getUser().updateUser(userOrg); + getUserRepository().updateUser(userOrg); } }