package com.google.startupos.common.grpc_auth; import com.google.common.flogger.FluentLogger; import com.google.startupos.common.flags.Flag; import com.google.startupos.common.flags.FlagDesc; import com.google.startupos.common.flags.Flags; import io.grpc.ManagedChannel; import io.grpc.netty.GrpcSslContexts; import io.netty.handler.ssl.SslContext; import io.grpc.netty.NettyChannelBuilder; import java.io.File; import java.util.logging.Level; public class Client { private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final Integer GRPC_PORT = 9999; @FlagDesc( name = "certificate_file", description = "SSL certificate in PEM format", required = true) public static final Flag<String> certificateFile = Flag.create(""); @FlagDesc(name = "token", description = "Firebase ID token to authenticate", required = true) public static final Flag<String> token = Flag.create(""); @FlagDesc(name = "n", description = "Argument for gRPC call", required = true) public static final Flag<Integer> n = Flag.create(-1); public static void main(String[] args) throws Exception { Flags.parseCurrentPackage(args); SslContext sslContext = GrpcSslContexts.forClient().trustManager(new File(certificateFile.get())).build(); ManagedChannel channel = NettyChannelBuilder.forAddress("localhost", GRPC_PORT).sslContext(sslContext).build(); GrpcAuthTestGrpc.GrpcAuthTestBlockingStub stub = GrpcAuthTestGrpc.newBlockingStub(channel) .withInterceptors(new ClientAuthInterceptor(token.get())); logger.at(Level.INFO).log("Calling server to increment %d", n.get()); Protos.Response resp = stub.getNextNumber(Protos.Request.newBuilder().setNumber(n.get()).build()); logger.at(Level.INFO).log("Got %d in response", resp.getNumber()); } }