Skip to content

Commit

Permalink
Make the java tests work
Browse files Browse the repository at this point in the history
  • Loading branch information
fundthmcalculus committed Nov 5, 2021
1 parent 6c6f4c9 commit 5794a3d
Show file tree
Hide file tree
Showing 7 changed files with 156 additions and 131 deletions.
1 change: 1 addition & 0 deletions java/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ dependencies {
implementation 'io.grpc:grpc-netty-shaded:1.41.0'
implementation 'io.grpc:grpc-protobuf:1.41.0'
implementation 'io.grpc:grpc-stub:1.41.0'
implementation 'ky.korins:blake3_3:2.9.0'
compileOnly 'org.apache.tomcat:annotations-api:6.0.53' // necessary for Java 9+

implementation 'id.trinsic:okapi:1.0.0'
Expand Down
62 changes: 31 additions & 31 deletions java/src/main/java/ServiceBase.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
import com.google.protobuf.ByteString;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.Value;
import com.google.protobuf.util.JsonFormat;
import com.google.protobuf.Message;
import io.grpc.ManagedChannel;
import io.grpc.Metadata;
import trinsic.okapi.keys.v1.Keys;
import trinsic.okapi.proofs.v1.Proofs;
import ky.korins.blake3.Blake3;
import trinsic.okapi.security.v1.Security;
import trinsic.services.common.v1.CommonOuterClass;
import trinsic.services.universalwallet.v1.UniversalWallet;

import java.nio.charset.StandardCharsets;
import java.nio.ByteBuffer;
import java.time.Instant;
import java.util.Base64;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;

public abstract class ServiceBase {
protected String capInvocation = "";
protected UniversalWallet.WalletProfile profile;

public abstract void shutdown() throws InterruptedException;

Expand All @@ -25,34 +25,34 @@ protected void shutdown(ManagedChannel channel) throws InterruptedException {
channel.awaitTermination(5, TimeUnit.SECONDS);
}

public Metadata getMetadata() {
if (capInvocation == null || capInvocation.strip().length() == 0)
throw new IllegalArgumentException("Profile not set");
public Metadata getMetadata(Message message) throws InvalidProtocolBufferException, DidException {
if (this.profile == null)
throw new RuntimeException("Profile not set");

var messageBytes = message.toByteArray();
var hashArray = ByteBuffer.allocate(messageBytes.length);
Blake3.newHasher().update(messageBytes).done(hashArray);

var nonce = CommonOuterClass.Nonce.newBuilder()
.setTimestamp(Instant.now().getEpochSecond())
.setRequestHash(ByteString.copyFrom(hashArray)).build();
var proof = Oberon.createProof(Security.CreateOberonProofRequest.newBuilder()
.setToken(this.profile.getAuthToken())
.setData(this.profile.getAuthData())
.setNonce(nonce.toByteString()).build());

var oberonBuilder = "Oberon " +
"proof=" + Base64.getUrlEncoder().encodeToString(proof.toByteArray()) +
"data=" + Base64.getUrlEncoder().encodeToString(this.profile.getAuthData().toByteArray()) +
"nonce=" + Base64.getUrlEncoder().encodeToString(nonce.toByteArray());

var metadata = new Metadata();
metadata.put(Metadata.Key.of("capability-invocation", Metadata.ASCII_STRING_MARSHALLER), capInvocation);
return metadata;
metadata.put(Metadata.Key.of("Authorization", Metadata.ASCII_STRING_MARSHALLER), oberonBuilder);
return metadata;
}

public void setProfile(UniversalWallet.WalletProfile profile) throws InvalidProtocolBufferException, DidException {
var proofDict = new HashMap<String, Value>() {{
put("proofPurpose", Utilities.stringValue("capabilityInvocation"));
put("created", Utilities.stringValue(Instant.now().toString()));
put("capability", Utilities.stringValue(profile.getCapability()));
}};

var capabilityDict = new HashMap<String, com.google.protobuf.Value>() {{
put("@context", Utilities.stringValue("https://w3id.org/security/v2"));
put("invocationTarget", Utilities.stringValue(profile.getWalletId()));
put("proof", Utilities.structValue(proofDict));
}};

var proofResponse = LdProofs.createProof( Proofs.CreateProofRequest.newBuilder()
.setKey(Keys.JsonWebKey.parseFrom(profile.getInvokerJwk()))
.setDocument(Utilities.hashmapToStruct(capabilityDict))
.setSuite(Proofs.LdSuite.LD_SUITE_JCSED25519SIGNATURE2020)
.build());
var format = JsonFormat.printer().print(proofResponse.getSignedDocument());
this.capInvocation = new String( Base64.getEncoder().encode(format.getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8);
this.profile = profile;
}

}
Expand Down
11 changes: 7 additions & 4 deletions java/src/main/java/TrinsicProviderService.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.Message;
import io.grpc.Channel;
import io.grpc.ManagedChannel;
import io.grpc.stub.MetadataUtils;
import io.grpc.stub.StreamObserver;
import trinsic.services.common.v1.CommonOuterClass;
import trinsic.services.common.v1.ProviderGrpc;
import trinsic.services.common.v1.ProviderOuterClass;

Expand All @@ -11,8 +14,8 @@ public class TrinsicProviderService extends ServiceBase {
public Channel channel;
public ProviderGrpc.ProviderStub providerClient;

public TrinsicProviderService(String serviceAddress) throws MalformedURLException {
this.channel = Utilities.getChannel(serviceAddress);
public TrinsicProviderService(CommonOuterClass.ServerConfig config) throws MalformedURLException {
this.channel = Utilities.getChannel(config);
this.providerClient = ProviderGrpc.newStub(this.channel);
}

Expand All @@ -34,8 +37,8 @@ public void invitationStatus(ProviderOuterClass.InvitationStatusRequest request,

this.providerClient.invitationStatus(request, observer);
}
private ProviderGrpc.ProviderStub getProviderClient() {
private ProviderGrpc.ProviderStub getProviderClient(Message message) throws InvalidProtocolBufferException, DidException {
return this.providerClient.withInterceptors(
MetadataUtils.newAttachHeadersInterceptor(this.getMetadata()));
MetadataUtils.newAttachHeadersInterceptor(this.getMetadata(message)));
}
}
61 changes: 35 additions & 26 deletions java/src/main/java/TrinsicTrustRegistryService.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.Message;
import io.grpc.Channel;
import io.grpc.ManagedChannel;
import io.grpc.stub.MetadataUtils;
import io.grpc.stub.StreamObserver;
import trinsic.services.common.v1.CommonOuterClass;
import trinsic.services.trustregistry.v1.TrustRegistryGrpc;
import trinsic.services.trustregistry.v1.TrustRegistryOuterClass;

import java.net.MalformedURLException;
import java.time.Instant;

public class TrinsicTrustRegistryService extends ServiceBase {
public Channel channel;
public TrustRegistryGrpc.TrustRegistryStub trustRegistryClient;

public TrinsicTrustRegistryService(String url) throws MalformedURLException {
this.channel = Utilities.getChannel(url);
public TrinsicTrustRegistryService(CommonOuterClass.ServerConfig config) {
this.channel = Utilities.getChannel(config);
this.trustRegistryClient = TrustRegistryGrpc.newStub(this.channel);
}

Expand All @@ -27,79 +29,86 @@ public void registerGovernanceFramework(String governanceFramework, String descr
}

public void registerIssuer(String issuerDid, String credentialType, String governanceFramework, Instant validFrom, Instant validUntil,
StreamObserver<TrustRegistryOuterClass.RegisterIssuerResponse> observer) {
StreamObserver<TrustRegistryOuterClass.RegisterIssuerResponse> observer) throws InvalidProtocolBufferException, DidException {
if (validFrom == null) validFrom = Instant.EPOCH;
if (validUntil == null) validUntil = Instant.EPOCH;

getTrustRegistryClient().registerIssuer(TrustRegistryOuterClass.RegisterIssuerRequest.newBuilder()
final var request = TrustRegistryOuterClass.RegisterIssuerRequest.newBuilder()
.setDidUri(issuerDid)
.setCredentialTypeUri(credentialType)
.setGovernanceFrameworkUri(governanceFramework)
.setValidFromUtc(validFrom.getEpochSecond())
.setValidUntilUtc(validUntil.getEpochSecond()).build(), observer);
.setValidUntilUtc(validUntil.getEpochSecond()).build();
getTrustRegistryClient(request).registerIssuer(request, observer);
}

public void unregisterIssuer(String issuerDid, String credentialType, String governanceFramework, Instant validFrom, Instant validUntil,
StreamObserver<TrustRegistryOuterClass.UnregisterIssuerResponse> observer) {
StreamObserver<TrustRegistryOuterClass.UnregisterIssuerResponse> observer) throws InvalidProtocolBufferException, DidException {
if (validFrom == null) validFrom = Instant.EPOCH;
if (validUntil == null) validUntil = Instant.EPOCH;

getTrustRegistryClient().unregisterIssuer(TrustRegistryOuterClass.UnregisterIssuerRequest.newBuilder()
final var request = TrustRegistryOuterClass.UnregisterIssuerRequest.newBuilder()
.setDidUri(issuerDid)
.setCredentialTypeUri(credentialType)
.setGovernanceFrameworkUri(governanceFramework).build(), observer);
.setGovernanceFrameworkUri(governanceFramework).build();
getTrustRegistryClient(request).unregisterIssuer(request, observer);
}

public void registerVerifier(String verifierDid, String presentationType, String governanceFramework, Instant validFrom, Instant validUntil,
StreamObserver<TrustRegistryOuterClass.RegisterVerifierResponse> observer) {
StreamObserver<TrustRegistryOuterClass.RegisterVerifierResponse> observer) throws InvalidProtocolBufferException, DidException {
if (validFrom == null) validFrom = Instant.EPOCH;
if (validUntil == null) validUntil = Instant.EPOCH;

getTrustRegistryClient().registerVerifier(TrustRegistryOuterClass.RegisterVerifierRequest.newBuilder()
final TrustRegistryOuterClass.RegisterVerifierRequest request = TrustRegistryOuterClass.RegisterVerifierRequest.newBuilder()
.setDidUri(verifierDid)
.setPresentationTypeUri(presentationType)
.setGovernanceFrameworkUri(governanceFramework)
.setValidFromUtc(validFrom.getEpochSecond())
.setValidUntilUtc(validUntil.getEpochSecond()).build(), observer);
.setValidUntilUtc(validUntil.getEpochSecond()).build();
getTrustRegistryClient(request).registerVerifier(request, observer);
}

public void unregisterVerifier(String verifierDid, String presentationType, String governanceFramework,
Instant validFrom, Instant validUntil, StreamObserver<TrustRegistryOuterClass.UnregisterVerifierResponse> observer) {
Instant validFrom, Instant validUntil, StreamObserver<TrustRegistryOuterClass.UnregisterVerifierResponse> observer) throws InvalidProtocolBufferException, DidException {
if (validFrom == null) validFrom = Instant.EPOCH;
if (validUntil == null) validUntil = Instant.EPOCH;

getTrustRegistryClient().unregisterVerifier(TrustRegistryOuterClass.UnregisterVerifierRequest.newBuilder()
final TrustRegistryOuterClass.UnregisterVerifierRequest request = TrustRegistryOuterClass.UnregisterVerifierRequest.newBuilder()
.setDidUri(verifierDid)
.setPresentationTypeUri(presentationType)
.setGovernanceFrameworkUri(governanceFramework)
.build(), observer);
.build();
getTrustRegistryClient(request).unregisterVerifier(request, observer);
}

public void checkIssuerStatus(String issuerDid, String credentialType, String governanceFramework,
StreamObserver<TrustRegistryOuterClass.CheckIssuerStatusResponse> observer) {
getTrustRegistryClient().checkIssuerStatus(TrustRegistryOuterClass.CheckIssuerStatusRequest.newBuilder()
StreamObserver<TrustRegistryOuterClass.CheckIssuerStatusResponse> observer) throws InvalidProtocolBufferException, DidException {
final TrustRegistryOuterClass.CheckIssuerStatusRequest request = TrustRegistryOuterClass.CheckIssuerStatusRequest.newBuilder()
.setDidUri(issuerDid)
.setCredentialTypeUri(credentialType)
.setGovernanceFrameworkUri(governanceFramework).build(), observer);
.setGovernanceFrameworkUri(governanceFramework).build();
getTrustRegistryClient(request).checkIssuerStatus(request, observer);
}

public void checkVerifierStatus(String verifierDid, String presentationType, String governanceFramework,
StreamObserver<TrustRegistryOuterClass.CheckVerifierStatusResponse> observer) {
getTrustRegistryClient().checkVerifierStatus(TrustRegistryOuterClass.CheckVerifierStatusRequest.newBuilder()
StreamObserver<TrustRegistryOuterClass.CheckVerifierStatusResponse> observer) throws InvalidProtocolBufferException, DidException {
final TrustRegistryOuterClass.CheckVerifierStatusRequest request = TrustRegistryOuterClass.CheckVerifierStatusRequest.newBuilder()
.setDidUri(verifierDid)
.setPresentationTypeUri(presentationType)
.setGovernanceFrameworkUri(governanceFramework).build(), observer);
.setGovernanceFrameworkUri(governanceFramework).build();
getTrustRegistryClient(request).checkVerifierStatus(request, observer);
}

public void searchRegistry(String query, StreamObserver<TrustRegistryOuterClass.SearchRegistryResponse> observer) {
public void searchRegistry(String query, StreamObserver<TrustRegistryOuterClass.SearchRegistryResponse> observer) throws InvalidProtocolBufferException, DidException {
if (query == null)
query = "SELECT * FROM c";
getTrustRegistryClient().searchRegistry(TrustRegistryOuterClass.SearchRegistryRequest.newBuilder()
.setQuery(query).build(), observer);
final TrustRegistryOuterClass.SearchRegistryRequest request = TrustRegistryOuterClass.SearchRegistryRequest.newBuilder()
.setQuery(query).build();
getTrustRegistryClient(request).searchRegistry(request, observer);
}

private TrustRegistryGrpc.TrustRegistryStub getTrustRegistryClient() {
private TrustRegistryGrpc.TrustRegistryStub getTrustRegistryClient(Message message) throws InvalidProtocolBufferException, DidException {
return this.trustRegistryClient.withInterceptors(
MetadataUtils.newAttachHeadersInterceptor(this.getMetadata()));
MetadataUtils.newAttachHeadersInterceptor(this.getMetadata(message)));
}
}
Loading

0 comments on commit 5794a3d

Please sign in to comment.