Skip to content
Snippets Groups Projects
Verified Commit 000f653a authored by Timm Fitschen's avatar Timm Fitschen
Browse files

add proto submodule

parent 0c411c15
No related branches found
No related tags found
2 merge requests!44Release 0.6,!43Merge f-GRPC-main to dev
Pipeline #8210 failed
......@@ -2,3 +2,6 @@
path = caosdb-webui
url = ../caosdb-webui/
branch = dev
[submodule "caosdb-proto"]
path = caosdb-proto
url = git@gitlab.indiscale.com:caosdb/src/caosdb-proto.git
Subproject commit b0cade5e02daff99eaa46e1201f2786ac873114b
......@@ -374,6 +374,7 @@
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.6.1</version>
<configuration>
<protoSourceRoot>${basedir}/caosdb-proto/proto/</protoSourceRoot>
<protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
......
......@@ -151,7 +151,7 @@ public class CaosDBServer extends Application {
initBackend();
initWebServer();
initShutDownHook();
} catch (Exception e1) {
} catch (final Exception e1) {
logger.error("Could not start the server.", e1);
System.exit(1);
}
......@@ -204,7 +204,7 @@ public class CaosDBServer extends Application {
* @throws IOException
*/
public static void initTimeZone() throws InterruptedException, IOException {
String serverProperty = getServerProperty(ServerProperties.KEY_TIMEZONE);
final String serverProperty = getServerProperty(ServerProperties.KEY_TIMEZONE);
if (serverProperty != null && !serverProperty.isEmpty()) {
logger.info(
"SET TIMEZONE = "
......@@ -217,7 +217,7 @@ public class CaosDBServer extends Application {
return;
}
String prop = System.getProperty("user.timezone");
final String prop = System.getProperty("user.timezone");
if (prop != null && !prop.isEmpty()) {
logger.info("SET TIMEZONE = " + prop + " from JVM property `user.timezone`.");
TimeZone.setDefault(TimeZone.getTimeZone(ZoneId.of(prop)));
......@@ -225,7 +225,7 @@ public class CaosDBServer extends Application {
return;
}
String envVar = System.getenv("TZ");
final String envVar = System.getenv("TZ");
if (envVar != null && !envVar.isEmpty()) {
logger.info("SET TIMEZONE = " + envVar + " from evironment variable `TZ`.");
TimeZone.setDefault(TimeZone.getTimeZone(ZoneId.of(envVar)));
......@@ -233,7 +233,7 @@ public class CaosDBServer extends Application {
return;
}
String fromDate = getTimeZoneFromDate();
final String fromDate = getTimeZoneFromDate();
if (fromDate != null && fromDate.isEmpty()) {
logger.info("SET TIMEZONE = " + fromDate + " from `date +%Z`.");
TimeZone.setDefault(TimeZone.getTimeZone(ZoneId.of(fromDate)));
......@@ -299,8 +299,8 @@ public class CaosDBServer extends Application {
return config;
}
public static void initShiro(Ini config) {
BasicIniEnvironment env = new BasicIniEnvironment(config);
public static void initShiro(final Ini config) {
final BasicIniEnvironment env = new BasicIniEnvironment(config);
final SecurityManager securityManager = env.getSecurityManager();
SecurityUtils.setSecurityManager(securityManager);
}
......@@ -339,7 +339,7 @@ public class CaosDBServer extends Application {
try {
port_redirect_https =
Integer.parseInt(getServerProperty(ServerProperties.KEY_REDIRECT_HTTP_TO_HTTPS_PORT));
} catch (NumberFormatException e) {
} catch (final NumberFormatException e) {
port_redirect_https = port_https;
}
final int initialConnections =
......@@ -353,7 +353,7 @@ public class CaosDBServer extends Application {
runHTTPSServer(
port_https, port_http, port_redirect_https, initialConnections, maxTotalConnections);
}
GRPCServer.startServer(8080, 8443, 8070);
GRPCServer.startServer(8080, 8443);
}
private static void initDatatypes(final Access access) throws Exception {
......@@ -371,10 +371,10 @@ public class CaosDBServer extends Application {
*/
private static void runHTTPServer(
final int port_http, final int initialConnections, final int maxTotalConnections)
throws Exception {
throws Exception {
Engine.getInstance()
.getRegisteredServers()
.add(new org.restlet.ext.jetty.HttpServerHelper(null));
.getRegisteredServers()
.add(new org.restlet.ext.jetty.HttpServerHelper(null));
// Create a component.
component = new CaosDBComponent();
......@@ -397,16 +397,16 @@ public class CaosDBServer extends Application {
// Create an application (this class).
final Application application = new CaosDBServer();
application
.getStatusService()
.setContactEmail(getServerProperty(ServerProperties.KEY_ADMIN_EMAIL));
.getStatusService()
.setContactEmail(getServerProperty(ServerProperties.KEY_ADMIN_EMAIL));
application
.getStatusService()
.setHomeRef(new Reference(getServerProperty(ServerProperties.KEY_CONTEXT_ROOT) + "/"));
.getStatusService()
.setHomeRef(new Reference(getServerProperty(ServerProperties.KEY_CONTEXT_ROOT) + "/"));
// Attach the application to the component with a defined contextRoot.
component
.getDefaultHost()
.attach(getServerProperty(ServerProperties.KEY_CONTEXT_ROOT), application);
.getDefaultHost()
.attach(getServerProperty(ServerProperties.KEY_CONTEXT_ROOT), application);
component.start();
......@@ -432,7 +432,7 @@ public class CaosDBServer extends Application {
final int port_redirect_https,
final int initialConnections,
final int maxTotalConnections)
throws Exception {
throws Exception {
Engine.getInstance().getRegisteredServers().add(new CaosDBServerConnectorHelper(null));
......@@ -453,9 +453,9 @@ public class CaosDBServer extends Application {
if (port_http != 0) {
logger.info("Redirecting to " + port_redirect_https);
component
.getServers()
.add(Protocol.HTTP, port_http)
.setNext(new HttpToHttpsRedirector(port_redirect_https));
.getServers()
.add(Protocol.HTTP, port_http)
.setNext(new HttpToHttpsRedirector(port_redirect_https));
}
// set initial and maximal connections
......@@ -485,20 +485,20 @@ public class CaosDBServer extends Application {
// Create an application (this class).
final Application application = new CaosDBServer();
application
.getStatusService()
.setContactEmail(
getServerProperty(ServerProperties.KEY_ADMIN_NAME)
+ " <"
+ getServerProperty(ServerProperties.KEY_ADMIN_EMAIL)
+ ">");
.getStatusService()
.setContactEmail(
getServerProperty(ServerProperties.KEY_ADMIN_NAME)
+ " <"
+ getServerProperty(ServerProperties.KEY_ADMIN_EMAIL)
+ ">");
application
.getStatusService()
.setHomeRef(new Reference(getServerProperty(ServerProperties.KEY_CONTEXT_ROOT) + "/"));
.getStatusService()
.setHomeRef(new Reference(getServerProperty(ServerProperties.KEY_CONTEXT_ROOT) + "/"));
component
.getDefaultHost()
.attach(getServerProperty(ServerProperties.KEY_CONTEXT_ROOT), application);
.getDefaultHost()
.attach(getServerProperty(ServerProperties.KEY_CONTEXT_ROOT), application);
component.start();
......@@ -520,16 +520,16 @@ public class CaosDBServer extends Application {
/** ProtectedRouter. Is protected by the authenticator. */
final Router protectedRouter =
new Router(getContext()) {
@Override
public void handle(final Request request, final Response response) {
try {
super.handle(request, response);
} catch (final NullPointerException e) {
response.setStatus(Status.CLIENT_ERROR_REQUEST_URI_TOO_LONG);
response.setEntity(null);
}
}
};
@Override
public void handle(final Request request, final Response response) {
try {
super.handle(request, response);
} catch (final NullPointerException e) {
response.setStatus(Status.CLIENT_ERROR_REQUEST_URI_TOO_LONG);
response.setEntity(null);
}
}
};
/**
* BaseRouter. Routes the call to some special Resources, which are available without any
......@@ -538,59 +538,59 @@ public class CaosDBServer extends Application {
*/
final Router baseRouter =
new Router(getContext()) {
@Override
public void handle(final Request request, final Response response) {
try {
super.handle(request, response);
@Override
public void handle(final Request request, final Response response) {
try {
super.handle(request, response);
// after everything, set session cookies
setSessionCookies(response);
} finally {
// remove subject from this thread so that we can reuse the
// thread.
ThreadContext.unbindSubject();
}
}
// after everything, set session cookies
setSessionCookies(response);
private void setSessionCookies(final Response response) {
} finally {
// remove subject from this thread so that we can reuse the
// thread.
ThreadContext.unbindSubject();
}
final Subject subject = SecurityUtils.getSubject();
// if authenticated as a normal user: generate and set session cookie.
if (subject.isAuthenticated()
&& subject.getPrincipal() != AnonymousAuthenticationToken.PRINCIPAL) {
final SessionToken sessionToken = SessionToken.generate(subject);
// set session token cookie (httpOnly, secure cookie which
// is used to recognize a user session)
final CookieSetting sessionTokenCookie =
AuthenticationUtils.createSessionTokenCookie(sessionToken);
if (sessionTokenCookie != null) {
response.getCookieSettings().add(sessionTokenCookie);
}
private void setSessionCookies(final Response response) {
final Subject subject = SecurityUtils.getSubject();
// if authenticated as a normal user: generate and set session cookie.
if (subject.isAuthenticated()
&& subject.getPrincipal() != AnonymousAuthenticationToken.PRINCIPAL) {
final SessionToken sessionToken = SessionToken.generate(subject);
// set session token cookie (httpOnly, secure cookie which
// is used to recognize a user session)
final CookieSetting sessionTokenCookie =
AuthenticationUtils.createSessionTokenCookie(sessionToken);
if (sessionTokenCookie != null) {
response.getCookieSettings().add(sessionTokenCookie);
}
// set session timeout cookie (secure cookie which may be
// used
// by the user interfaces for anything)
final CookieSetting sessionTimeoutCookie =
AuthenticationUtils.createSessionTimeoutCookie(sessionToken);
if (sessionTimeoutCookie != null) {
response.getCookieSettings().add(sessionTimeoutCookie);
}
}
// set session timeout cookie (secure cookie which may be
// used
// by the user interfaces for anything)
final CookieSetting sessionTimeoutCookie =
AuthenticationUtils.createSessionTimeoutCookie(sessionToken);
if (sessionTimeoutCookie != null) {
response.getCookieSettings().add(sessionTimeoutCookie);
}
};
}
}
};
// These routes can be used without logging in:
baseRouter.attach("/webinterface/version/build", WebinterfaceBuildNumber.class);
baseRouter
.attach("/webinterface/{path}", Webinterface.class)
.getTemplate()
.getDefaultVariable()
.setType(Variable.TYPE_URI_PATH);
.attach("/webinterface/{path}", Webinterface.class)
.getTemplate()
.getDefaultVariable()
.setType(Variable.TYPE_URI_PATH);
baseRouter
.attach("/login?username={username}", AuthenticationResource.class)
.setMatchingQuery(true);
.attach("/login?username={username}", AuthenticationResource.class)
.setMatchingQuery(true);
baseRouter.attach("/login", AuthenticationResource.class);
baseRouter.attach("", authenticator).setMatchingQuery(false);
......@@ -656,22 +656,22 @@ public class CaosDBServer extends Application {
// FileSystem etc. needs to accept parameters which contain slashes and would otherwise be
// split at the first separator
protectedRouter
.attach("/FileSystem/{path}", FileSystemResource.class)
.getTemplate()
.getDefaultVariable()
.setType(Variable.TYPE_URI_PATH);
.attach("/FileSystem/{path}", FileSystemResource.class)
.getTemplate()
.getDefaultVariable()
.setType(Variable.TYPE_URI_PATH);
protectedRouter
.attach("/Thumbnails/{path}", ThumbnailsResource.class)
.getTemplate()
.getDefaultVariable()
.setType(Variable.TYPE_URI_PATH);
.attach("/Thumbnails/{path}", ThumbnailsResource.class)
.getTemplate()
.getDefaultVariable()
.setType(Variable.TYPE_URI_PATH);
protectedRouter.attach("/Shared", SharedFileResource.class);
protectedRouter.attach("/Shared/", SharedFileResource.class);
protectedRouter
.attach("/Shared/{path}", SharedFileResource.class)
.getTemplate()
.getDefaultVariable()
.setType(Variable.TYPE_URI_PATH);
.attach("/Shared/{path}", SharedFileResource.class)
.getTemplate()
.getDefaultVariable()
.setType(Variable.TYPE_URI_PATH);
;
protectedRouter.attach("/Info", InfoResource.class);
protectedRouter.attach("/Info/", InfoResource.class);
......@@ -680,11 +680,11 @@ public class CaosDBServer extends Application {
protectedRouter.attach("/PermissionRules/{specifier}", PermissionRulesResource.class);
protectedRouter.attach("/PermissionRules/{realm}/{specifier}", PermissionRulesResource.class);
protectedRouter
.attach("/ServerLogs/", ServerLogsResource.class)
.setMatchingMode(Template.MODE_STARTS_WITH);
.attach("/ServerLogs/", ServerLogsResource.class)
.setMatchingMode(Template.MODE_STARTS_WITH);
protectedRouter
.attach("/ServerLogs", ServerLogsResource.class)
.setMatchingMode(Template.MODE_STARTS_WITH);
.attach("/ServerLogs", ServerLogsResource.class)
.setMatchingMode(Template.MODE_STARTS_WITH);
protectedRouter.attach("/login?username={username}", AuthenticationResource.class);
protectedRouter.attach("/logout", LogoutResource.class);
protectedRouter.attach("/_server_properties", ServerPropertiesResource.class);
......@@ -700,37 +700,37 @@ public class CaosDBServer extends Application {
final Handler handler =
new Handler() {
@Override
public void publish(final LogRecord record) {
if (record.getLevel() == Level.WARNING
&& record
.getMessage()
.startsWith(
"StackOverflowError exception encountered while matching this string")) {
// cause a NullPointerException
throw new NullPointerException();
}
}
@Override
public void publish(final LogRecord record) {
if (record.getLevel() == Level.WARNING
&& record
.getMessage()
.startsWith(
"StackOverflowError exception encountered while matching this string")) {
// cause a NullPointerException
throw new NullPointerException();
}
}
@Override
public void flush() {}
@Override
public void flush() {}
@Override
public void close() throws SecurityException {}
};
@Override
public void close() throws SecurityException {}
};
routes:
for (final Route r : protectedRouter.getRoutes()) {
if (r instanceof TemplateRoute) {
final TemplateRoute t = (TemplateRoute) r;
for (final Handler h : t.getTemplate().getLogger().getHandlers()) {
if (h == handler) {
continue routes;
for (final Route r : protectedRouter.getRoutes()) {
if (r instanceof TemplateRoute) {
final TemplateRoute t = (TemplateRoute) r;
for (final Handler h : t.getTemplate().getLogger().getHandlers()) {
if (h == handler) {
continue routes;
}
}
t.getTemplate().getLogger().addHandler(handler);
}
t.getTemplate().getLogger().addHandler(handler);
}
}
return baseRouter;
}
......@@ -779,22 +779,22 @@ public class CaosDBServer extends Application {
private static void initShutDownHook() {
Runtime.getRuntime()
.addShutdownHook(
new Thread("SHUTDOWN_HTTP_SERVER") {
@Override
public void run() {
callPreShutdownHooks();
try {
component.stop();
System.err.print("Stopping HTTP server [OK]\n");
} catch (final Exception e) {
System.err.print("Stopping HTTP server [failed]\n");
e.printStackTrace();
} finally {
callPostShutdownHooks();
}
}
});
.addShutdownHook(
new Thread("SHUTDOWN_HTTP_SERVER") {
@Override
public void run() {
callPreShutdownHooks();
try {
component.stop();
System.err.print("Stopping HTTP server [OK]\n");
} catch (final Exception e) {
System.err.print("Stopping HTTP server [failed]\n");
e.printStackTrace();
} finally {
callPostShutdownHooks();
}
}
});
}
public static Component getComponent() {
......@@ -812,7 +812,7 @@ public class CaosDBServer extends Application {
* @param key, the server property.
* @param value, the new value.
*/
public static void setProperty(String key, String value) {
public static void setProperty(final String key, final String value) {
SERVER_PROPERTIES.setProperty(key, value);
}
......@@ -820,7 +820,7 @@ public class CaosDBServer extends Application {
return SERVER_PROPERTIES;
}
public static void scheduleJob(JobDetail job, Trigger trigger) throws SchedulerException {
public static void scheduleJob(final JobDetail job, final Trigger trigger) throws SchedulerException {
SCHEDULER.scheduleJob(job, trigger);
}
}
......@@ -850,7 +850,7 @@ class CaosDBComponent extends Component {
*/
@Override
public void handle(final Request request, final Response response) {
long t1 = System.currentTimeMillis();
final long t1 = System.currentTimeMillis();
// The server request ID is just a long random number
request.getAttributes().put("SRID", UUID.randomUUID().toString());
response.setServerInfo(CaosDBServer.getServerInfo());
......@@ -858,7 +858,7 @@ class CaosDBComponent extends Component {
log(request, response, t1);
}
private void log(final Request request, final Response response, long t1) {
private void log(final Request request, final Response response, final long t1) {
if (response.getStatus() == Status.SERVER_ERROR_INTERNAL) {
final Object object = request.getAttributes().get("THROWN");
Throwable t = null;
......
package org.caosdb.server.grpc;
import org.caosdb.api.info.v1alpha1.GeneralInfoServiceGrpc.GeneralInfoServiceImplBase;
import org.caosdb.api.info.v1alpha1.GetVersionInfoRequest;
import org.caosdb.api.info.v1alpha1.GetVersionInfoResponse;
import org.caosdb.api.info.v1alpha1.VersionInfo;
import io.grpc.stub.StreamObserver;
import java.util.UUID;
import org.apache.shiro.SecurityUtils;
import org.caosdb.grpc.Entity;
import org.caosdb.grpc.EntityTransactionServiceGrpc.EntityTransactionServiceImplBase;
import org.caosdb.server.entity.EntityInterface;
import org.caosdb.server.entity.container.RetrieveContainer;
import org.caosdb.server.transaction.Retrieve;
import org.caosdb.server.utils.EntityStatus;
public class EntityTransactionImpl extends EntityTransactionServiceImplBase {
public class EntityTransactionImpl extends GeneralInfoServiceImplBase {
@Override
public void retrieve(Entity request, StreamObserver<Entity> responseObserver) {
String requested_entity_id = request.getEid();
public void getVersionInfo(final GetVersionInfoRequest request,
final StreamObserver<GetVersionInfoResponse> responseObserver) {
RetrieveContainer container =
new RetrieveContainer(
SecurityUtils.getSubject(),
System.currentTimeMillis(),
UUID.randomUUID().toString(),
null);
container.add(Integer.parseInt(requested_entity_id));
Retrieve retrieve = new Retrieve(container);
try {
retrieve.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
EntityInterface retrieved_entity = retrieve.getContainer().get(0);
Entity response;
if (retrieved_entity.getEntityStatus() == EntityStatus.VALID) {
response =
Entity.newBuilder(request)
.setName(retrieved_entity.getName())
.setDescription(retrieved_entity.getDescription())
.build();
} else {
response = Entity.newBuilder(request).setDescription("DOES NOT EXIST").build();
}
final VersionInfo versionInfo = VersionInfo.newBuilder().setMajor(0).setMinor(0).setPatch(1).build();
final GetVersionInfoResponse response = GetVersionInfoResponse.newBuilder().setVersionInfo(versionInfo).build();
responseObserver.onNext(response);
responseObserver.onCompleted();
......
package org.caosdb.server.grpc;
import java.io.IOException;
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_http, int port_https, int port_web)
public static void startServer(final int port_http, final int port_https)
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 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 =
final 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);
}
}
syntax = "proto3";
option java_multiple_files = true;
option java_package = "org.caosdb.grpc";
package caosdb;
message Entity {
string eid = 1;
string name = 2;
string description = 3;
}
service EntityTransactionService {
rpc retrieve(Entity) returns (Entity);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment