diff --git a/org.getmonero.i2p.zero.gui/src/org/getmonero/i2p/zero/gui/Controller.java b/org.getmonero.i2p.zero.gui/src/org/getmonero/i2p/zero/gui/Controller.java index d71dbc9..b4c03b0 100644 --- a/org.getmonero.i2p.zero.gui/src/org/getmonero/i2p/zero/gui/Controller.java +++ b/org.getmonero.i2p.zero.gui/src/org/getmonero/i2p/zero/gui/Controller.java @@ -191,8 +191,6 @@ public class Controller { var params = Gui.instance.getParameters().getNamed(); Properties routerProperties = new Properties(); - routerProperties.put("i2p.dir.base", params.get("i2p.dir.base")); - routerProperties.put("i2p.dir.config", params.get("i2p.dir.config")); routerProperties.put("i2np.inboundKBytesPerSecond", getBandwidthLimitKBPerSec()); routerProperties.put("i2np.outboundKBytesPerSecond", getBandwidthLimitKBPerSec()); routerProperties.put("router.sharePercentage", 80); diff --git a/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/Main.java b/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/Main.java index 481c0a5..225ad90 100644 --- a/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/Main.java +++ b/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/Main.java @@ -1,6 +1,5 @@ package org.getmonero.i2p.zero; -import java.io.File; import java.util.Properties; import java.util.stream.Collectors; @@ -12,11 +11,6 @@ public class Main { "Press Ctrl-C to gracefully shut down the router (or send the SIGINT signal to the process)."); Properties p = new Properties(); - // add your configuration settings, directories, etc. - // where to find the I2P installation files - p.put("i2p.dir.base", "/usr/share/i2p"); - // where to find the I2P data files - p.put("i2p.dir.config", System.getProperty("user.home") + File.separator + ".i2p-zero"); // bandwidth limits in K bytes per second p.put("i2np.inboundKBytesPerSecond","50"); p.put("i2np.outboundKBytesPerSecond","50"); diff --git a/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/RouterWrapper.java b/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/RouterWrapper.java index 74c87c4..f8f1876 100644 --- a/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/RouterWrapper.java +++ b/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/RouterWrapper.java @@ -10,6 +10,9 @@ import net.i2p.router.transport.FIFOBandwidthRefiller; import net.i2p.router.transport.TransportUtil; import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; import java.util.Date; import java.util.HashMap; import java.util.Properties; @@ -20,12 +23,33 @@ public class RouterWrapper { private boolean started = false; private Properties routerProperties; private TunnelControl tunnelControl; - private File configDir; + private File i2PConfigDir; + private File i2PBaseDir; public RouterWrapper(Properties p) { this.routerProperties = p; - configDir = new File(routerProperties.getProperty("i2p.dir.config")); - if(!configDir.exists()) configDir.mkdir(); + + p.put("i2p.dir.base", System.getProperty("user.home") + File.separator + ".i2p-zero" + File.separator + "base"); + p.put("i2p.dir.config", System.getProperty("user.home") + File.separator + ".i2p-zero" + File.separator + "config"); + + i2PConfigDir = new File(routerProperties.getProperty("i2p.dir.config")); + if(!i2PConfigDir.exists()) i2PConfigDir.mkdirs(); + + i2PBaseDir = new File(routerProperties.getProperty("i2p.dir.base")); + if(!i2PBaseDir.exists()) { + i2PBaseDir.mkdirs(); + copyFolderRecursively(Path.of(routerProperties.getProperty("i2p.dir.base.template")), i2PBaseDir.toPath()); + } + } + + public void copyFolderRecursively(Path src, Path dest) { + try { + Files.walk(src).forEach(source -> { + try { Files.copy(source, dest.resolve(src.relativize(source)), StandardCopyOption.REPLACE_EXISTING); } catch (Exception e) { throw new RuntimeException(e); } + }); + } catch (Exception e) { + throw new RuntimeException(e); + } } public boolean isStarted() { @@ -57,7 +81,7 @@ public class RouterWrapper { } } - tunnelControl = new TunnelControl(router, new File(configDir, "tunnelTemp")); + tunnelControl = new TunnelControl(router, new File(i2PConfigDir, "tunnelTemp")); new Thread(tunnelControl).start(); } diff --git a/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/TunnelControl.java b/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/TunnelControl.java index e7c6109..7fce263 100644 --- a/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/TunnelControl.java +++ b/org.getmonero.i2p.zero/src/org/getmonero/i2p/zero/TunnelControl.java @@ -189,16 +189,18 @@ public class TunnelControl implements Runnable { String destHost = args[1]; int destPort = Integer.parseInt(args[2]); File serverTunnelConfigDir = new File(args[3]); - if(!serverTunnelConfigDir.exists()) serverTunnelConfigDir.mkdir(); - File serverKeyFile = new File(serverTunnelConfigDir, "serverTunnelSecretKey"); + File serverKeyFile; KeyPair keyPair; - if(serverKeyFile.exists()) { - keyPair = KeyPair.read(serverKeyFile.getPath()); - } - else { + if(!serverTunnelConfigDir.exists() || serverTunnelConfigDir.listFiles((dir, name) -> name.toLowerCase().endsWith(".keys")).length==0) { + serverTunnelConfigDir.mkdir(); keyPair = KeyPair.gen(); + serverKeyFile = new File(serverTunnelConfigDir, keyPair.b32Dest + ".keys"); keyPair.write(serverKeyFile.getPath()); } + else { + serverKeyFile = serverTunnelConfigDir.listFiles((dir, name) -> name.toLowerCase().endsWith(".keys"))[0]; + keyPair = KeyPair.read(serverKeyFile.getPath()); + } var tunnel = new ServerTunnel(destHost, destPort, keyPair, getTunnelControlTempDir()); tunnels.add(tunnel); out.println(tunnel.dest); diff --git a/resources/i2p-zero.app/Contents/MacOS/launch-gui.sh b/resources/i2p-zero.app/Contents/MacOS/launch-gui.sh index 933aa9f..5233d7d 100755 --- a/resources/i2p-zero.app/Contents/MacOS/launch-gui.sh +++ b/resources/i2p-zero.app/Contents/MacOS/launch-gui.sh @@ -3,4 +3,4 @@ wd=${0%/*} cd "$wd" basedir="$wd/../../../.." -./java -cp $basedir/i2p.base/jbigi.jar -m org.getmonero.i2p.zero.gui --i2p.dir.base=$basedir/i2p.base --i2p.dir.config=$basedir/i2p.config +./java -cp $basedir/i2p.base/jbigi.jar -m org.getmonero.i2p.zero.gui --i2p.dir.base.template=$basedir/i2p.base diff --git a/resources/launch-gui.bat b/resources/launch-gui.bat index 1db47cc..2b33cdc 100644 --- a/resources/launch-gui.bat +++ b/resources/launch-gui.bat @@ -1,3 +1,3 @@ @echo off set DIR=%~dp0 -"%DIR%\java" -cp %DIR%\..\i2p.base\jbigi.jar -m org.getmonero.i2p.zero.gui --i2p.dir.base=%DIR%\..\i2p.base %* \ No newline at end of file +"%DIR%\java" -cp %DIR%\..\i2p.base\jbigi.jar -m org.getmonero.i2p.zero.gui --i2p.dir.base.template=%DIR%\..\i2p.base %* \ No newline at end of file diff --git a/resources/launch-gui.sh b/resources/launch-gui.sh index 97b4b03..55c451f 100755 --- a/resources/launch-gui.sh +++ b/resources/launch-gui.sh @@ -6,4 +6,4 @@ else basedir=$(dirname $(dirname $(readlink -fm $0))) fi -$basedir/bin/java -cp $basedir/i2p.base/jbigi.jar -m org.getmonero.i2p.zero.gui --i2p.dir.base=$basedir/i2p.base +$basedir/bin/java -cp $basedir/i2p.base/jbigi.jar -m org.getmonero.i2p.zero.gui --i2p.dir.base.template=$basedir/i2p.base diff --git a/resources/launch.bat b/resources/launch.bat index 71aede2..8e1bd26 100644 --- a/resources/launch.bat +++ b/resources/launch.bat @@ -1,3 +1,3 @@ @echo off set DIR=%~dp0 -"%DIR%\java" -cp %DIR%\..\i2p.base\jbigi.jar -m org.getmonero.i2p.zero --i2p.dir.base=%DIR%\..\i2p.base --i2p.dir.config=%DIR%\..\i2p.config %* \ No newline at end of file +"%DIR%\java" -cp %DIR%\..\i2p.base\jbigi.jar -m org.getmonero.i2p.zero --i2p.dir.base.template=%DIR%\..\i2p.base %* \ No newline at end of file diff --git a/resources/launch.sh b/resources/launch.sh index fa9d77b..8c835ba 100755 --- a/resources/launch.sh +++ b/resources/launch.sh @@ -6,4 +6,4 @@ else basedir=$(dirname $(dirname $(readlink -fm $0))) fi -$basedir/bin/java -cp $basedir/i2p.base/jbigi.jar -m org.getmonero.i2p.zero --i2p.dir.base=$basedir/i2p.base +$basedir/bin/java -cp $basedir/i2p.base/jbigi.jar -m org.getmonero.i2p.zero --i2p.dir.base.template=$basedir/i2p.base