@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);
}