Skip to content

Commit 7af055d

Browse files
committed
Add integration testing for CrossCluster API Key certificate_identity field
1 parent a160a49 commit 7af055d

File tree

25 files changed

+473
-54
lines changed

25 files changed

+473
-54
lines changed

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/action/apikey/ApiKey.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,8 @@ public String toString() {
435435
+ roleDescriptors
436436
+ ", limited_by="
437437
+ limitedBy
438+
+ ", certificate_identity"
439+
+ certificateIdentity
438440
+ "]";
439441
}
440442

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/action/apikey/BaseBulkUpdateApiKeyRequest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,12 @@ public boolean equals(Object o) {
5555
return Objects.equals(getIds(), that.getIds())
5656
&& Objects.equals(metadata, that.metadata)
5757
&& Objects.equals(expiration, that.expiration)
58-
&& Objects.equals(roleDescriptors, that.roleDescriptors);
58+
&& Objects.equals(roleDescriptors, that.roleDescriptors)
59+
&& Objects.equals(certificateIdentity, that.certificateIdentity);
5960
}
6061

6162
@Override
6263
public int hashCode() {
63-
return Objects.hash(getIds(), expiration, metadata, roleDescriptors);
64+
return Objects.hash(getIds(), expiration, metadata, roleDescriptors, certificateIdentity);
6465
}
6566
}

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/action/apikey/BulkUpdateApiKeyRequest.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,27 @@
1818
public final class BulkUpdateApiKeyRequest extends BaseBulkUpdateApiKeyRequest {
1919

2020
public static BulkUpdateApiKeyRequest usingApiKeyIds(String... ids) {
21-
return new BulkUpdateApiKeyRequest(Arrays.stream(ids).toList(), null, null, null);
21+
return new BulkUpdateApiKeyRequest(Arrays.stream(ids).toList(), null, null, null, null);
2222
}
2323

2424
public static BulkUpdateApiKeyRequest wrap(final UpdateApiKeyRequest request) {
2525
return new BulkUpdateApiKeyRequest(
2626
List.of(request.getId()),
2727
request.getRoleDescriptors(),
2828
request.getMetadata(),
29-
request.getExpiration()
29+
request.getExpiration(),
30+
null
3031
);
3132
}
3233

3334
public BulkUpdateApiKeyRequest(
3435
final List<String> ids,
3536
@Nullable final List<RoleDescriptor> roleDescriptors,
3637
@Nullable final Map<String, Object> metadata,
37-
@Nullable final TimeValue expiration
38+
@Nullable final TimeValue expiration,
39+
@Nullable final String certificateIdentity
3840
) {
39-
super(ids, roleDescriptors, metadata, expiration);
41+
super(ids, roleDescriptors, metadata, expiration, null);
4042
}
4143

4244
@Override

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/action/apikey/BulkUpdateApiKeyRequestTranslator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ protected static ConstructingObjectParser<BulkUpdateApiKeyRequest, Void> createP
4141
(List<String>) a[0],
4242
(List<RoleDescriptor>) a[1],
4343
(Map<String, Object>) a[2],
44-
TimeValue.parseTimeValue((String) a[3], null, "expiration")
44+
TimeValue.parseTimeValue((String) a[3], null, "expiration"),
45+
null
4546
)
4647
);
4748
parser.declareStringArray(constructorArg(), new ParseField("ids"));

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/action/apikey/UpdateApiKeyRequest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616

1717
public final class UpdateApiKeyRequest extends BaseSingleUpdateApiKeyRequest {
1818
public static UpdateApiKeyRequest usingApiKeyId(final String id) {
19-
return new UpdateApiKeyRequest(id, null, null, null);
19+
return new UpdateApiKeyRequest(id, null, null, null, null);
2020
}
2121

2222
public UpdateApiKeyRequest(
2323
final String id,
2424
@Nullable final List<RoleDescriptor> roleDescriptors,
2525
@Nullable final Map<String, Object> metadata,
26-
@Nullable final TimeValue expiration
26+
@Nullable final TimeValue expiration,
27+
@Nullable final String certificateIdentity
2728
) {
2829
super(roleDescriptors, metadata, expiration, id, certificateIdentity);
2930
}

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/action/apikey/UpdateApiKeyRequestTranslator.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ protected static ConstructingObjectParser<Payload, Void> createParser(
3737
a -> new Payload(
3838
(List<RoleDescriptor>) a[0],
3939
(Map<String, Object>) a[1],
40-
TimeValue.parseTimeValue((String) a[2], null, "expiration")
40+
TimeValue.parseTimeValue((String) a[2], null, "expiration"),
41+
(String) a[3]
4142
)
4243
);
4344
parser.declareNamedObjects(optionalConstructorArg(), (p, c, n) -> {
@@ -46,6 +47,7 @@ protected static ConstructingObjectParser<Payload, Void> createParser(
4647
}, new ParseField("role_descriptors"));
4748
parser.declareObject(optionalConstructorArg(), (p, c) -> p.map(), new ParseField("metadata"));
4849
parser.declareString(optionalConstructorArg(), new ParseField("expiration"));
50+
parser.declareString(optionalConstructorArg(), new ParseField("certificate_identity"));
4951
return parser;
5052
}
5153

@@ -59,9 +61,20 @@ public UpdateApiKeyRequest translate(RestRequest request) throws IOException {
5961
return UpdateApiKeyRequest.usingApiKeyId(apiKeyId);
6062
}
6163
final Payload payload = PARSER.parse(request.contentParser(), null);
62-
return new UpdateApiKeyRequest(apiKeyId, payload.roleDescriptors, payload.metadata, payload.expiration);
64+
return new UpdateApiKeyRequest(
65+
apiKeyId,
66+
payload.roleDescriptors,
67+
payload.metadata,
68+
payload.expiration,
69+
payload.certificateIdentity
70+
);
6371
}
6472

65-
protected record Payload(List<RoleDescriptor> roleDescriptors, Map<String, Object> metadata, TimeValue expiration) {}
73+
protected record Payload(
74+
List<RoleDescriptor> roleDescriptors,
75+
Map<String, Object> metadata,
76+
TimeValue expiration,
77+
String certificateIdentity
78+
) {}
6679
}
6780
}

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/action/apikey/UpdateCrossClusterApiKeyRequest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ public ApiKey.Type getType() {
3636
@Override
3737
public ActionRequestValidationException validate() {
3838
ActionRequestValidationException validationException = super.validate();
39-
if (roleDescriptors == null && metadata == null) {
39+
if (roleDescriptors == null && metadata == null && certificateIdentity == null) {
4040
validationException = addValidationError(
41-
"must update either [access] or [metadata] for cross-cluster API keys",
41+
"must update [access] or [metadata] or [certificate_identity] for cross-cluster API keys",
4242
validationException
4343
);
4444
}

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/security/action/apikey/BulkUpdateApiKeyRequestTests.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public void testNullValuesValidForNonIds() {
2626
}
2727

2828
public void testEmptyIdsNotValid() {
29-
final var request = new BulkUpdateApiKeyRequest(List.of(), null, null, null);
29+
final var request = new BulkUpdateApiKeyRequest(List.of(), null, null, null, null);
3030
final ActionRequestValidationException ve = request.validate();
3131
assertNotNull(ve);
3232
assertThat(ve.validationErrors().size(), equalTo(1));
@@ -41,7 +41,8 @@ public void testMetadataKeyValidation() {
4141
randomList(1, 5, () -> randomAlphaOfLength(10)),
4242
null,
4343
Map.of(reservedKey, metadataValue),
44-
expiration
44+
expiration,
45+
null
4546
);
4647
final ActionRequestValidationException ve = request.validate();
4748
assertNotNull(ve);
@@ -76,6 +77,7 @@ public void testRoleDescriptorValidation() {
7677
)
7778
),
7879
null,
80+
null,
7981
null
8082
);
8183
final ActionRequestValidationException ve = request.validate();

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/security/action/apikey/UpdateApiKeyRequestTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@
2323
public class UpdateApiKeyRequestTests extends ESTestCase {
2424

2525
public void testNullValuesValidForNonIds() {
26-
final var request = new UpdateApiKeyRequest("id", null, null, null);
26+
final var request = new UpdateApiKeyRequest("id", null, null, null, null);
2727
assertNull(request.validate());
2828
}
2929

3030
public void testMetadataKeyValidation() {
3131
final var reservedKey = "_" + randomAlphaOfLengthBetween(0, 10);
3232
final var metadataValue = randomAlphaOfLengthBetween(1, 10);
3333

34-
UpdateApiKeyRequest request = new UpdateApiKeyRequest(randomAlphaOfLength(10), null, Map.of(reservedKey, metadataValue), null);
34+
UpdateApiKeyRequest request = new UpdateApiKeyRequest(randomAlphaOfLength(10), null, Map.of(reservedKey, metadataValue), null, null);
3535
final ActionRequestValidationException ve = request.validate();
3636
assertNotNull(ve);
3737
assertThat(ve.validationErrors().size(), equalTo(1));
@@ -68,6 +68,7 @@ public void testRoleDescriptorValidation() {
6868
)
6969
),
7070
null,
71+
null,
7172
null
7273
);
7374
final ActionRequestValidationException ve1 = request1.validate();

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/security/action/apikey/UpdateCrossClusterApiKeyRequestTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
public class UpdateCrossClusterApiKeyRequestTests extends ESTestCase {
1919

2020
public void testNotEmptyUpdateValidation() {
21-
final var request = new UpdateCrossClusterApiKeyRequest(randomAlphaOfLength(10), null, null, null);
21+
final var request = new UpdateCrossClusterApiKeyRequest(randomAlphaOfLength(10), null, null, null, null);
2222
final ActionRequestValidationException ve = request.validate();
2323
assertThat(ve, notNullValue());
2424
assertThat(ve.validationErrors(), contains("must update either [access] or [metadata] for cross-cluster API keys"));
@@ -27,7 +27,7 @@ public void testNotEmptyUpdateValidation() {
2727
public void testMetadataKeyValidation() {
2828
final var reservedKey = "_" + randomAlphaOfLengthBetween(0, 10);
2929
final var metadataValue = randomAlphaOfLengthBetween(1, 10);
30-
final var request = new UpdateCrossClusterApiKeyRequest(randomAlphaOfLength(10), null, Map.of(reservedKey, metadataValue), null);
30+
final var request = new UpdateCrossClusterApiKeyRequest(randomAlphaOfLength(10), null, Map.of(reservedKey, metadataValue), null, null);
3131
final ActionRequestValidationException ve = request.validate();
3232
assertThat(ve, notNullValue());
3333
assertThat(ve.validationErrors(), contains("API key metadata keys may not start with [_]"));

0 commit comments

Comments
 (0)