diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/gitlab/GitLabRepository.java b/src/main/java/at/ac/uibk/gitsearch/repository/gitlab/GitLabRepository.java index 1fc707820f66e517651d1f4ad09d8c2614c07b91..1ce65020fc98edef7466d334657193a4920279b9 100644 --- a/src/main/java/at/ac/uibk/gitsearch/repository/gitlab/GitLabRepository.java +++ b/src/main/java/at/ac/uibk/gitsearch/repository/gitlab/GitLabRepository.java @@ -111,7 +111,6 @@ public class GitLabRepository { @Cacheable(cacheNames = FULLPATH_OF_GROUP_CACHE) public String getFullPathOfGroup(final Long groupId) throws GitLabApiException { final Group group = getAdminGitLabApi().getGroupApi().getGroup(groupId); - final String fullPath = group.getFullPath(); - return fullPath; + return group.getFullPath(); } } diff --git a/src/main/java/at/ac/uibk/gitsearch/security/oauth2/UserDetailsFetcher.java b/src/main/java/at/ac/uibk/gitsearch/security/oauth2/UserDetailsFetcher.java index f25b24c7d96da369ebedf6a3af55c625cab3396b..9c4f010bed059b1ae32e43675fa1df9ecec1b393 100644 --- a/src/main/java/at/ac/uibk/gitsearch/security/oauth2/UserDetailsFetcher.java +++ b/src/main/java/at/ac/uibk/gitsearch/security/oauth2/UserDetailsFetcher.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Optional; import java.util.Set; import java.util.function.Consumer; +import java.util.stream.Stream; import org.apache.commons.lang3.RandomStringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -123,14 +124,7 @@ public class UserDetailsFetcher { } userToken = requestGitLabUserToken(gitUser, gitLabApi); - List<Membership> memberships = gitLabApi.getUserApi().getMemberships(gitUser.getId()); - for (Membership membership : memberships) { - if (MembershipSourceType.NAMESPACE.equals(membership.getSourceType())) { - final Long groupId = membership.getSourceId(); - final String fullPath = gitLabRepository.getFullPathOfGroup(groupId); - authorities.add(fullPath); - } - } + getUserMemberships(gitLabApi, gitUser).forEach(gitAuthority -> authorities.add(gitAuthority)); modified |= updateAttribute(gitUser.getAvatarUrl(), u.getImageUrl(), u::setImageUrl); modified |= updateAttribute(gitUser.getEmail(), u.getEmail(), u::setEmail); @@ -151,6 +145,36 @@ public class UserDetailsFetcher { return new UserDetailsInfo(userToken, modified); } + /** + * returns the pathes of all groups the user belongs to + * + * @param gitLabApi + * @param gitUser + * @return + */ + public Stream<String> getUserMemberships(GitLabApi gitLabApi, User gitUser) { + List<Membership> memberships; + try { + memberships = gitLabApi.getUserApi().getMemberships(gitUser.getId()); + } catch (GitLabApiException e) { + logger.warn("Cannot read group path for {}", gitUser); + return Stream.empty(); + } + return memberships + .stream() + .filter(membership -> MembershipSourceType.NAMESPACE.equals(membership.getSourceType())) + .map(membership -> membership.getSourceId()) // map to group id + .map(groupId -> { + try { + return gitLabRepository.getFullPathOfGroup(groupId); + } catch (GitLabApiException e) { + logger.warn("Cannot read group path for {}", groupId); + return null; + } + }) + .filter(path -> path != null); + } + private String generatePassword() { return RandomStringUtils.random(8, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz=%$-."); }