Skip to content

Commit d45218c

Browse files
committed
feat: Add mTLS to SecuritySchemes, add oauth2 metadata url field, allow Skills to specify Security for gRPC as per v0.3.0
1 parent 05bd9d7 commit d45218c

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

spec-grpc/src/main/java/io/a2a/grpc/utils/ProtoUtils.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import io.a2a.spec.Message;
4141
import io.a2a.spec.MessageSendConfiguration;
4242
import io.a2a.spec.MessageSendParams;
43+
import io.a2a.spec.MutualTLSSecurityScheme;
4344
import io.a2a.spec.OAuth2SecurityScheme;
4445
import io.a2a.spec.OAuthFlows;
4546
import io.a2a.spec.OpenIdConnectSecurityScheme;
@@ -399,6 +400,17 @@ private static io.a2a.grpc.AgentSkill agentSkill(AgentSkill agentSkill) {
399400
if (agentSkill.outputModes() != null) {
400401
builder.addAllOutputModes(agentSkill.outputModes());
401402
}
403+
if (agentSkill.security() != null) {
404+
builder.addAllSecurity(agentSkill.security().stream().map(s -> {
405+
io.a2a.grpc.Security.Builder securityBuilder = io.a2a.grpc.Security.newBuilder();
406+
s.forEach((key, value) -> {
407+
io.a2a.grpc.StringList.Builder stringListBuilder = io.a2a.grpc.StringList.newBuilder();
408+
stringListBuilder.addAllList(value);
409+
securityBuilder.putSchemes(key, stringListBuilder.build());
410+
});
411+
return securityBuilder.build();
412+
}).collect(Collectors.toList()));
413+
}
402414
return builder.build();
403415
}
404416

@@ -422,6 +434,8 @@ private static io.a2a.grpc.SecurityScheme securityScheme(SecurityScheme security
422434
builder.setOauth2SecurityScheme(oauthSecurityScheme((OAuth2SecurityScheme) securityScheme));
423435
} else if (securityScheme instanceof OpenIdConnectSecurityScheme) {
424436
builder.setOpenIdConnectSecurityScheme(openIdConnectSecurityScheme((OpenIdConnectSecurityScheme) securityScheme));
437+
} else if (securityScheme instanceof MutualTLSSecurityScheme) {
438+
builder.setMtlsSecurityScheme(mutualTlsSecurityScheme((MutualTLSSecurityScheme) securityScheme));
425439
}
426440
return builder.build();
427441
}
@@ -462,6 +476,9 @@ private static io.a2a.grpc.OAuth2SecurityScheme oauthSecurityScheme(OAuth2Securi
462476
if (oauth2SecurityScheme.getFlows() != null) {
463477
builder.setFlows(oauthFlows(oauth2SecurityScheme.getFlows()));
464478
}
479+
if (oauth2SecurityScheme.getOauth2MetadataUrl() != null) {
480+
builder.setOauth2MetadataUrl(oauth2SecurityScheme.getOauth2MetadataUrl());
481+
}
465482
return builder.build();
466483
}
467484

@@ -552,6 +569,14 @@ private static io.a2a.grpc.OpenIdConnectSecurityScheme openIdConnectSecuritySche
552569
return builder.build();
553570
}
554571

572+
private static io.a2a.grpc.MutualTlsSecurityScheme mutualTlsSecurityScheme(MutualTLSSecurityScheme mutualTlsSecurityScheme) {
573+
io.a2a.grpc.MutualTlsSecurityScheme.Builder builder = io.a2a.grpc.MutualTlsSecurityScheme.newBuilder();
574+
if (mutualTlsSecurityScheme.getDescription() != null) {
575+
builder.setDescription(mutualTlsSecurityScheme.getDescription());
576+
}
577+
return builder.build();
578+
}
579+
555580
private static io.a2a.grpc.AgentInterface agentInterface(AgentInterface agentInterface) {
556581
io.a2a.grpc.AgentInterface.Builder builder = io.a2a.grpc.AgentInterface.newBuilder();
557582
if (agentInterface.transport() != null) {

0 commit comments

Comments
 (0)