From 1167f3517a48b40e882d480dc9378a8c15e603a5 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Fri, 19 Mar 2021 12:56:24 +0100
Subject: [PATCH] Add ssl and rest to grpc

---
 pom.xml                                       |  8 ++++++
 .../java/org/caosdb/server/CaosDBServer.java  |  2 +-
 .../org/caosdb/server/grpc/GRPCServer.java    | 27 ++++++++++++++++---
 3 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/pom.xml b/pom.xml
index 0e01855b..2f4b8191 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,6 +33,7 @@
     <project.build.testSourceDirectory>src/test/java</project.build.testSourceDirectory>
     <protobuf.version>3.14.0</protobuf.version>
     <grpc.version>1.35.0</grpc.version>
+    <netty-tcnative.version>2.0.34.Final</netty-tcnative.version>
   </properties>
   <repositories>
     <repository>
@@ -184,6 +185,13 @@
       <artifactId>grpc-netty</artifactId>
       <version>${grpc.version}</version>
     </dependency>
+    <dependency>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-tcnative</artifactId>
+      <version>${netty-tcnative.version}</version>
+      <classifier>${os.detected.classifier}</classifier>
+      <scope>runtime</scope>
+    </dependency>
     <dependency>
       <groupId>io.grpc</groupId>
       <artifactId>grpc-protobuf</artifactId>
diff --git a/src/main/java/org/caosdb/server/CaosDBServer.java b/src/main/java/org/caosdb/server/CaosDBServer.java
index e0290050..a4b8d298 100644
--- a/src/main/java/org/caosdb/server/CaosDBServer.java
+++ b/src/main/java/org/caosdb/server/CaosDBServer.java
@@ -354,7 +354,7 @@ public class CaosDBServer extends Application {
       runHTTPSServer(
           port_https, port_http, port_redirect_https, initialConnections, maxTotalConnections);
     }
-    GRPCServer.startServer(8080);
+    GRPCServer.startServer(8080, 8443, 8070);
   }
 
   private static void initDatatypes(final Access access) throws Exception {
diff --git a/src/main/java/org/caosdb/server/grpc/GRPCServer.java b/src/main/java/org/caosdb/server/grpc/GRPCServer.java
index ba920199..f145e35b 100644
--- a/src/main/java/org/caosdb/server/grpc/GRPCServer.java
+++ b/src/main/java/org/caosdb/server/grpc/GRPCServer.java
@@ -2,12 +2,33 @@ package org.caosdb.server.grpc;
 
 import io.grpc.Server;
 import io.grpc.ServerBuilder;
+import io.grpcweb.GrpcPortNumRelay;
+import io.grpcweb.JettyWebserverForGrpcwebTraffic;
+import java.io.File;
 import java.io.IOException;
 
 public class GRPCServer {
 
-  public static void startServer(int port) throws IOException, InterruptedException {
-    Server server = ServerBuilder.forPort(port).addService(new EntityTransactionImpl()).build();
-    server.start();
+  public static void startServer(int port_http, int port_https, int port_web)
+      throws IOException, InterruptedException {
+    Server https_server =
+        ServerBuilder.forPort(port_https)
+            .useTransportSecurity(
+                new File("/home/tf/ssl/server-certificates/localhost-belial/localhost-belial.pem"),
+                new File(
+                    "/home/tf/ssl/server-certificates/localhost-belial/localhost-belial.key.pk8"))
+            .addService(new EntityTransactionImpl())
+            .build();
+    https_server.start();
+
+    Server http_server =
+        ServerBuilder.forPort(port_http).addService(new EntityTransactionImpl()).build();
+    http_server.start();
+
+    JettyWebserverForGrpcwebTraffic web = new JettyWebserverForGrpcwebTraffic(8070);
+    web.starts();
+
+    // grpc-web proxy needs to know the grpc-port# so it could connect to the grpc service.
+    GrpcPortNumRelay.setGrpcPortNum(port_http);
   }
 }
-- 
GitLab