private CurrentWsResponse toWsResponse(DbSession dbSession, String userLogin) { UserDto user = dbClient.userDao().selectActiveUserByLogin(dbSession, userLogin); checkState(user != null, "User login '%s' cannot be found", userLogin); Collection<String> groups = dbClient.groupMembershipDao().selectGroupsByLogins(dbSession, singletonList(userLogin)).get(userLogin); Optional<OrganizationDto> personalOrganization = getPersonalOrganization(dbSession, user); CurrentWsResponse.Builder builder = newBuilder() .setIsLoggedIn(true) .setLogin(user.getLogin()) .setName(user.getName()) .setLocal(user.isLocal()) .addAllGroups(groups) .addAllScmAccounts(user.getScmAccountsAsList()) .setPermissions(Permissions.newBuilder().addAllGlobal(getGlobalPermissions()).build()) .setHomepage(buildHomepage(dbSession, user)) .setShowOnboardingTutorial(!user.isOnboarded()) .addAllSettings(loadUserSettings(dbSession, user)); ofNullable(emptyToNull(user.getEmail())).ifPresent(builder::setEmail); ofNullable(emptyToNull(user.getEmail())).ifPresent(u -> builder.setAvatar(avatarResolver.create(user))); ofNullable(user.getExternalLogin()).ifPresent(builder::setExternalIdentity); ofNullable(user.getExternalIdentityProvider()).ifPresent(builder::setExternalProvider); personalOrganization.ifPresent(org -> builder.setPersonalOrganization(org.getKey())); return builder.build(); }
@Test public void return_minimal_user_info() { UserDto user = db.users().insertUser(u -> u .setLogin("obiwan.kenobi") .setName("Obiwan Kenobi") .setEmail(null) .setLocal(true) .setExternalLogin("obiwan") .setExternalIdentityProvider("sonarqube") .setScmAccounts((String) null)); userSession.logIn(user); CurrentWsResponse response = call(); assertThat(response) .extracting(CurrentWsResponse::getIsLoggedIn, CurrentWsResponse::getLogin, CurrentWsResponse::getName, CurrentWsResponse::hasAvatar, CurrentWsResponse::getLocal, CurrentWsResponse::getExternalIdentity, CurrentWsResponse::getExternalProvider, CurrentWsResponse::hasPersonalOrganization, CurrentWsResponse::getSettingsList) .containsExactly(true, "obiwan.kenobi", "Obiwan Kenobi", false, true, "obiwan", "sonarqube", false, Collections.emptyList()); assertThat(response.hasEmail()).isFalse(); assertThat(response.getScmAccountsList()).isEmpty(); assertThat(response.getGroupsList()).isEmpty(); assertThat(response.getPermissions().getGlobalList()).isEmpty(); }
private CurrentWsResponse toWsResponse(DbSession dbSession, String userLogin) { UserDto user = dbClient.userDao().selectActiveUserByLogin(dbSession, userLogin); checkState(user != null, "User login '%s' cannot be found", userLogin); Collection<String> groups = dbClient.groupMembershipDao().selectGroupsByLogins(dbSession, singletonList(userLogin)).get(userLogin); CurrentWsResponse.Builder builder = newBuilder() .setIsLoggedIn(true) .setLogin(user.getLogin()) .setName(user.getName()) .setLocal(user.isLocal()) .addAllGroups(groups) .addAllScmAccounts(user.getScmAccountsAsList()) .setPermissions(Permissions.newBuilder().addAllGlobal(getGlobalPermissions()).build()) .setHomepage(buildHomepage(dbSession, user)) .setShowOnboardingTutorial(!user.isOnboarded()); setNullable(emptyToNull(user.getEmail()), builder::setEmail); setNullable(emptyToNull(user.getEmail()), u -> builder.setAvatar(avatarResolver.create(user))); setNullable(user.getExternalLogin(), builder::setExternalIdentity); setNullable(user.getExternalIdentityProvider(), builder::setExternalProvider); return builder.build(); }
@Override public void handle(Request request, Response response) throws Exception { if (userSession.isLoggedIn()) { try (DbSession dbSession = dbClient.openSession(false)) { writeProtobuf(toWsResponse(dbSession, userSession.getLogin()), request, response); } } else { writeProtobuf(newBuilder() .setIsLoggedIn(false) .setPermissions(Permissions.newBuilder().addAllGlobal(getGlobalPermissions()).build()) .build(), request, response); } }
@Override public void handle(Request request, Response response) throws Exception { if (userSession.isLoggedIn()) { try (DbSession dbSession = dbClient.openSession(false)) { writeProtobuf(toWsResponse(dbSession, userSession.getLogin()), request, response); } } else { writeProtobuf(newBuilder() .setIsLoggedIn(false) .setPermissions(Permissions.newBuilder().addAllGlobal(getGlobalPermissions()).build()) .build(), request, response); } }
@Test public void anonymous() { userSession .anonymous() .addPermission(SCAN, db.getDefaultOrganization()) .addPermission(PROVISION_PROJECTS, db.getDefaultOrganization()); CurrentWsResponse response = call(); assertThat(response.getIsLoggedIn()).isFalse(); assertThat(response.getPermissions().getGlobalList()).containsOnly("scan", "provisioning"); assertThat(response) .extracting(CurrentWsResponse::hasLogin, CurrentWsResponse::hasName, CurrentWsResponse::hasEmail, CurrentWsResponse::hasLocal, CurrentWsResponse::hasExternalIdentity, CurrentWsResponse::hasExternalProvider) .containsOnly(false); assertThat(response.getScmAccountsList()).isEmpty(); assertThat(response.getGroupsList()).isEmpty(); }
@Test public void return_permissions() { UserDto user = db.users().insertUser(); userSession .logIn(user) // permissions on default organization .addPermission(SCAN, db.getDefaultOrganization()) .addPermission(ADMINISTER_QUALITY_PROFILES, db.getDefaultOrganization()) // permissions on other organizations are ignored .addPermission(ADMINISTER, db.organizations().insert()); CurrentWsResponse response = call(); assertThat(response.getPermissions().getGlobalList()).containsOnly("profileadmin", "scan"); }