private BulkUpdateAdminsResult validateUsersAndRolesForBulkUpdate(List<String> usersToRemove, List<String> rolesToRemove, Set<Admin> existingAdmins) { Set<CaseInsensitiveString> existingAdminNames = existingAdmins.stream().map(Admin::getName).collect(Collectors.toSet()); Sets.SetView<CaseInsensitiveString> invalidUsersToRemove = Sets.difference(caseInsensitive(usersToRemove), existingAdminNames); Sets.SetView<CaseInsensitiveString> invalidRolesToRemove = Sets.difference(caseInsensitive(rolesToRemove), existingAdminNames); BulkUpdateAdminsResult result = new BulkUpdateAdminsResult(); if (invalidUsersToRemove.size() > 0) { result.setNonExistentUsers(invalidUsersToRemove); result.unprocessableEntity("Update failed because some users or roles do not exist under super admins."); } if (invalidRolesToRemove.size() > 0) { result.setNonExistentRoles(invalidRolesToRemove); result.unprocessableEntity("Update failed because some users or roles do not exist under super admins."); } return result; }
public void update(Username currentUser, AdminsConfig config, String md5, LocalizedOperationResult result) { updateConfig(currentUser, result, new AdminsConfigUpdateCommand(goConfigService, config, currentUser, result, entityHashingService, md5)); }
public String update(Request req, Response res) { AdminsConfig adminsConfigFromRequest = buildEntityFromRequestBody(req); AdminsConfig adminsConfigFromServer = adminsConfigService.systemAdmins(); if (isPutRequestStale(req, adminsConfigFromServer)) { throw haltBecauseEtagDoesNotMatch(); } HttpLocalizedOperationResult result = new HttpLocalizedOperationResult(); adminsConfigService.update(currentUsername(), adminsConfigFromRequest, etagFor(adminsConfigFromServer), result); return handleCreateOrUpdateResponse(req, res, adminsConfigFromRequest, result); }
public BulkUpdateAdminsResult bulkUpdate(Username currentUser, List<String> usersToAdd, List<String> usersToRemove, List<String> rolesToAdd, List<String> rolesToRemove, String md5) { Set<Admin> existingAdmins = new HashSet<>(systemAdmins()); BulkUpdateAdminsResult result = validateUsersAndRolesForBulkUpdate(usersToRemove, rolesToRemove, existingAdmins); if (!result.isSuccessful()) { return result; } usersToAdd.forEach(user -> existingAdmins.add(new AdminUser(user))); rolesToAdd.forEach(role -> existingAdmins.add(new AdminRole(role))); usersToRemove.forEach(user -> existingAdmins.remove(new AdminUser(new CaseInsensitiveString(user)))); rolesToRemove.forEach(role -> existingAdmins.remove(new AdminRole(new CaseInsensitiveString(role)))); AdminsConfigUpdateCommand command = new AdminsConfigUpdateCommand(goConfigService, new AdminsConfig(existingAdmins), currentUser, result, entityHashingService, md5); updateConfig(currentUser, result, command); result.setAdminsConfig(command.getEntity()); return result; }
public String bulkUpdate(Request request, Response response) throws IOException { JsonReader jsonReader = GsonTransformer.getInstance().jsonReaderFrom(request.body()); BulkUpdateRequest bulkUpdateRequest = BulkUpdateRequestRepresenter.fromJSON(jsonReader); BulkUpdateAdminsResult result = adminsConfigService.bulkUpdate(currentUsername(), bulkUpdateRequest.getUsersToAdd(), bulkUpdateRequest.getUsersToRemove(), bulkUpdateRequest.getRolesToAdd(), bulkUpdateRequest.getRolesToRemove(), etagFor(adminsConfigService.systemAdmins())); if (result.isSuccessful()) { return writerForTopLevelObject(request, response, jsonWriter(adminsConfigService.systemAdmins())); } else { response.status(result.httpCode()); return writerForTopLevelObject(request, response, outputWriter -> BulkUpdateFailureResultRepresenter.toJSON(outputWriter, result)); } }
public String show(Request req, Response res) throws IOException { AdminsConfig adminsConf = adminsConfigService.systemAdmins(); if (isGetOrHeadRequestFresh(req, adminsConf)) { return notModified(res); } else { setEtagHeader(adminsConf, res); return writerForTopLevelObject(req, res, jsonWriter(adminsConf)); } }
private void updateConfig(Username currentUser, LocalizedOperationResult result, EntityConfigUpdateCommand<AdminsConfig> command) { try { goConfigService.updateConfig(command, currentUser); } catch (Exception e) { if (e instanceof GoConfigInvalidException) { String adminsTag = AdminsConfig.class.getAnnotation(ConfigTag.class).value(); String errors = deDuplicatedErrors(((GoConfigInvalidException) e).getCruiseConfig().getAllErrors()); result.unprocessableEntity(LocalizedMessage.entityConfigValidationFailed(adminsTag, errors)); } else { if (!result.hasMessage()) { LOGGER.error(e.getMessage(), e); result.internalServerError(saveFailedWithReason("An error occurred while updating the System Admins. Please check the logs for more information.")); } } } }
public String update(Request req, Response res) { AdminsConfig adminsConfigFromRequest = buildEntityFromRequestBody(req); AdminsConfig adminsConfigFromServer = adminsConfigService.systemAdmins(); if (isPutRequestStale(req, adminsConfigFromServer)) { throw haltBecauseEtagDoesNotMatch(); } HttpLocalizedOperationResult result = new HttpLocalizedOperationResult(); adminsConfigService.update(currentUsername(), adminsConfigFromRequest, etagFor(adminsConfigFromServer), result); return handleCreateOrUpdateResponse(req, res, adminsConfigFromRequest, result); }
public String show(Request req, Response res) throws IOException { AdminsConfig adminsConf = adminsConfigService.systemAdmins(); if (isGetOrHeadRequestFresh(req, adminsConf)) { return notModified(res); } else { setEtagHeader(adminsConf, res); return writerForTopLevelObject(req, res, jsonWriter(adminsConf)); } }