throw new BadRequestException("Missing request body.");
}
checkPermission(USERS_EDIT, username);
CreateRequest cr = getCreateRequest(body);
final User user = userService.load(username);
if (user == null) {
return status(NOT_FOUND).build();
}
if (user.isReadOnly()) {
throw new BadRequestException("Cannot modify readonly user " + username);
}
// we only allow setting a subset of the fields in CreateStreamRuleRequest
if (cr.email != null) {
user.setEmail(cr.email);
}
if (cr.fullname != null) {
user.setFullName(cr.fullname);
}
final boolean permitted = isPermitted(USERS_PERMISSIONSEDIT, user.getName());
if (permitted && cr.permissions != null) {
user.setPermissions(cr.permissions);
}
if (cr.timezone == null) {
user.setTimeZone((String)null);
} else {
try {
if (cr.timezone.isEmpty()) {
user.setTimeZone((String)null);
} else {
final DateTimeZone tz = DateTimeZone.forID(cr.timezone);
user.setTimeZone(tz);
}
} catch (IllegalArgumentException e) {
LOG.error("Invalid timezone '{}', ignoring it for user {}.", cr.timezone, username);
}
}
if (cr.startpage != null) {
user.setStartpage(cr.startpage.type, cr.startpage.id);
}
if (isPermitted("*")) {
if (cr.session_timeout_ms != null && cr.session_timeout_ms != 0) {
user.setSessionTimeoutMs(cr.session_timeout_ms);
}
}
try {
// TODO JPA this is wrong, the primary key is the username
userService.save(user);