Skip to content

Commit 7b296cf

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 b11bde9 commit 7b296cf

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
@@ -39,6 +39,7 @@
3939
import io.a2a.spec.Message;
4040
import io.a2a.spec.MessageSendConfiguration;
4141
import io.a2a.spec.MessageSendParams;
42+
import io.a2a.spec.MutualTLSSecurityScheme;
4243
import io.a2a.spec.OAuth2SecurityScheme;
4344
import io.a2a.spec.OAuthFlows;
4445
import io.a2a.spec.OpenIdConnectSecurityScheme;
@@ -378,6 +379,17 @@ private static io.a2a.grpc.AgentSkill agentSkill(AgentSkill agentSkill) {
378379
if (agentSkill.outputModes() != null) {
379380
builder.addAllOutputModes(agentSkill.outputModes());
380381
}
382+
if (agentSkill.security() != null) {
383+
builder.addAllSecurity(agentSkill.security().stream().map(s -> {
384+
io.a2a.grpc.Security.Builder securityBuilder = io.a2a.grpc.Security.newBuilder();
385+
s.forEach((key, value) -> {
386+
io.a2a.grpc.StringList.Builder stringListBuilder = io.a2a.grpc.StringList.newBuilder();
387+
stringListBuilder.addAllList(value);
388+
securityBuilder.putSchemes(key, stringListBuilder.build());
389+
});
390+
return securityBuilder.build();
391+
}).collect(Collectors.toList()));
392+
}
381393
return builder.build();
382394
}
383395

@@ -401,6 +413,8 @@ private static io.a2a.grpc.SecurityScheme securityScheme(SecurityScheme security
401413
builder.setOauth2SecurityScheme(oauthSecurityScheme((OAuth2SecurityScheme) securityScheme));
402414
} else if (securityScheme instanceof OpenIdConnectSecurityScheme) {
403415
builder.setOpenIdConnectSecurityScheme(openIdConnectSecurityScheme((OpenIdConnectSecurityScheme) securityScheme));
416+
} else if (securityScheme instanceof MutualTLSSecurityScheme) {
417+
builder.setMtlsSecurityScheme(mutualTlsSecurityScheme((MutualTLSSecurityScheme) securityScheme));
404418
}
405419
return builder.build();
406420
}
@@ -441,6 +455,9 @@ private static io.a2a.grpc.OAuth2SecurityScheme oauthSecurityScheme(OAuth2Securi
441455
if (oauth2SecurityScheme.getFlows() != null) {
442456
builder.setFlows(oauthFlows(oauth2SecurityScheme.getFlows()));
443457
}
458+
if (oauth2SecurityScheme.getOauth2MetadataUrl() != null) {
459+
builder.setOauth2MetadataUrl(oauth2SecurityScheme.getOauth2MetadataUrl());
460+
}
444461
return builder.build();
445462
}
446463

@@ -531,6 +548,14 @@ private static io.a2a.grpc.OpenIdConnectSecurityScheme openIdConnectSecuritySche
531548
return builder.build();
532549
}
533550

551+
private static io.a2a.grpc.MutualTlsSecurityScheme mutualTlsSecurityScheme(MutualTLSSecurityScheme mutualTlsSecurityScheme) {
552+
io.a2a.grpc.MutualTlsSecurityScheme.Builder builder = io.a2a.grpc.MutualTlsSecurityScheme.newBuilder();
553+
if (mutualTlsSecurityScheme.getDescription() != null) {
554+
builder.setDescription(mutualTlsSecurityScheme.getDescription());
555+
}
556+
return builder.build();
557+
}
558+
534559
private static io.a2a.grpc.AgentInterface agentInterface(AgentInterface agentInterface) {
535560
io.a2a.grpc.AgentInterface.Builder builder = io.a2a.grpc.AgentInterface.newBuilder();
536561
if (agentInterface.transport() != null) {

0 commit comments

Comments
 (0)