From 1a37cf53f8686b21228889ab70cc2260a386861d Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 14 Aug 2020 20:22:17 -0400 Subject: [PATCH] REO progress --- java_console/bin/broadcast.sh | 8 +++++++- .../com/rusefi/proxy/NetworkConnector.java | 10 ++++++---- .../com/rusefi/server/SessionDetails.java | 9 +++++++-- .../java/com/rusefi/tools/VehicleToken.java | 19 +++++++++++++++++++ .../src/test/java/com/rusefi/TestHelper.java | 2 +- .../java/com/rusefi/tools/ConsoleTools.java | 8 +++++++- .../test/java/com/rusefi/FullServerTest.java | 2 +- .../com/rusefi/server/SessionDetailsTest.java | 5 +++-- .../java/com/rusefi/ts_plugin/RemoteTab.java | 3 ++- 9 files changed, 53 insertions(+), 13 deletions(-) create mode 100644 java_console/io/src/main/java/com/rusefi/tools/VehicleToken.java diff --git a/java_console/bin/broadcast.sh b/java_console/bin/broadcast.sh index d28ab62499..a8d09240d9 100755 --- a/java_console/bin/broadcast.sh +++ b/java_console/bin/broadcast.sh @@ -1 +1,7 @@ -java -jar console/rusefi_console.jar network_connector \ No newline at end of file +#!/bin/bash +while true +do + java -jar console/rusefi_console.jar network_connector + exit_status=$? + echo Exit code: ${exit_status} +done \ No newline at end of file diff --git a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java index 0c8024d606..c5a1d8e830 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java @@ -11,9 +11,11 @@ import com.rusefi.io.LinkManager; import com.rusefi.io.commands.HelloCommand; import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.io.tcp.TcpIoStream; +import com.rusefi.rusEFIVersion; import com.rusefi.server.ControllerInfo; import com.rusefi.server.SessionDetails; import com.rusefi.server.rusEFISSLContext; +import com.rusefi.tools.VehicleToken; import com.rusefi.tools.online.HttpUtil; import org.jetbrains.annotations.NotNull; @@ -69,7 +71,7 @@ public class NetworkConnector implements Closeable { return NetworkConnectorResult.ERROR; } - int oneTimeToken = SessionDetails.createOneTimeCode(); + int vehicleToken = VehicleToken.getOrCreate(); BinaryProtocolServer.getThreadFactory("Proxy Reconnect").newThread(() -> { Semaphore proxyReconnectSemaphore = new Semaphore(1); @@ -84,7 +86,7 @@ public class NetworkConnector implements Closeable { log.debug("Releasing semaphore"); proxyReconnectSemaphore.release(); reconnectListener.onReconnect(); - }, oneTimeToken, controllerInfo, context); + }, vehicleToken, controllerInfo, context); } catch (IOException e) { log.error("IO error", e); } @@ -94,14 +96,14 @@ public class NetworkConnector implements Closeable { } }).start(); - return new NetworkConnectorResult(controllerInfo, oneTimeToken); + return new NetworkConnectorResult(controllerInfo, vehicleToken); } @NotNull private static SessionDetails start(int serverPortForControllers, LinkManager linkManager, String authToken, final TcpIoStream.DisconnectListener disconnectListener, int oneTimeToken, ControllerInfo controllerInfo, final NetworkConnectorContext context) throws IOException { IoStream targetEcuSocket = linkManager.getConnector().getBinaryProtocol().getStream(); - SessionDetails deviceSessionDetails = new SessionDetails(controllerInfo, authToken, oneTimeToken); + SessionDetails deviceSessionDetails = new SessionDetails(controllerInfo, authToken, oneTimeToken, rusEFIVersion.CONSOLE_VERSION); Socket socket; try { diff --git a/java_console/io/src/main/java/com/rusefi/server/SessionDetails.java b/java_console/io/src/main/java/com/rusefi/server/SessionDetails.java index 4aba00782f..c887fdd4f0 100644 --- a/java_console/io/src/main/java/com/rusefi/server/SessionDetails.java +++ b/java_console/io/src/main/java/com/rusefi/server/SessionDetails.java @@ -13,14 +13,17 @@ public class SessionDetails { private static final String ONE_TIME_TOKEN = "oneTime"; private static final String AUTH_TOKEN = "authToken"; private static final String CONTROLLER = "controller"; + private static final String CONNECTOR_VERSION = "connectorVersion"; private static final String HARDCODED_ONE_TIME_CODE = System.getProperty("ONE_TIME_CODE"); private final ControllerInfo controllerInfo; private final int oneTimeToken; private final String authToken; + private final int consoleVersion; - public SessionDetails(ControllerInfo controllerInfo, String authToken, int oneTimeCode) { + public SessionDetails(ControllerInfo controllerInfo, String authToken, int oneTimeCode, int consoleVersion) { + this.consoleVersion = consoleVersion; Objects.requireNonNull(controllerInfo); Objects.requireNonNull(authToken); this.controllerInfo = controllerInfo; @@ -49,6 +52,7 @@ public class SessionDetails { jsonObject.put(CONTROLLER, controllerInfo.toJson()); jsonObject.put(ONE_TIME_TOKEN, oneTimeToken); jsonObject.put(AUTH_TOKEN, authToken); + jsonObject.put(CONNECTOR_VERSION, consoleVersion); return jsonObject.toJSONString(); } @@ -57,10 +61,11 @@ public class SessionDetails { String authToken = (String) jsonObject.get(AUTH_TOKEN); long oneTimeCode = (Long)jsonObject.get(ONE_TIME_TOKEN); + long connectorVersion = (long) jsonObject.get(CONNECTOR_VERSION); ControllerInfo controllerInfo = ControllerInfo.valueOf((String) jsonObject.get(CONTROLLER)); - return new SessionDetails(controllerInfo, authToken, (int) oneTimeCode); + return new SessionDetails(controllerInfo, authToken, (int) oneTimeCode, (int) connectorVersion); } @Override diff --git a/java_console/io/src/main/java/com/rusefi/tools/VehicleToken.java b/java_console/io/src/main/java/com/rusefi/tools/VehicleToken.java new file mode 100644 index 0000000000..3c74ad6c8f --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/tools/VehicleToken.java @@ -0,0 +1,19 @@ +package com.rusefi.tools; + +import com.rusefi.server.SessionDetails; +import com.rusefi.ui.storage.Node; + +import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; + +public class VehicleToken { + private static final String VEHICLE_TOKEN = "VEHICLE_TOKEN"; + + public static int getOrCreate() { + String value = getConfig().getRoot().getProperty(VEHICLE_TOKEN, null); + if (value == null || !Node.isNumeric(value)) { + value = Integer.toString(SessionDetails.createOneTimeCode()); + getConfig().getRoot().setProperty(VEHICLE_TOKEN, value); + } + return Integer.parseInt(value); + } +} diff --git a/java_console/io/src/test/java/com/rusefi/TestHelper.java b/java_console/io/src/test/java/com/rusefi/TestHelper.java index ee8a4fd4a4..198751ff36 100644 --- a/java_console/io/src/test/java/com/rusefi/TestHelper.java +++ b/java_console/io/src/test/java/com/rusefi/TestHelper.java @@ -99,7 +99,7 @@ public class TestHelper { public static SessionDetails createTestSession(String authToken, String signature) { ControllerInfo ci = new ControllerInfo("vehicle", "make", "code", signature); - return new SessionDetails(ci, authToken, SessionDetails.createOneTimeCode()); + return new SessionDetails(ci, authToken, SessionDetails.createOneTimeCode(), rusEFIVersion.CONSOLE_VERSION); } public static void assertLatch(String message, CountDownLatch reconnectCounter) throws InterruptedException { diff --git a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java index b07939c885..d5913444a4 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java @@ -65,7 +65,8 @@ public class ConsoleTools { registerTool("network_authenticator", strings -> LocalApplicationProxy.start(), "rusEFI Online Authenticator"); registerTool("print_auth_token", args -> printAuthToken(), "Print current rusEFI Online authentication token."); - registerTool(SET_AUTH_TOKEN, ConsoleTools::setAuthToken, "Set rusEFI authentication token."); + registerTool("print_vehicle_token", args -> printVehicleToken(), "Prints vehicle access token."); + registerTool(SET_AUTH_TOKEN, ConsoleTools::setAuthToken, "Set rusEFI Online authentication token."); registerTool("upload_tune", ConsoleTools::uploadTune, "Upload specified tune file to rusEFI Online using auth token from settings"); registerTool("read_tune", args -> readTune(), "Read tune from controller"); @@ -173,6 +174,11 @@ public class ConsoleTools { AuthTokenPanel.setAuthToken(newToken); } + private static void printVehicleToken() { + int vehicleToken = VehicleToken.getOrCreate(); + System.out.println("Vehicle token: " + vehicleToken); + } + private static void printAuthToken() { String authToken = AuthTokenPanel.getAuthToken(); if (authToken.trim().isEmpty()) { diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 4cd5fa6440..dc81d6b056 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -107,7 +107,7 @@ public class FullServerTest { TestHelper.assertLatch("controllerRegistered", controllerRegistered); - SessionDetails authenticatorSessionDetails = new SessionDetails(controllerInfo, TEST_TOKEN_3, networkConnectorResult.getOneTimeToken()); + SessionDetails authenticatorSessionDetails = new SessionDetails(controllerInfo, TEST_TOKEN_3, networkConnectorResult.getOneTimeToken(), rusEFIVersion.CONSOLE_VERSION); ApplicationRequest applicationRequest = new ApplicationRequest(authenticatorSessionDetails, userDetailsResolver.apply(TestHelper.TEST_TOKEN_1)); // start authenticator diff --git a/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java b/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java index 0149866e01..bd1939b80a 100644 --- a/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java +++ b/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java @@ -1,6 +1,7 @@ package com.rusefi.server; import com.rusefi.TestHelper; +import com.rusefi.rusEFIVersion; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -9,7 +10,7 @@ public class SessionDetailsTest { @Test public void testSerialization() { - SessionDetails sd = new SessionDetails(TestHelper.CONTROLLER_INFO, "auth", 123); + SessionDetails sd = new SessionDetails(TestHelper.CONTROLLER_INFO, "auth", 123, rusEFIVersion.CONSOLE_VERSION); String json = sd.toJson(); SessionDetails fromJson = SessionDetails.valueOf(json); @@ -18,7 +19,7 @@ public class SessionDetailsTest { @Test public void testApplicationRequest() { - SessionDetails sd = new SessionDetails(TestHelper.CONTROLLER_INFO, "auth", 123); + SessionDetails sd = new SessionDetails(TestHelper.CONTROLLER_INFO, "auth", 123, rusEFIVersion.CONSOLE_VERSION); ApplicationRequest ar = new ApplicationRequest(sd, new UserDetails("", 321)); String json = ar.toJson(); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index 6bb3c80a72..2be40e080c 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -9,6 +9,7 @@ import com.rusefi.io.tcp.ServerSocketReference; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.proxy.client.LocalApplicationProxyContextImpl; +import com.rusefi.rusEFIVersion; import com.rusefi.server.ApplicationRequest; import com.rusefi.server.ControllerInfo; import com.rusefi.server.SessionDetails; @@ -225,7 +226,7 @@ public class RemoteTab { private void runAuthenticator(PublicSession publicSession, ControllerInfo controllerInfo, LocalApplicationProxy.ConnectionListener connectionListener) { SessionDetails sessionDetails = new SessionDetails(controllerInfo, AuthTokenPanel.getAuthToken(), - Integer.parseInt(oneTimePasswordControl.getText())); + Integer.parseInt(oneTimePasswordControl.getText()), rusEFIVersion.CONSOLE_VERSION); ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, publicSession.getUserDetails());