Skip to content

Commit 79cbd1d

Browse files
gmjehovichelasticsearchmachineslobodanadamovic
authored
Make modifications to enable RestBulkPutRolesAction for Serverless (elastic#140247)
* Make modifications to enable RestBulkPutRolesAction for Serverless * Update docs/changelog/140247.yaml * Delete docs/changelog/140247.yaml * Close XContentParser, add role check * [CI] Auto commit changes from spotless * Add empty check to BulkPutRolesRequest.validate, make role required arg in requestBuilder * Update x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/action/role/BulkPutRolesRequest.java Co-authored-by: Slobodan Adamović <slobodanadamovic@users.noreply.github.com> --------- Co-authored-by: elasticsearchmachine <infra-root+elasticsearchmachine@elastic.co> Co-authored-by: Slobodan Adamović <slobodanadamovic@users.noreply.github.com>
1 parent 297c6bc commit 79cbd1d

File tree

4 files changed

+23
-12
lines changed

4 files changed

+23
-12
lines changed

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/action/role/BulkPutRoleRequestBuilder.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import java.io.IOException;
2323
import java.util.List;
2424

25-
import static org.elasticsearch.xcontent.ConstructingObjectParser.optionalConstructorArg;
25+
import static org.elasticsearch.xcontent.ConstructingObjectParser.constructorArg;
2626

2727
/**
2828
* Builder for requests to bulk add a roles to the security index
@@ -37,7 +37,7 @@ public class BulkPutRoleRequestBuilder extends ActionRequestBuilder<BulkPutRoles
3737
);
3838

3939
static {
40-
PARSER.declareNamedObjects(optionalConstructorArg(), (p, c, n) -> {
40+
PARSER.declareNamedObjects(constructorArg(), (p, c, n) -> {
4141
p.nextToken();
4242
return ROLE_DESCRIPTOR_PARSER.parse(n, p, false);
4343
}, new ParseField("roles"));
@@ -48,13 +48,16 @@ public BulkPutRoleRequestBuilder(ElasticsearchClient client) {
4848
}
4949

5050
public BulkPutRoleRequestBuilder content(BytesReference content, XContentType xContentType) throws IOException {
51-
XContentParser parser = XContentHelper.createParserNotCompressed(
52-
LoggingDeprecationHandler.XCONTENT_PARSER_CONFIG,
53-
content,
54-
xContentType
55-
);
56-
List<RoleDescriptor> roles = PARSER.parse(parser, null);
57-
request.setRoles(roles);
51+
try (
52+
XContentParser parser = XContentHelper.createParserNotCompressed(
53+
LoggingDeprecationHandler.XCONTENT_PARSER_CONFIG,
54+
content,
55+
xContentType
56+
)
57+
) {
58+
List<RoleDescriptor> roles = PARSER.parse(parser, null);
59+
request.setRoles(roles);
60+
}
5861
return this;
5962
}
6063

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/action/role/BulkPutRolesRequest.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import java.util.List;
1919
import java.util.Objects;
2020

21+
import static org.elasticsearch.action.ValidateActions.addValidationError;
22+
2123
public class BulkPutRolesRequest extends LegacyActionRequest {
2224

2325
private List<RoleDescriptor> roles;
@@ -34,8 +36,11 @@ public void setRoles(List<RoleDescriptor> roles) {
3436

3537
@Override
3638
public ActionRequestValidationException validate() {
37-
// Handle validation where put role is handled to produce partial success if validation fails
38-
return null;
39+
ActionRequestValidationException validationException = null;
40+
if (roles.isEmpty()) {
41+
validationException = addValidationError("roles cannot be empty", validationException);
42+
}
43+
return validationException;
3944
}
4045

4146
public List<RoleDescriptor> getRoles() {

x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/Security.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2562,7 +2562,7 @@ public void loadExtensions(ExtensionLoader loader) {
25622562
securityExtensions.addAll(loader.loadExtensions(SecurityExtension.class));
25632563
loadSingletonExtensionAndSetOnce(loader, operatorOnlyRegistry, OperatorOnlyRegistry.class);
25642564
loadSingletonExtensionAndSetOnce(loader, putRoleRequestBuilderFactory, PutRoleRequestBuilderFactory.class);
2565-
// TODO add bulkPutRoleRequestBuilderFactory loading here when available
2565+
loadSingletonExtensionAndSetOnce(loader, bulkPutRoleRequestBuilderFactory, BulkPutRoleRequestBuilderFactory.class);
25662566
loadSingletonExtensionAndSetOnce(loader, getBuiltinPrivilegesResponseTranslator, GetBuiltinPrivilegesResponseTranslator.class);
25672567
loadSingletonExtensionAndSetOnce(loader, updateApiKeyRequestTranslator, UpdateApiKeyRequestTranslator.class);
25682568
loadSingletonExtensionAndSetOnce(loader, bulkUpdateApiKeyRequestTranslator, BulkUpdateApiKeyRequestTranslator.class);

x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/rest/action/role/RestBulkPutRolesAction.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import org.elasticsearch.common.settings.Settings;
1212
import org.elasticsearch.license.XPackLicenseState;
1313
import org.elasticsearch.rest.RestRequest;
14+
import org.elasticsearch.rest.Scope;
15+
import org.elasticsearch.rest.ServerlessScope;
1416
import org.elasticsearch.rest.action.RestToXContentListener;
1517
import org.elasticsearch.xpack.core.security.action.role.BulkPutRoleRequestBuilder;
1618
import org.elasticsearch.xpack.core.security.action.role.BulkPutRoleRequestBuilderFactory;
@@ -23,6 +25,7 @@
2325
/**
2426
* Rest endpoint to bulk add a Roles to the security index
2527
*/
28+
@ServerlessScope(Scope.PUBLIC)
2629
public class RestBulkPutRolesAction extends NativeRoleBaseRestHandler {
2730

2831
private final BulkPutRoleRequestBuilderFactory builderFactory;

0 commit comments

Comments
 (0)