@RolesAllowed("admin") @PUT @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public UserUI createUser(UserForm userForm, @PathParam("userName") UserName userName) throws IOException, IllegalArgumentException, NamespaceException, DACUnauthorizedException { checkUser(userName, "create"); User newUser = SimpleUser.newBuilder(userForm.getUserConfig()).setCreatedAt(System.currentTimeMillis()).build(); newUser = userService.createUser(newUser, userForm.getPassword()); try { namespaceService.addOrUpdateHome(new HomePath(HomeName.getUserHomePath(userName.getName())).toNamespaceKey(), new HomeConfig().setCtime(System.currentTimeMillis()).setOwner(userName.getName())); } catch (Exception e) { try { userService.deleteUser(newUser.getUserName(), newUser.getVersion()); } catch (UserNotFoundException e1) { logger.warn("Could not delete a user {} after failing to create corresponding home space", userName.getName()); } finally { throw UserException.unsupportedError() .message("Could not create user '%s', make sure you don't already have a similar user with different casing", newUser.getUserName()) .addContext("Cause", e.getMessage()) .build(); } } return new UserUI(new UserResourcePath(userName), userName, newUser); }
@PUT @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @Path("firstuser") public UserUI createUser(UserForm userForm) throws IOException, IllegalArgumentException, NamespaceException, DACUnauthorizedException, UserNotFoundException { synchronized (this) { if (dContext.getUserService().hasAnyUser()) { throw UserException.validationError().message(ERROR_MSG).build(logger); } final UserName userName = new UserName(userForm.getUserConfig().getUserName()); User newUser = SimpleUser.newBuilder(userForm.getUserConfig()).setCreatedAt(System.currentTimeMillis()).build(); newUser = userService.createUser(newUser, userForm.getPassword()); dContext.getNamespaceService(SystemUser.SYSTEM_USERNAME) .addOrUpdateHome( new HomePath(HomeName.getUserHomePath(userName.getName())).toNamespaceKey(), new HomeConfig().setCtime(System.currentTimeMillis()).setOwner(userName.getName()) ); return new UserUI(new UserResourcePath(userName), userName, newUser); } } }
@RolesAllowed({"admin", "user"}) @POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public UserUI updateUser(UserForm userForm, @PathParam("userName") UserName userName) throws IOException, IllegalArgumentException, NamespaceException, UserNotFoundException, DACUnauthorizedException { checkUser(userName, "update"); User userConfig = userForm.getUserConfig(); if (userConfig != null && userConfig.getUserName() != null && !userConfig.getUserName().equals(userName.getName())) { final UserName newUserName = new UserName(userForm.getUserConfig().getUserName()); userConfig = userService.updateUserName(userName.getName(), newUserName.getName(), userConfig, userForm.getPassword()); // TODO: rename home space and all uploaded files along with it // new username return new UserUI(new UserResourcePath(newUserName), newUserName, userConfig); } else { User newUser = SimpleUser.newBuilder(userForm.getUserConfig()).setUserName(userName.getName()).build(); newUser = userService.updateUser(newUser, userForm.getPassword()); return new UserUI(new UserResourcePath(userName), userName, newUser); } }
/** * Helper method to create the user if the user doesn't already exists. * @param userService * @param ns Instance of {@link NamespaceService} with no user context. * @param user * @param passwd * @param fn * @param ln * @param roles * @throws Exception */ private static void createUserIfNotExists(UserService userService, NamespaceService ns, String user, String passwd, String fn, String ln) throws IOException, NamespaceException { try { userService.getUser(user); } catch (UserNotFoundException e) { User userConfig = SimpleUser.newBuilder() .setUserName(user) .setEmail(user + "@dremio.test") .setFirstName(fn) .setLastName(ln) .build(); userService.createUser(userConfig, passwd); } // Now create the home folder for the user createHomeDir(ns, user); }
protected User fromUserConfig(UserConfig userConfig) { return SimpleUser.newBuilder() .setUID(userConfig.getUid()) .setUserName(userConfig.getUserName()) .setFirstName(userConfig.getFirstName()) .setLastName(userConfig.getLastName()) .setEmail(userConfig.getEmail()) .setCreatedAt(userConfig.getCreatedAt()) .setModifiedAt(userConfig.getModifiedAt()) .setVersion(userConfig.getTag()) .build(); }
@Before public void setup() throws Exception { final UserService userService = l(UserService.class); SimpleUser user1 = SimpleUser.newBuilder().setUserName("user1").setFirstName("").setLastName("").setEmail("user1@foo.com").build(); createdUser = userService.createUser(user1, "foo12bar"); }
@Override public User getUser(String userName) throws UserNotFoundException { switch (userName) { case TEST_USER_1: case TEST_USER_2: case ADMIN_USER: case "anonymous": return SimpleUser.newBuilder() .setUID(new UID(userName)) .setUserName(userName) .setEmail(userName + "@dremio.test") .setFirstName(userName + " FN") .setLastName(userName + " LN") .build(); case SystemUser.SYSTEM_USERNAME: return SystemUser.SYSTEM_USER; default: throw new UserNotFoundException(userName); } }
final User uc = SimpleUser.newBuilder().setUserName("bootstrap_user").setEmail("bootstrap_user@dremio.test") .setFirstName("test").setLastName("dremio").build(); expectSuccess(getAPIv2().path("bootstrap/firstuser").request(JSON).buildPut(Entity.json(new UserForm(uc, "dremio123"))), UserUI.class); final User uc = SimpleUser.newBuilder().setUserName("bootstrap_user_2").setEmail("bootstrap_user_2@dremio.test") .setFirstName("bootstrap").setLastName("dremio").build(); UserExceptionMapper.ErrorMessageWithContext errorMessage = expectError(FamilyExpectation.CLIENT_ERROR, getAPIv2()
@Override public User getUser(UID uid) throws UserNotFoundException { final String userName = uid.getId(); switch (userName) { case TEST_USER_1: case TEST_USER_2: case ADMIN_USER: case "anonymous": return SimpleUser.newBuilder() .setUID(new UID(userName)) .setUserName(userName) .setEmail(userName + "@dremio.test") .setFirstName(userName + " FN") .setLastName(userName + " LN") .build(); case SystemUser.SYSTEM_USERNAME: return SystemUser.SYSTEM_USER; default: throw new UserNotFoundException(userName); } }
final SimpleUserService userGroupService = new SimpleUserService(kvstore); User db = SimpleUser.newBuilder().setUserName("DavidBrown").setCreatedAt(System.currentTimeMillis()). setEmail("david.brown@dremio.test").setFirstName("David").setLastName("Brown").build(); User md = SimpleUser.newBuilder().setUserName("MarkDavid").setCreatedAt(System.currentTimeMillis()). setEmail("markdavid@gmail.com").setFirstName("Mark").setLastName("David").build(); User dw = SimpleUser.newBuilder().setUserName("DavidWilson").setCreatedAt(System.currentTimeMillis()). setEmail("david@dremio.test").setFirstName("David").setLastName("Wilson").build(); User mj = SimpleUser.newBuilder().setUserName("MarkJohnson").setCreatedAt(System.currentTimeMillis()). setEmail("mark.johnson@dremio.test").setFirstName("Mark").setLastName("Johnson").build(); db = SimpleUser.newBuilder(db).setEmail("db").build(); db = SimpleUser.newBuilder(db) .setUserName(newUserName) .setFirstName("John") db = SimpleUser.newBuilder(db).setUserName(oldUserName).build(); db = userGroupService.updateUserName(newUserName, oldUserName, db, null);
getPopulator().populateTestUsers(); final UserService userService = l(UserService.class); User db = SimpleUser.newBuilder().setUserName(testUserName("DavidBrown")).setCreatedAt(System.currentTimeMillis()). setEmail("david.brown@dremio.test").setFirstName("David").setLastName("Brown").build(); User md = SimpleUser.newBuilder().setUserName(testUserName("MarkDavid")).setCreatedAt(System.currentTimeMillis()). setEmail("markdavid@gmail.com").setFirstName("Mark").setLastName("David").build(); User dw = SimpleUser.newBuilder().setUserName(testUserName("DavidWilson")).setCreatedAt(System.currentTimeMillis()). setEmail("david@dremio.test").setFirstName("David").setLastName("Wilson").build(); User mj = SimpleUser.newBuilder().setUserName("MarkJohnson").setCreatedAt(System.currentTimeMillis()). setEmail("mark.johnson@dremio.test").setFirstName("Mark").setLastName("Johnson").build();
@Test public void testUserOCC() throws Exception { getPopulator().populateTestUsers(); doc("create user"); final User uc = SimpleUser.newBuilder().setUserName(testUserName("test11")).setEmail("test11@dremio.test").setFirstName("test11") .setLastName("dremio").build(); expectSuccess(getBuilder(getAPIv2().path("user/" + testUserName("test11"))).buildPut(Entity.json(new UserForm(uc, testPassword("test11")))), UserUI.class); UserUI u1 = expectSuccess(getBuilder(getAPIv2().path("user/" + testUserName("test11"))).buildGet(), UserUI.class); doc("update user"); final User uc2 = SimpleUser.newBuilder(u1.getUser()).setEmail("test22@dremio.test").build(); expectSuccess(getBuilder(getAPIv2().path("user/" + testUserName("test11"))).buildPost(Entity.json(new UserForm(uc2))), UserUI.class); UserUI u2 = expectSuccess(getBuilder(getAPIv2().path("user/" + testUserName("test11"))).buildGet(), UserUI.class); assertEquals(uc2.getEmail(), u2.getUser().getEmail()); doc("delete with missing version"); final GenericErrorMessage errorDelete = expectStatus(BAD_REQUEST, getBuilder(getAPIv2().path("user/" + testUserName("test11"))).buildDelete(), GenericErrorMessage.class); assertErrorMessage(errorDelete, "missing version param"); doc("delete with bad version"); final GenericErrorMessage errorDelete2 = expectStatus(CONFLICT, getBuilder(getAPIv2().path("user/" + testUserName("test11")).queryParam("version", 1234L)).buildDelete(), GenericErrorMessage.class); assertErrorMessage(errorDelete2, "tried to delete version 1234, found previous version 1"); doc("delete"); expectSuccess(getBuilder(getAPIv2().path("user/" + testUserName("test11")).queryParam("version", u2.getUser().getVersion())).buildDelete()); }
@Test public void testUserChangePassword() throws Exception { doc("Creating user"); User userConfig = SimpleUser.newBuilder().setUserName(testUserName("test12")).setEmail("test1@dremio.test").setFirstName("test12") .setLastName("dremio").build(); expectSuccess(getBuilder(getAPIv2().path("user/" + testUserName("test12"))).buildPut(Entity.json(new UserForm(userConfig, testPassword("test12")))), UserUI.class); UserUI u = expectSuccess(getBuilder(getAPIv2().path("user/" + testUserName("test12"))).buildGet(), UserUI.class); doc("login"); UserLogin userLogin = new UserLogin(testUserName("test12"), testPassword("test12")); expectSuccess(getBuilder(getAPIv2().path("/login")).buildPost(Entity.json(userLogin)), UserLoginSession.class); doc("change name"); User userConfig2 = SimpleUser.newBuilder(u.getUser()).setUserName(testUserName("newTestName")).build(); expectSuccess(getBuilder(getAPIv2().path("user/" + testUserName("test12"))).buildPost(Entity.json(new UserForm(userConfig2, testPassword("test12")))), UserUI.class); UserLogin userLogin2 = new UserLogin(testUserName("newTestName"), testPassword("test12")); expectSuccess(getBuilder(getAPIv2().path("/login")).buildPost(Entity.json(userLogin2)), UserLoginSession.class); u = expectSuccess(getBuilder(getAPIv2().path("user/" + testUserName("newTestName"))).buildGet(), UserUI.class); l(UserService.class).deleteUser(new UserName(testUserName("newTestName")).getName(), u.getUser().getVersion()); }
final UserService userService = l(UserService.class); User admin = SimpleUser.newBuilder().setUserName(testUserName("admin")).setEmail("admin@dremio.test").setFirstName("admin") .setLastName("dremio").build(); admin = userService.createUser(admin, testPassword("admin")); User user1 = SimpleUser.newBuilder().setUserName(testUserName("user1")).setEmail("user1@dremio.test").setFirstName("user1") .setLastName("user1").build(); user1 = userService.createUser(user1, testPassword("user1")); User user2 = SimpleUser.newBuilder().setUserName(testUserName("user2")).setEmail("user2@dremio.test").setFirstName("user2") .setLastName("user2").build(); user2 = SimpleUser.newBuilder(user2) .setEmail("user2_new@dremio.test") .setVersion(user.getUser().getVersion()) "_dremio" + adminLoginToken.getToken()).buildPost(Entity.json(new UserForm(SimpleUser.newBuilder().setUserName(testUserName("user2_new")).build()))), UserUI.class); assertEquals(user2.getEmail(), user.getUser().getEmail()); assertEquals(testUserName("user2_new"), user.getUserName().getName()); user2LoginToken = expectSuccess(getBuilder(getAPIv2().path("/login")).buildPost(Entity.json(user2Login)), UserLoginSession.class); user2 = SimpleUser.newBuilder(user2) .setVersion(user.getUser().getVersion()) .build();
User dt = SimpleUser.newBuilder().setUserName("user").setCreatedAt(System.currentTimeMillis()). setEmail("user@mail.com").setFirstName("User").setLastName("Anonymous").build(); dt = userService.createUser(dt, "user1234");
@Test public void testUser() throws Exception { getPopulator().populateTestUsers(); doc("getting user info"); UserUI u1 = expectSuccess(getBuilder(getAPIv2().path("user/" + SampleDataPopulator.DEFAULT_USER_NAME)).buildGet(), UserUI.class); assertEquals(SampleDataPopulator.DEFAULT_USER_NAME, u1.getUserName().getName()); assertEquals(SampleDataPopulator.DEFAULT_USER_NAME + "@dremio.test", u1.getUser().getEmail()); // TODO: Expected error is going to change after refactoring of DAC/dependent services into a common module. expectError(CLIENT_ERROR, getBuilder(getAPIv2().path("user/dac")).buildGet(), GenericErrorMessage.class); doc("Creating user"); final User userConfig2 = SimpleUser.newBuilder().setUserName(testUserName("test11")).setEmail("test11@dremio.test").setFirstName("test11") .setLastName("dremio").build(); expectSuccess(getBuilder(getAPIv2().path("user/" + testUserName("test11"))).buildPut(Entity.json(new UserForm(userConfig2, testPassword("test11")))), UserUI.class); UserUI u2 = expectSuccess(getBuilder(getAPIv2().path("user/" + testUserName("test11"))).buildGet(), UserUI.class); assertEquals(userConfig2.getEmail(), u2.getUser().getEmail()); assertEquals(userConfig2.getFirstName(), u2.getUser().getFirstName()); assertEquals(userConfig2.getLastName(), u2.getUser().getLastName()); doc("updating user"); User uc3 = SimpleUser.newBuilder(u2.getUser()).setEmail("test2@dremio.test").build(); expectSuccess(getBuilder(getAPIv2().path("user/" + testUserName("test11"))).buildPost(Entity.json(new UserForm(uc3))), UserUI.class); UserUI u3 = expectSuccess(getBuilder(getAPIv2().path("user/" + testUserName("test11"))).buildGet(), UserUI.class); assertEquals(u3.getUser().getEmail(), uc3.getEmail()); assertEquals(u3.getUser().getFirstName(), uc3.getFirstName()); assertEquals(u3.getUser().getLastName(), uc3.getLastName()); doc("deleting user"); expectSuccess(getBuilder(getAPIv2().path("user/" + testUserName("test11")).queryParam("version", u3.getUser().getVersion())).buildDelete()); // TODO: Expected error is going to change after refactoring of DAC/dependent services into a common module. expectError(CLIENT_ERROR, getBuilder(getAPIv2().path("user/" + testUserName("test11"))).buildGet(), GenericErrorMessage.class); }
doc("Creating user"); final UserService userService = l(UserService.class); User userConfig2 = SimpleUser.newBuilder().setUserName(testUserName("test12")).setEmail("test1@dremio.test").setFirstName("test12") .setLastName("dremio").build(); expectSuccess(getBuilder(getAPIv2().path("user/" + testUserName("test12"))).buildPut(Entity.json(new UserForm(userConfig2, testPassword("test12")))), UserUI.class); User userConfig1 = SimpleUser.newBuilder().setUserName(testUserName("test1")).setEmail("test1@dremio.test").setFirstName("test1") .setLastName("dremio").build(); userConfig1 = userService.createUser(userConfig1, testPassword("test1")); userConfig2 = SimpleUser.newBuilder().setUserName(testUserName("test2")).setEmail("test2@dremio.test").setFirstName("test2") .setLastName("dremio").build(); userConfig2 = userService.createUser(userConfig2, testPassword("test2")); User userConfig3 = SimpleUser.newBuilder().setUserName(testUserName("test3")).setEmail("test3@dremio.test").setFirstName("test3") .setLastName("dremio").build(); userConfig3 = userService.createUser(userConfig3, testPassword("test3"));