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(); }
@Override public void handle(Request request, Response response) throws Exception { userSession.checkLoggedIn(); try (DbSession dbSession = dbClient.openSession(false)) { String userLogin = userSession.getLogin(); UserDto userDto = dbClient.userDao().selectActiveUserByLogin(dbSession, userLogin); checkState(userDto != null, "User login '%s' cannot be found", userLogin); if (!userDto.isOnboarded()) { userDto.setOnboarded(true); // no need to update Elasticsearch, the field onBoarded // is not indexed dbClient.userDao().update(dbSession, userDto); dbSession.commit(); } } response.noContent(); } }
@Test public void does_nothing_if_user_already_onboarded() { UserDto user = db.users().insertUser(u -> u .setOnboarded(true)); userSession.logIn(user); call(); UserDto userDto = selectUser(user.getLogin()); assertThat(userDto.isOnboarded()).isEqualTo(true); assertThat(userDto.getUpdatedAt()).isEqualTo(user.getUpdatedAt()); }
@Test public void mark_user_as_onboarded() { UserDto user = db.users().insertUser(u -> u .setOnboarded(false)); userSession.logIn(user); call(); UserDto userDto = selectUser(user.getLogin()); assertThat(userDto.isOnboarded()).isEqualTo(true); }
assertThat(user.getEmail()).isEqualTo("jo@hn.com"); assertThat(user.isActive()).isTrue(); assertThat(user.isOnboarded()).isTrue(); assertThat(user.getScmAccounts()).isEqualTo(",jo.hn,john2,"); assertThat(user.getSalt()).isEqualTo("1234");
assertThat(reloaded.getEmail()).isEqualTo("jodoo@hn.com"); assertThat(reloaded.isActive()).isFalse(); assertThat(reloaded.isOnboarded()).isTrue(); assertThat(reloaded.getScmAccounts()).isEqualTo(",jo.hn,john2,johndoo,"); assertThat(reloaded.getSalt()).isEqualTo("12345");
@Test public void create_not_onboarded_user_if_onboarding_setting_is_set_to_false() { settings.setProperty(ONBOARDING_TUTORIAL_SHOW_TO_NEW_USERS.getKey(), false); createDefaultGroup(); underTest.createAndCommit(db.getSession(), NewUser.builder() .setLogin("user") .setName("User") .build(), u -> { }); assertThat(dbClient.userDao().selectByLogin(session, "user").isOnboarded()).isTrue(); }
@Test public void create_onboarded_user_if_onboarding_setting_is_set_to_true() { settings.setProperty(ONBOARDING_TUTORIAL_SHOW_TO_NEW_USERS.getKey(), true); createDefaultGroup(); underTest.createAndCommit(db.getSession(), NewUser.builder() .setLogin("user") .setName("User") .build(), u -> { }); assertThat(dbClient.userDao().selectByLogin(session, "user").isOnboarded()).isFalse(); }
@Test public void authenticate_new_user_sets_onboarded_flag_to_false_when_onboarding_setting_is_set_to_true() { organizationFlags.setEnabled(true); settings.setProperty(ONBOARDING_TUTORIAL_SHOW_TO_NEW_USERS.getKey(), true); underTest.register(UserRegistration.builder() .setUserIdentity(USER_IDENTITY) .setProvider(IDENTITY_PROVIDER) .setSource(Source.local(BASIC)) .setExistingEmailStrategy(ExistingEmailStrategy.FORBID) .setUpdateLoginStrategy(UpdateLoginStrategy.ALLOW) .build()); assertThat(db.users().selectUserByLogin(USER_LOGIN).get().isOnboarded()).isFalse(); }
@Test public void authenticate_new_user_sets_onboarded_flag_to_true_when_onboarding_setting_is_set_to_false() { organizationFlags.setEnabled(true); settings.setProperty(ONBOARDING_TUTORIAL_SHOW_TO_NEW_USERS.getKey(), false); underTest.register(UserRegistration.builder() .setUserIdentity(USER_IDENTITY) .setProvider(IDENTITY_PROVIDER) .setSource(Source.local(BASIC)) .setExistingEmailStrategy(ExistingEmailStrategy.FORBID) .setUpdateLoginStrategy(UpdateLoginStrategy.ALLOW) .build()); assertThat(db.users().selectUserByLogin(USER_LOGIN).get().isOnboarded()).isTrue(); }
@Test public void reactivate_not_onboarded_user_if_onboarding_setting_is_set_to_false() { settings.setProperty(ONBOARDING_TUTORIAL_SHOW_TO_NEW_USERS.getKey(), false); UserDto user = db.users().insertDisabledUser(u -> u.setOnboarded(false)); createDefaultGroup(); underTest.reactivateAndCommit(db.getSession(), user, NewUser.builder() .setLogin(user.getLogin()) .setName(user.getName()) .build(), u -> { }); assertThat(dbClient.userDao().selectByLogin(session, user.getLogin()).isOnboarded()).isTrue(); }
@Test public void reactivate_onboarded_user_if_onboarding_setting_is_set_to_true() { settings.setProperty(ONBOARDING_TUTORIAL_SHOW_TO_NEW_USERS.getKey(), true); UserDto user = db.users().insertDisabledUser(u -> u.setOnboarded(true)); createDefaultGroup(); underTest.reactivateAndCommit(db.getSession(), user, NewUser.builder() .setLogin(user.getLogin()) .setName(user.getName()) .build(), u -> { }); assertThat(dbClient.userDao().selectByLogin(session, user.getLogin()).isOnboarded()).isFalse(); }
@Override public void handle(Request request, Response response) throws Exception { userSession.checkLoggedIn(); try (DbSession dbSession = dbClient.openSession(false)) { String userLogin = userSession.getLogin(); UserDto userDto = dbClient.userDao().selectActiveUserByLogin(dbSession, userLogin); checkState(userDto != null, "User login '%s' cannot be found", userLogin); if (!userDto.isOnboarded()) { userDto.setOnboarded(true); // no need to update Elasticsearch, the field onBoarded // is not indexed dbClient.userDao().update(dbSession, userDto); dbSession.commit(); } } response.noContent(); } }
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(); }