diff --git a/wsmaster/che-core-api-user/src/main/java/org/eclipse/che/api/user/server/UserManager.java b/wsmaster/che-core-api-user/src/main/java/org/eclipse/che/api/user/server/UserManager.java index 54cc273d65f..6f1da2d75b5 100644 --- a/wsmaster/che-core-api-user/src/main/java/org/eclipse/che/api/user/server/UserManager.java +++ b/wsmaster/che-core-api-user/src/main/java/org/eclipse/che/api/user/server/UserManager.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.che.api.user.server; +import com.google.common.collect.Sets; + import org.eclipse.che.api.core.ConflictException; import org.eclipse.che.api.core.NotFoundException; import org.eclipse.che.api.core.ServerException; @@ -22,9 +24,11 @@ import org.slf4j.LoggerFactory; import javax.inject.Inject; +import javax.inject.Named; import java.util.HashMap; import java.util.Map; +import java.util.Set; import static com.google.common.base.MoreObjects.firstNonNull; import static java.lang.String.format; @@ -45,15 +49,17 @@ public class UserManager { private final UserDao userDao; private final UserProfileDao profileDao; private final PreferenceDao preferenceDao; - + private final Set reservedNames; @Inject public UserManager(UserDao userDao, UserProfileDao profileDao, - PreferenceDao preferenceDao) { + PreferenceDao preferenceDao, + @Named("user.reserved_names") String[] reservedNames) { this.userDao = userDao; this.profileDao = profileDao; this.preferenceDao = preferenceDao; + this.reservedNames = Sets.newHashSet(reservedNames); } @@ -68,6 +74,9 @@ public UserManager(UserDao userDao, * when any other error occurs */ public void create(User user, boolean isTemporary) throws ConflictException, ServerException { + if (reservedNames.contains(user.getName().toLowerCase())) { + throw new ConflictException(String.format("Username \"%s\" is reserved", user.getName())); + } user.withId(generate("user", ID_LENGTH)) .withPassword(firstNonNull(user.getPassword(), generate("", PASSWORD_LENGTH))); userDao.create(user); diff --git a/wsmaster/che-core-api-user/src/test/java/org/eclipse/che/api/user/server/UserManagerTest.java b/wsmaster/che-core-api-user/src/test/java/org/eclipse/che/api/user/server/UserManagerTest.java index 81262fbc1af..a6769e8880a 100644 --- a/wsmaster/che-core-api-user/src/test/java/org/eclipse/che/api/user/server/UserManagerTest.java +++ b/wsmaster/che-core-api-user/src/test/java/org/eclipse/che/api/user/server/UserManagerTest.java @@ -10,15 +10,15 @@ *******************************************************************************/ package org.eclipse.che.api.user.server; -import org.eclipse.che.api.core.BadRequestException; +import org.eclipse.che.api.core.ConflictException; import org.eclipse.che.api.user.server.dao.PreferenceDao; import org.eclipse.che.api.user.server.dao.Profile; import org.eclipse.che.api.user.server.dao.User; import org.eclipse.che.api.user.server.dao.UserDao; import org.eclipse.che.api.user.server.dao.UserProfileDao; -import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; +import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; @@ -26,7 +26,6 @@ import static org.mockito.Matchers.anyMapOf; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; /** @@ -45,12 +44,17 @@ public class UserManagerTest { @Mock PreferenceDao preferenceDao; - @InjectMocks UserManager manager; + @BeforeMethod + public void setUp() { + manager = new UserManager(userDao, profileDao, preferenceDao, new String[0]); + } + @Test public void shouldCreateProfileAndPreferencesOnUserCreation() throws Exception { final User user = new User().withEmail("test@email.com").withName("testName"); + manager.create(user, false); verify(profileDao).create(any(Profile.class)); @@ -60,8 +64,16 @@ public void shouldCreateProfileAndPreferencesOnUserCreation() throws Exception { @Test public void shouldGeneratedPasswordWhenCreatingUserAndItIsMissing() throws Exception { final User user = new User().withEmail("test@email.com").withName("testName"); + manager.create(user, false); verify(userDao).create(eq(user.withPassword(""))); } + + @Test(expectedExceptions = ConflictException.class) + public void shouldThrowConflictExceptionOnCreationIfUserNameIsReserved() throws Exception { + final User user = new User().withEmail("test@email.com").withName("reserved"); + + new UserManager(userDao, profileDao, preferenceDao, new String[] {"reserved"}).create(user, false); + } }