private User towsUser(UserDto user, @Nullable Integer tokensCount, Collection<String> groups, @Nullable Collection<String> fields) { User.Builder userBuilder = User.newBuilder() .setLogin(user.getLogin()); setIfNeeded(FIELD_NAME, fields, user.getName(), userBuilder::setName); if (userSession.isLoggedIn()) { setIfNeeded(FIELD_AVATAR, fields, emptyToNull(user.getEmail()), u -> userBuilder.setAvatar(avatarResolver.create(user))); setIfNeeded(FIELD_ACTIVE, fields, user.isActive(), userBuilder::setActive); setIfNeeded(FIELD_LOCAL, fields, user.isLocal(), userBuilder::setLocal); setIfNeeded(FIELD_EXTERNAL_PROVIDER, fields, user.getExternalIdentityProvider(), userBuilder::setExternalProvider); setIfNeeded(isNeeded(FIELD_TOKENS_COUNT, fields) && user.getLogin().equals(userSession.getLogin()), tokensCount, userBuilder::setTokensCount); setIfNeeded(isNeeded(FIELD_SCM_ACCOUNTS, fields) && !user.getScmAccountsAsList().isEmpty(), user.getScmAccountsAsList(), scm -> userBuilder.setScmAccounts(ScmAccounts.newBuilder().addAllScmAccounts(scm))); } if (userSession.isSystemAdministrator()) { setIfNeeded(FIELD_EMAIL, fields, user.getEmail(), userBuilder::setEmail); setIfNeeded(isNeeded(FIELD_GROUPS, fields) && !groups.isEmpty(), groups, g -> userBuilder.setGroups(Groups.newBuilder().addAllGroups(g))); setIfNeeded(FIELD_EXTERNAL_IDENTITY, fields, user.getExternalLogin(), userBuilder::setExternalIdentity); setIfNeeded(FIELD_TOKENS_COUNT, fields, tokensCount, userBuilder::setTokensCount); } return userBuilder.build(); }
private User towsUser(UserDto user, @Nullable Integer tokensCount, Collection<String> groups, @Nullable Collection<String> fields) { User.Builder userBuilder = User.newBuilder() .setLogin(user.getLogin()); setIfNeeded(FIELD_NAME, fields, user.getName(), userBuilder::setName); if (userSession.isLoggedIn()) { setIfNeeded(FIELD_AVATAR, fields, emptyToNull(user.getEmail()), u -> userBuilder.setAvatar(avatarResolver.create(user))); setIfNeeded(FIELD_ACTIVE, fields, user.isActive(), userBuilder::setActive); setIfNeeded(FIELD_LOCAL, fields, user.isLocal(), userBuilder::setLocal); setIfNeeded(FIELD_EXTERNAL_IDENTITY, fields, user.getExternalLogin(), userBuilder::setExternalIdentity); setIfNeeded(FIELD_EXTERNAL_PROVIDER, fields, user.getExternalIdentityProvider(), userBuilder::setExternalProvider); setIfNeeded(FIELD_TOKENS_COUNT, fields, tokensCount, userBuilder::setTokensCount); setIfNeeded(isNeeded(FIELD_SCM_ACCOUNTS, fields) && !user.getScmAccountsAsList().isEmpty(), user.getScmAccountsAsList(), scm -> userBuilder.setScmAccounts(ScmAccounts.newBuilder().addAllScmAccounts(scm))); } if (userSession.isSystemAdministrator()) { setIfNeeded(FIELD_EMAIL, fields, user.getEmail(), userBuilder::setEmail); setIfNeeded(isNeeded(FIELD_GROUPS, fields) && !groups.isEmpty(), groups, g -> userBuilder.setGroups(Groups.newBuilder().addAllGroups(g))); } return userBuilder.build(); }
@Test public void return_groups_only_when_system_administer() { UserDto user = db.users().insertUser(); GroupDto group1 = db.users().insertGroup(db.getDefaultOrganization(), "group1"); GroupDto group2 = db.users().insertGroup(db.getDefaultOrganization(), "group2"); GroupDto group3 = db.users().insertGroup(db.getDefaultOrganization(), "group3"); db.users().insertMember(group1, user); db.users().insertMember(group2, user); userIndexer.indexOnStartup(null); userSession.logIn().setSystemAdministrator(); assertThat(ws.newRequest() .executeProtobuf(SearchWsResponse.class).getUsersList()) .extracting(User::getLogin, u -> u.getGroups().getGroupsList()) .containsExactlyInAnyOrder(tuple(user.getLogin(), asList(group1.getName(), group2.getName()))); userSession.logIn(); assertThat(ws.newRequest() .executeProtobuf(SearchWsResponse.class).getUsersList()) .extracting(User::getLogin, User::hasGroups) .containsExactlyInAnyOrder(tuple(user.getLogin(), false)); }