From 8a6d1f6da248ded0bd5874fdb8cd9688b95dc81e Mon Sep 17 00:00:00 2001 From: derBobby Date: Fri, 7 Jun 2024 22:56:04 +0200 Subject: [PATCH] 1.4.0-SNAPSHOT: Parallel Nextcloud user fetching --- pom.xml | 2 +- .../service/NextcloudApiService.java | 1 + .../service/NextcloudApiUserService.java | 84 ++++++++++--------- 3 files changed, 46 insertions(+), 41 deletions(-) diff --git a/pom.xml b/pom.xml index e16b013..9215a2f 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ eu.planlos java-nextcloud-connector - 1.3.0-SNAPSHOT + 1.4.0-SNAPSHOT org.springframework.boot diff --git a/src/main/java/eu/planlos/javanextcloudconnector/service/NextcloudApiService.java b/src/main/java/eu/planlos/javanextcloudconnector/service/NextcloudApiService.java index 0c0b66e..ab41030 100644 --- a/src/main/java/eu/planlos/javanextcloudconnector/service/NextcloudApiService.java +++ b/src/main/java/eu/planlos/javanextcloudconnector/service/NextcloudApiService.java @@ -20,6 +20,7 @@ public boolean isAPIDisabled() { log.info("Nextcloud API is not enabled. Returning empty list or null"); return true; } + log.debug("Nextcloud API is enabled"); return false; } } \ No newline at end of file diff --git a/src/main/java/eu/planlos/javanextcloudconnector/service/NextcloudApiUserService.java b/src/main/java/eu/planlos/javanextcloudconnector/service/NextcloudApiUserService.java index 6163598..2a6f7a3 100644 --- a/src/main/java/eu/planlos/javanextcloudconnector/service/NextcloudApiUserService.java +++ b/src/main/java/eu/planlos/javanextcloudconnector/service/NextcloudApiUserService.java @@ -40,35 +40,8 @@ public NextcloudApiUserService(NextcloudApiConfig config, @Qualifier("NextcloudW super(config, webClient); } - public List getAllUserIdsFromNextcloud() { - - if(isAPIDisabled()) { - return Collections.emptyList(); - } - - NextcloudApiResponse apiResponse = webClient - .get() - .uri(NC_API_USERLIST_JSON_URL) - .retrieve() - .bodyToMono(new ParameterizedTypeReference>() { - }) - .retryWhen(Retry - .fixedDelay(config.retryCount(), Duration.ofSeconds(config.retryInterval())) - .filter(WebClientRetryFilter::shouldRetry) - ) - .doOnError(error -> log.error("{}: {}", FAIL_MESSAGE_GET_USERS, error.getMessage())) - .block(); - - if (apiResponse == null) { - throw new NextcloudException(NextcloudException.IS_NULL); - } - - NextcloudUserList nextcloudUseridList = apiResponse.getData(); - return nextcloudUseridList.getUsers(); - } - private NextcloudUser getUser(String username) { - + log.debug("Getting user from Nextcloud"); if(isAPIDisabled()) { return null; } @@ -89,17 +62,6 @@ private NextcloudUser getUser(String username) { return apiResponse.getData(); } - public Map getAllUsersAsUseridEmailMap() { - List useridList = getAllUserIdsFromNextcloud(); - return useridList.stream().collect(Collectors.toMap( - userid -> userid, - userid -> { - NextcloudUser user = getUser(userid); - return user == null ? "" : user.email(); - } - )); - } - /** * Checks, if email is already in use, generates username from given parameters. tries to create account in Nextcloud * @param email to use for account @@ -109,6 +71,8 @@ public Map getAllUsersAsUseridEmailMap() { */ public Optional createUser(String email, String firstName, String lastName) { + log.debug("Starting Nextcloud user creation"); + if (isAPIDisabled()) { log.info(SUCCESS_API_INACTIVE); return Optional.of(""); @@ -116,6 +80,7 @@ public Optional createUser(String email, String firstName, String lastNa Map allUsersMap = getAllUsersAsUseridEmailMap(); if(isMailAddressAlreadyInUse(email, allUsersMap)) { + log.info("Mail address already in use"); return Optional.empty(); } @@ -151,6 +116,46 @@ public Optional createUser(String email, String firstName, String lastNa return Optional.of(userid); } + private Map getAllUsersAsUseridEmailMap() { + log.debug("Creating id/email map for all users"); + + List useridList = fetchAllUserIdsFromNextcloud(); + return useridList.parallelStream().collect(Collectors.toConcurrentMap( + userid -> userid, + userid -> { + NextcloudUser user = getUser(userid); + return user == null ? "" : user.email(); + } + )); + } + + private List fetchAllUserIdsFromNextcloud() { + log.debug("Fetching all users from Nextcloud"); + if(isAPIDisabled()) { + return Collections.emptyList(); + } + + NextcloudApiResponse apiResponse = webClient + .get() + .uri(NC_API_USERLIST_JSON_URL) + .retrieve() + .bodyToMono(new ParameterizedTypeReference>() { + }) + .retryWhen(Retry + .fixedDelay(config.retryCount(), Duration.ofSeconds(config.retryInterval())) + .filter(WebClientRetryFilter::shouldRetry) + ) + .doOnError(error -> log.error("{}: {}", FAIL_MESSAGE_GET_USERS, error.getMessage())) + .block(); + + if (apiResponse == null) { + throw new NextcloudException(NextcloudException.IS_NULL); + } + + NextcloudUserList nextcloudUseridList = apiResponse.getData(); + return nextcloudUseridList.getUsers(); + } + /* * Username generators */ @@ -161,7 +166,6 @@ private String generateUserId(Map allUsersMap, String firstNameP } private String generateUserId(Map allUsersMap, String firstName, String lastName, int charCount) { - // Assert because <= 0 can only happen for coding errors assert charCount > 0;