From c318114619bae864d343759d95155e0fa5ece24e Mon Sep 17 00:00:00 2001 From: DC* Date: Sun, 25 Apr 2021 00:10:01 +0100 Subject: [PATCH 1/8] Refactor install class into NodeController and Config classes --- .../org/freenetproject/mobile/Config.java | 101 ++++++++++++ .../org/freenetproject/mobile/Installer.java | 148 ------------------ .../freenetproject/mobile/NodeController.java | 74 +++++++++ src/main/resources/freenet.ini | 1 + .../mobile/NodeControllerTest.java | 49 ++++++ 5 files changed, 225 insertions(+), 148 deletions(-) create mode 100644 src/main/java/org/freenetproject/mobile/Config.java delete mode 100644 src/main/java/org/freenetproject/mobile/Installer.java create mode 100644 src/main/java/org/freenetproject/mobile/NodeController.java create mode 100644 src/main/resources/freenet.ini create mode 100644 src/test/java/org/freenetproject/mobile/NodeControllerTest.java diff --git a/src/main/java/org/freenetproject/mobile/Config.java b/src/main/java/org/freenetproject/mobile/Config.java new file mode 100644 index 0000000..2816018 --- /dev/null +++ b/src/main/java/org/freenetproject/mobile/Config.java @@ -0,0 +1,101 @@ +package org.freenetproject.mobile; + +import java.io.*; +import java.nio.file.*; +import java.util.*; + +/** + * Small abstraction over java.util.Properties class. + */ +class Config { + private final String properties = "freenet.ini"; + private Properties config; + + /** + * Set a given value under key. + * + * @param key Key name. + * @param val Value. + */ + public void set(String key, String val) { + config.setProperty(key, val); + } + + /** + * Gets the value for configuration key, defaults to "" + * if the configuration key is not present. + * + * @param key Configuration key. + * @return Value. + */ + public String get(String key) { + return config.getProperty(key, ""); + } + + /** + * Gets the value for configuration key, defaults to defaultValue + * if the configuration key is not present. + * + * @param key Configuration key. + * @return Value. + */ + public String get(String key, String defaultValue) { + return config.getProperty(key, defaultValue); + } + + /** + * Loads node configuration or creates one under path with default values. + * + * @param path Path where the node is located. + */ + public void loadOrDefault(Path path) throws IOException { + Path config = Path.of(path.toString(), properties); + + if (Files.exists(config)) { + InputStream is = new FileInputStream(config.toFile()); + this.config = new Properties(is.read()); + return; + } + + this.config = getDefaultConfig(path); + persist(); + } + + /** + * Stores the current configuration to filesystem. + */ + public void persist() throws IOException { + File dest = Path.of(this.config.getProperty("node.install.cfgDir"), properties).toFile(); + FileWriter writer = new FileWriter(dest); + this.config.store(writer, dest.toString()); + } + + /** + * Gets the default configuration and update the paths before returning it. + * + * @param path Node path. + * @return Configured node. + */ + private Properties getDefaultConfig(Path path) throws IOException { + InputStream defaultConfig = getClass().getClassLoader().getResourceAsStream(properties); + + Properties config = new Properties(defaultConfig.read()); + String dir = path.toString(); + config.setProperty("node.install.cfgDir", dir); + config.setProperty("node.install.userDir", dir); + config.setProperty("node.install.nodeDir", dir); + config.setProperty("node.install.runDir", dir); + config.setProperty("node.install.storeDir", dir + "/pathstore"); + config.setProperty("node.install.tempDir", dir + "/temp"); + config.setProperty("node.install.pluginDir", dir + "/plugins"); + config.setProperty("node.install.pluginStoresDir", dir + "/plugin-path"); + config.setProperty("node.install.persistentTempDir", dir + "/persistent-temp"); + + config.setProperty("node.masterKeyFile", dir + "/master.keys"); + config.setProperty("node.downloadsDir", dir + "/downloads"); + + config.setProperty("logger.dirname", dir + "/logs"); + + return config; + } +} \ No newline at end of file diff --git a/src/main/java/org/freenetproject/mobile/Installer.java b/src/main/java/org/freenetproject/mobile/Installer.java deleted file mode 100644 index d468a8c..0000000 --- a/src/main/java/org/freenetproject/mobile/Installer.java +++ /dev/null @@ -1,148 +0,0 @@ -package org.freenetproject.mobile; - -import trikita.log.Log; - -import org.apache.commons.compress.utils.IOUtils; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; - -public class Installer { - private String path = null; - private static Installer instance = null; - private Installer() { } - - private final String FREENET_INI = "freenet.ini"; - private final String SEEDNODES = "seednodes.fref"; - private final String BOOKMARKS = "bookmarks.dat"; - - public static Installer getInstance() { - if (instance == null) { - instance = new Installer(); - } - return instance; - } - - /** - * Install the node with default configuration and seed nodes both from resources. Some configuration - * properties are dynamically calculated at runtime on the first startup (mostly related to directory paths). - * - * @param path Path to installation location. - * @param seeds Input stream of seeds file. - * @param config Input stream of default configuration. - * @param bookmarks Input stream of default bookmarks - * - * @throws FileNotFoundException - */ - public void install(String path, InputStream seeds, InputStream config, InputStream bookmarks, String lang) throws FileNotFoundException { - File f = new File(path); - if (!f.exists() || !f.canWrite()) { - throw new FileNotFoundException("Invalid installation directory: " + path); - } - - this.path = path; - - // Install bundled configurations - createConfiguration(seeds, getSeednodesPath()); - createConfiguration(config, getFreenetIniPath()); - createConfiguration(bookmarks, getBookmarksPath()); - - // Update freenet.ini with dynamic configuration - final FileOutputStream ini = new FileOutputStream(getFreenetIniPath(), true); - final PrintWriter out = new PrintWriter(new OutputStreamWriter(ini)); - - out.println("node.install.cfgDir=" + path); - out.println("node.install.userDir=" + path); - out.println("node.install.nodeDir=" + path); - out.println("node.install.runDir=" + path); - out.println("node.install.storeDir=" + path + "/pathstore"); - out.println("node.install.tempDir=" + path + "/temp"); - out.println("node.install.pluginDir=" + path + "/plugins"); - out.println("node.install.pluginStoresDir=" + path + "/plugin-path"); - out.println("node.install.persistentTempDir=" + path + "/persistent-temp"); - - out.println("node.masterKeyFile=" + path + "/master.keys"); - out.println("node.downloadsDir=" + path + "/downloads"); - - out.println("logger.dirname=" + path + "/logs"); - - out.println("node.l10n=" + lang); - - out.println("End"); - out.close(); - } - - /** - * Creates the seednodes.fref file in order for the node to bootstrap into the network. - * - * @return Boolean true if the seednodes file exists or was created successfully, false otherwise. - */ - private boolean createConfiguration(InputStream configuration, String filename) { - File f = new File(filename); - if (f.exists()) { - return true; - } - - try { - if (!f.createNewFile()) { - Log.e("Feeenet", "Failed to call createNewFile."); - return false; - } - } catch (IOException e) { - Log.e("Freenet", "Failed to create temporary file."); - Log.e("Freenet", e.getMessage()); - return false; - } - - OutputStream outputStream = null; - try { - outputStream = new FileOutputStream(f); - } catch (FileNotFoundException e) { - Log.e("Freenet", "Failed to create temporary file."); - Log.e("Freenet", e.getMessage()); - return false; - } - - try { - IOUtils.copy(configuration, outputStream); - } catch (IOException e) { - Log.e("Freenet", "Failed to copy temporary file."); - Log.e("Freenet", e.getMessage()); - return false; - } - - return true; - } - - public boolean isInstalled() { - File f = new File(getFreenetIniPath()); - return f.exists(); - } - - // TODO: Implement uninstall - public void uninstall() { - Log.d("Freenet", "Unimplemented uninstall method."); - } - - public String getPath() { - return path; - } - - public String getSeednodesPath() { - return path + "/" + SEEDNODES; - } - - public String getFreenetIniPath() { - return path + "/" + FREENET_INI; - } - - public String getBookmarksPath() { - return path + "/" + BOOKMARKS; - } -} diff --git a/src/main/java/org/freenetproject/mobile/NodeController.java b/src/main/java/org/freenetproject/mobile/NodeController.java new file mode 100644 index 0000000..6882d8b --- /dev/null +++ b/src/main/java/org/freenetproject/mobile/NodeController.java @@ -0,0 +1,74 @@ +package org.freenetproject.mobile; + +import java.io.*; +import java.nio.file.*; + +/** + * Controls fred node (create and modify configuration, start/stop/pause node). + */ +public class NodeController { + private final Config config = new Config(); + + /** + * Loads node configuration or creates one from default + * values under the given path. + * + * @param path Path to fred installation directory + */ + public NodeController(Path path) throws IOException { + config.loadOrDefault(path); + } + + + /** + * Stores the given value under key. + * + * @param key Configuration name. + * @param value Related value. + */ + public void setConfig(String key, String value) { + config.set(key, value); + } + + /** + * Copy file into the node directory as "filename" + * @param filename File name to save as. + * @param file Actual file to copy. + */ + public void setConfig(String filename, File file) throws IOException { + String nodeDir = config.get("node.install.cfgDir"); + Files.copy(file.toPath(), Path.of(nodeDir, filename)); + } + + /** + * Returns the value of the configuration key, defaults to "" + * if the key is not present. + * + * @param key Configuration name. + * @return Related value. + */ + public String getConfig(String key) { + return getConfig(key, ""); + } + + /** + * Returns the value of the configuration key, defaults to defaultValue + * if the key is not present. + * + * @param key Configuration name. + * @param defaultValue Default value to use. + * @return Related value. + */ + public String getConfig(String key, String defaultValue) { + return config.get(key, defaultValue); + } + + public void start() { + } + + public void stop() { + } + + public void pause() { + } +} diff --git a/src/main/resources/freenet.ini b/src/main/resources/freenet.ini new file mode 100644 index 0000000..3cbe995 --- /dev/null +++ b/src/main/resources/freenet.ini @@ -0,0 +1 @@ +node.install.nodeDir= \ No newline at end of file diff --git a/src/test/java/org/freenetproject/mobile/NodeControllerTest.java b/src/test/java/org/freenetproject/mobile/NodeControllerTest.java new file mode 100644 index 0000000..68b7ed0 --- /dev/null +++ b/src/test/java/org/freenetproject/mobile/NodeControllerTest.java @@ -0,0 +1,49 @@ +package org.freenetproject.mobile; + +import org.junit.jupiter.api.*; +import org.junit.jupiter.api.io.*; + +import java.io.*; +import java.nio.file.*; +import java.util.*; + +import static org.junit.jupiter.api.Assertions.*; + +class NodeControllerTest { + @Test + public void installToPath(@TempDir Path path) throws IOException { + NodeController nc = new NodeController(path); + Files.exists(Path.of(path.toString(), "freenet.ini")); + } + + @Test + public void resourceDefault(@TempDir Path path) throws IOException { + NodeController nc = new NodeController(path); + assertEquals(path.toString(), nc.getConfig("node.install.cfgDir")); + assertEquals(path.toString(), nc.getConfig("node.install.cfgDir", "")); + } + + @Test + public void setConfig(@TempDir Path path) throws IOException { + NodeController nc = new NodeController(path); + nc.setConfig("node.install.cfgDir", "/path/to/config"); + assertEquals("/path/to/config", nc.getConfig("node.install.cfgDir")); + } + + @Test + public void setConfigFile(@TempDir Path path, @TempDir File src) throws IOException { + NodeController nc = new NodeController(path); + assertEquals(path.toString(), nc.getConfig("node.install.cfgDir")); + + File seednodes = new File(src, "seednodes.fref"); + List content = Arrays.asList("A", "B", "C"); + Files.write(seednodes.toPath(), content) ; + + nc.setConfig("seednodes.fref", seednodes); + + Path destPath = Path.of(path.toString(), "seednodes.fref"); + assertTrue(Files.exists(destPath)); + + assertEquals(content, Files.readAllLines(destPath)); + } +} \ No newline at end of file From 24b80e580f778786ca89e5f7789e95a098559b9f Mon Sep 17 00:00:00 2001 From: DC* Date: Sun, 25 Apr 2021 01:43:53 +0100 Subject: [PATCH 2/8] Add defaults bookmarks, seednodes and freenet.ini --- build.gradle | 3 + .../org/freenetproject/mobile/Config.java | 6 +- .../org/freenetproject/mobile/Connector.java | 41 +++++ .../freenetproject/mobile/NodeController.java | 56 ++----- .../mobile/NodeControllerImpl.java | 118 ++++++++++++++ .../org/freenetproject/mobile/Runner.java | 138 ---------------- src/main/resources/defaults/bookmarks.dat | 3 + src/main/resources/defaults/freenet.ini | 87 ++++++++++ src/main/resources/defaults/seednodes.fref | 149 ++++++++++++++++++ src/main/resources/freenet.ini | 1 - ...rTest.java => NodeControllerImplTest.java} | 18 ++- 11 files changed, 433 insertions(+), 187 deletions(-) create mode 100644 src/main/java/org/freenetproject/mobile/Connector.java create mode 100644 src/main/java/org/freenetproject/mobile/NodeControllerImpl.java delete mode 100644 src/main/java/org/freenetproject/mobile/Runner.java create mode 100644 src/main/resources/defaults/bookmarks.dat create mode 100644 src/main/resources/defaults/freenet.ini create mode 100644 src/main/resources/defaults/seednodes.fref delete mode 100644 src/main/resources/freenet.ini rename src/test/java/org/freenetproject/mobile/{NodeControllerTest.java => NodeControllerImplTest.java} (66%) diff --git a/build.gradle b/build.gradle index 052926c..b45072f 100644 --- a/build.gradle +++ b/build.gradle @@ -64,6 +64,9 @@ dependencies { // Use JUnit Jupiter API for testing. testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.1' + testImplementation 'org.mockito:mockito-core:2.28.2' + testImplementation 'org.mockito:mockito-junit-jupiter:2.28.2' + // Use JUnit Jupiter Engine for testing. testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' } diff --git a/src/main/java/org/freenetproject/mobile/Config.java b/src/main/java/org/freenetproject/mobile/Config.java index 2816018..a5e8aa2 100644 --- a/src/main/java/org/freenetproject/mobile/Config.java +++ b/src/main/java/org/freenetproject/mobile/Config.java @@ -77,7 +77,11 @@ public void persist() throws IOException { * @return Configured node. */ private Properties getDefaultConfig(Path path) throws IOException { - InputStream defaultConfig = getClass().getClassLoader().getResourceAsStream(properties); + InputStream defaultConfig = getClass() + .getClassLoader() + .getResourceAsStream( + Path.of("defaults", properties).toString() + ); Properties config = new Properties(defaultConfig.read()); String dir = path.toString(); diff --git a/src/main/java/org/freenetproject/mobile/Connector.java b/src/main/java/org/freenetproject/mobile/Connector.java new file mode 100644 index 0000000..b50f1d2 --- /dev/null +++ b/src/main/java/org/freenetproject/mobile/Connector.java @@ -0,0 +1,41 @@ +package org.freenetproject.mobile; + +import net.pterodactylus.fcp.*; +import trikita.log.*; + +import java.io.*; +import java.net.*; + +class Connector { + private static final String DEFAULT_HOST = "127.0.0.1"; + private static final int DEFAULT_PORT = 9481; + private final FcpConnection fcpConnection; + + public Connector(FcpConnection fcpConnection) { + this.fcpConnection = fcpConnection; + } + + public Connector(String host, int port) throws UnknownHostException { + this(new FcpConnection(host, port)); + } + + public Connector() throws UnknownHostException { + this(DEFAULT_HOST, DEFAULT_PORT); + } + + public void connect() throws IOException { + try { + fcpConnection.connect(); + fcpConnection.sendMessage(new ClientHello("freenet-mobile")); + } catch (Exception e) { + Log.i("Freenet", "Failed to connect through FCP. Node shutdown or wrong port: " + e.getMessage()); + throw e; + } + } + + public void modifyConfiguration(String key, String value) throws IOException { + ModifyConfig modifyConfig = new ModifyConfig("identifier"); + modifyConfig.setOption(key, value); + fcpConnection.sendMessage(modifyConfig); + } +} diff --git a/src/main/java/org/freenetproject/mobile/NodeController.java b/src/main/java/org/freenetproject/mobile/NodeController.java index 6882d8b..ecb6445 100644 --- a/src/main/java/org/freenetproject/mobile/NodeController.java +++ b/src/main/java/org/freenetproject/mobile/NodeController.java @@ -1,44 +1,23 @@ package org.freenetproject.mobile; import java.io.*; -import java.nio.file.*; - -/** - * Controls fred node (create and modify configuration, start/stop/pause node). - */ -public class NodeController { - private final Config config = new Config(); - - /** - * Loads node configuration or creates one from default - * values under the given path. - * - * @param path Path to fred installation directory - */ - public NodeController(Path path) throws IOException { - config.loadOrDefault(path); - } - +public interface NodeController { /** - * Stores the given value under key. + * Sends a ModifyConfiguration messages through FCP, if accepted it stores the given value under key. * * @param key Configuration name. * @param value Related value. */ - public void setConfig(String key, String value) { - config.set(key, value); - } + void setConfig(String key, String value) throws IOException; /** - * Copy file into the node directory as "filename" + * Copy file into the node directory as "filename". + * * @param filename File name to save as. * @param file Actual file to copy. */ - public void setConfig(String filename, File file) throws IOException { - String nodeDir = config.get("node.install.cfgDir"); - Files.copy(file.toPath(), Path.of(nodeDir, filename)); - } + void setConfig(String filename, File file) throws IOException; /** * Returns the value of the configuration key, defaults to "" @@ -47,9 +26,7 @@ public void setConfig(String filename, File file) throws IOException { * @param key Configuration name. * @return Related value. */ - public String getConfig(String key) { - return getConfig(key, ""); - } + String getConfig(String key); /** * Returns the value of the configuration key, defaults to defaultValue @@ -59,16 +36,13 @@ public String getConfig(String key) { * @param defaultValue Default value to use. * @return Related value. */ - public String getConfig(String key, String defaultValue) { - return config.get(key, defaultValue); - } - - public void start() { - } - - public void stop() { - } + String getConfig(String key, String defaultValue); - public void pause() { - } + /** + * @param args Arguments to pass to the node + */ + void start(String[] args); + void shutdown() throws IOException; + void pause() throws IOException; + void resume() throws IOException; } diff --git a/src/main/java/org/freenetproject/mobile/NodeControllerImpl.java b/src/main/java/org/freenetproject/mobile/NodeControllerImpl.java new file mode 100644 index 0000000..2c2ae26 --- /dev/null +++ b/src/main/java/org/freenetproject/mobile/NodeControllerImpl.java @@ -0,0 +1,118 @@ +package org.freenetproject.mobile; + +import freenet.node.*; + +import java.io.*; +import java.nio.file.*; + +/** + * Controls fred node (create and modify configuration, start/stop/pause node). + */ +public class NodeControllerImpl implements NodeController { + private final Config config; + private final Connector connector; + + /** + * Loads node configuration or creates one from default + * values under the given path. + * + * @param path Path to fred installation directory + * @param config Configuration wrapper + * @param connector FCP connection wrapper + */ + public NodeControllerImpl(Path path, Config config, Connector connector) throws IOException { + this.config = config; + this.connector = connector; + config.loadOrDefault(path); + } + + /** + * Loads node configuration or creates one from default + * values under the given path. + * + * @param path Path to fred installation directory + */ + public NodeControllerImpl(Path path) throws IOException { + this(path, new Config(), new Connector()); + } + + /** + * Sends a ModifyConfiguration messages through FCP, if accepted it stores the given value under key. + * + * @param key Configuration name. + * @param value Related value. + */ + public void setConfig(String key, String value) throws IOException { + connector.modifyConfiguration(key, value); + config.set(key, value); + } + + /** + * Copy file into the node directory as "filename". + * + * @param filename File name to save as. + * @param file Actual file to copy. + */ + public void setConfig(String filename, File file) throws IOException { + String nodeDir = config.get("node.install.cfgDir"); + Files.copy(file.toPath(), Path.of(nodeDir, filename)); + } + + /** + * Returns the value of the configuration key, defaults to "" + * if the key is not present. + * + * @param key Configuration name. + * @return Related value. + */ + public String getConfig(String key) { + return getConfig(key, ""); + } + + /** + * Returns the value of the configuration key, defaults to defaultValue + * if the key is not present. + * + * @param key Configuration name. + * @param defaultValue Default value to use. + * @return Related value. + */ + public String getConfig(String key, String defaultValue) { + return config.get(key, defaultValue); + } + + /** + * @param args Arguments to pass to the node + */ + public void start(String[] args) { + if (isRunning()) { + return; + } + + NodeStarter.start_osgi(args); + } + + public boolean isRunning() { + try { + connector.connect(); + return true; + } catch (Exception e) { + return false; + } + } + + public void shutdown() { + if (!isRunning()) { + return; + } + NodeStarter.stop_osgi(0); + } + + public void pause() throws IOException { + setConfig("node.opennet.enabled", String.valueOf(false)); + } + + public void resume() throws IOException { + setConfig("node.opennet.enabled", String.valueOf(true)); + } +} diff --git a/src/main/java/org/freenetproject/mobile/Runner.java b/src/main/java/org/freenetproject/mobile/Runner.java deleted file mode 100644 index 729b948..0000000 --- a/src/main/java/org/freenetproject/mobile/Runner.java +++ /dev/null @@ -1,138 +0,0 @@ -package org.freenetproject.mobile; - -import trikita.log.Log; -import net.pterodactylus.fcp.ClientHello; -import net.pterodactylus.fcp.FcpConnection; -import net.pterodactylus.fcp.ModifyConfig; - -import org.bouncycastle.jce.provider.BouncyCastleProvider; - -import java.io.IOException; -import java.security.Security; - -import freenet.node.NodeStarter; - -/** - * Small wrapper around NodeStarter and WrapperManager to start and stop the node. Also is responsible - * for installing the bundled BouncyCastle security provider. - */ -public class Runner { - private static Runner instance = null; - private FcpConnection fcpConnection; - - private Runner() { - Security.removeProvider("BC"); - Security.insertProviderAt(new BouncyCastleProvider(), 1); - } - - public static Runner getInstance() { - if (instance == null) { - instance = new Runner(); - } - - return instance; - } - - /** - * Starts the node through NodeStarter unless it's already started. - * - * @param args Arguments to pass to the NodeStarter - * @return -1 if the node is running or in transition - * -2 if the node is already running - * 0 if the node could be started - */ - public synchronized int start(String[] args) { - if (!isStopped()) { - return -1; - } - - try { - NodeStarter.start_osgi(args); - - } catch (IllegalStateException e) { - return -2; - } - - return 0; - } - - /** - * Stops the node through WrapperManager unless it's already stopped. - * - * @return -1 if the node is stopped or in transition - * -2 if there's an error stopping the node - * 0 if the node could be stopped - */ - public synchronized int stop() { - if (!isStarted()) { - // Already stopped - return 0; - } - - try { - NodeStarter.stop_osgi(0); - } catch (NullPointerException e){ - // Node was already stopped - } catch (Exception e) { - return -2; - } - - return 0; - } - - /** - * - * @return - */ - public synchronized int pause() throws IOException { - enableOpennet(false); - return 0; - } - - /** - * - * @return - */ - public synchronized int resume() throws IOException { - enableOpennet(true); - return 0; - } - - private FcpConnection getConnection() throws IOException { - if (fcpConnection != null) { - return fcpConnection; - } - - try { - fcpConnection = new FcpConnection("127.0.0.1", 9481); - fcpConnection.connect(); - fcpConnection.sendMessage(new ClientHello("freenet-mobile")); - } catch (Exception e) { - fcpConnection = null; - Log.i("Freenet", "Failed to connect through FCP. Node shutdown or wrong port: " + e.getMessage()); - throw e; - } - - return fcpConnection; - } - - private void enableOpennet(Boolean enabled) throws IOException { - ModifyConfig modifyConfig = new ModifyConfig("identifier"); - modifyConfig.setOption("node.opennet.enabled", enabled.toString()); - getConnection().sendMessage(modifyConfig); - } - - public Boolean isStarted() { - try { - getConnection(); - return true; - } catch (Exception e) { - return false; - } - } - - public Boolean isStopped() { - return !isStarted(); - } -} - diff --git a/src/main/resources/defaults/bookmarks.dat b/src/main/resources/defaults/bookmarks.dat new file mode 100644 index 0000000..60b95ce --- /dev/null +++ b/src/main/resources/defaults/bookmarks.dat @@ -0,0 +1,3 @@ +BookmarkCategory=4 +Version=1 +End \ No newline at end of file diff --git a/src/main/resources/defaults/freenet.ini b/src/main/resources/defaults/freenet.ini new file mode 100644 index 0000000..0ef2852 --- /dev/null +++ b/src/main/resources/defaults/freenet.ini @@ -0,0 +1,87 @@ +console.ssl=false +console.enabled=false +security-levels.networkThreatLevel=LOW +security-levels.physicalThreatLevel=NORMAL +fproxy.hasCompletedWizard=true +fproxy.allowedHosts=127.0.0.1,0:0:0:0:0:0:0:1 +fproxy.showPanicButton=false +fproxy.publicGatewayMode=false +fproxy.port=8888 +fproxy.noConfirmPanic=false +fproxy.enableCachingForChkAndSskKeys=false +fproxy.ssl=false +fproxy.enabled=true +fproxy.bindTo=127.0.0.1,0:0:0:0:0:0:0:1 +fproxy.allowedHostsFullAccess=127.0.0.1,0:0:0:0:0:0:0:1 +logger.maxZippedLogsSize=10485760 +logger.priority=WARNING +pluginmanager.enabled=false +ssl.sslKeyStorePass=freenet +ssl.sslKeyPass=freenet +ssl.sslKeyStore=datastore/certs +ssl.sslEnable=false +toadletsymlinker.symlinks=/sl/search/%23/plugins/plugins.Librarian/;/sl/gallery/%23/plugins/plugins.TestGallery/ +node.probeLinkLengths=true +node.slashdotCacheSize=10485760 +node.minDiskFreeShortTerm=536870912 +node.probeStoreSize=true +node.uploadAllowedDirs=all +node.outputBandwidthLimit=15360 +node.probeBuild=true +node.maxPacketSize=1280 +node.paddDataPackets=false +node.connectionSpeedDetection=false +node.probeIdentifier=true +node.probeOverallBulkOutputCapacityUsage=true +node.probeBandwidth=false +node.minDiskFreeLongTerm=1073741824 +node.probeLocation=true +node.storeSize=33554432 +node.probeUptime=true +node.downloadAllowedDirs=all +node.storeType=ram +node.assumeNATed=true +node.minimumCompressionPercentage=10 +node.clientCacheSize=10485760 +node.peersOffersDismissed=false +node.maxTimeForSingleCompressor=1200k +node.probeRejectStats=true +node.amountOfDataToCheckCompressionRatio=8388608 +node.bindTo=0.0.0.0 +node.clientCacheType=ram +node.inputBandwidthLimit=-1 +node.listenPort=25552 +node.storePreallocate=true +fcp.allowedHosts=127.0.0.1,0:0:0:0:0:0:0:1 +fcp.port=9481 +fcp.ssl=false +fcp.bindTo=127.0.0.1,0:0:0:0:0:0:0:1 +fcp.allowedHostsFullAccess=127.0.0.1,0:0:0:0:0:0:0:1 +node.updater.updateSeednodes=false +node.updater.updateInstallers=false +node.updater.URI=USK@ugWS2VICgMcQ5ptmEE1mAvHgUn2OSCOogJIUAvbL090,ZKO1pZRI9oaBuBQuWFL4bK3K0blvmEdqYgiIJF5GcjQ,AQACAAE/jar/1485 +node.updater.autoupdate=false +node.updater.enabled=false +node.opennet.paddDataPackets=false +node.opennet.oneConnectionPerIP=false +node.opennet.assumeNATed=true +node.opennet.acceptSeedConnections=false +node.opennet.listenPort=41027 +node.opennet.enabled=true +node.opennet.bindTo=0.0.0.0 +node.load.subMaxPingTime=700 +node.load.threadLimit=500 +node.load.maxPingTime=1500 +node.skipWrapperWarning=true +node.install.cfgDir=. +node.install.userDir=. +node.install.nodeDir=. +node.install.runDir=. +node.install.storeDir=./pathstore +node.install.tempDir=./temp +node.install.pluginDir=./plugins +node.install.pluginStoresDir=./plugin-path +node.install.persistentTempDir=./persistent-temp +node.masterKeyFile=./master.keys +node.downloadsDir=./downloads +logger.dirname=dir/logs \ No newline at end of file diff --git a/src/main/resources/defaults/seednodes.fref b/src/main/resources/defaults/seednodes.fref new file mode 100644 index 0000000..1d1a24e --- /dev/null +++ b/src/main/resources/defaults/seednodes.fref @@ -0,0 +1,149 @@ +identity=t0uY~zsjQMfuD2IKtJhKZv5AfgAUdyyCgdp7fzFFXvE +lastGoodVersion==RnJlZCwwLjcsMS4wLDE0NzU +location==MC43MTYzNjgwNDQ4NjAyOTQy +opennet=true +sigP256=MEYCIQCcJWZEwT7YNAwIY08ZEFbMGgb2hFZF2Uhrjuyu7H-6PgIhAPvakaT-AFIb-hhTOjo3TELhJ3FQaS5VaubXYDbCTCdu +version==RnJlZCwwLjcsMS4wLDE0Nzk +ark.number=91 +ark.pubURI=SSK@62CCpYejO1jeoLy7b~01Zu2iRQPJfa8NuJ4Zgz6WSV4,mveCh0IkiER8KeHV5S8i2ooBAOB1WYGEKk3M3SktUYU,AQACAAE/ark +auth.negTypes=10 +ecdsa.P256.pub=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnwm~Hm2yGWRCfhmX2tJu3M-2cmaKIfsS9oXJTmdZ6kRq3tU~bBwFQY4Fabb44q~vXyIq9O4vNysvtGGV5qHXpA +physical.udp==ZnJlZW5ldC5udWxsdm9pZC5tZTo2MTQ1NTsyNjA3OjUzMDA6MjAxOjMwMDA6MDowOjA6MTdkMzo2MTQ1NTsxNDkuNTYuNDUuMjAwOjYxNDU1 +End + +identity=AMJNW1zpC2TSVeyRI~rLq8Yb~9py2NSNefblrlECx2M +lastGoodVersion==RnJlZCwwLjcsMS4wLDE0NzU +location==MC4zMTIzNTIxNzYwMjI4MDg3NA +opennet=true +sigP256=MEYCIQDqDwNkkVNtEqRWKlLFyXnfDnZpR4KJUgUH74xiMVqYxAIhAKFlnEygH0T5reHpIDGGTUyk~BnZaBZGFeF4YMo9WXsc +version==RnJlZCwwLjcsMS4wLDE0NzU +ark.number=1871 +ark.pubURI=SSK@OYfh3dlhh4CER4IjZPq6e06ug8ipehlYdS4pSnE00Tw,i3axPVzOkl7Iy568wzqTXAESYjTiKltripHlK4hqTJk,AQACAAE/ark +auth.negTypes=10 +ecdsa.P256.pub=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmaH8K8bKR8Hvvhxjr-TPUe4R4yItj-Dcr5vfmwg1j0wu4mWD10Z5S9rN2ZUYNFYoiwwFd8LdAGSRDtQFoHE~3g +physical.udp==ZDYuZ251dGVsbGEyLmluZm86MzI2ODU7ODUuMjEyLjMuMTMwOjMyNjg1Ozg1LjIxMi4yNi4yNDI6MzI2ODU7ODUuMjEyLjI2LjI0Mjo2MTk3OA +End + +identity=7EoZpRvanX5WdT1aWg82SZjf0wVQd-Xmg8KAPT-sXDE +lastGoodVersion==RnJlZCwwLjcsMS4wLDE0NjY +location==MC4wMDE5NTUyMDQwNDc0MTQzMzg0 +opennet=true +sig=008cc800f6eb9980d158335a65fa329607d5a4e9dae11cb5ce2cefeb687822ca6a,0090d4e3ce64ee8bd25d07b76dd1eb30b873d2fca6299100fa2a5776783559d85e +sigP256=MEUCIQD2MgvLdSf8PKpoMswU8spq~QEM-zvRBOlPs2hsRKzjaAIgDE1orFTZvENtgoCpqRa4M~iybl4tf99PB3QbExJviMM +version==RnJlZCwwLjcsMS4wLDE0Njc +ark.number=225 +ark.pubURI=SSK@UeoCoRROTtuyuZqABq2-Sm1gZWfivCANAaCV9VzAdt8,wdbeYeRBh4uz2aexTbjUJ0VpYlZNMihn9lTM1w~qdEc,AQACAAE/ark +auth.negTypes==OTsxMA +dsaGroup.g=UaRatnDByf0QvTlaaAXTMzn1Z15LDTXe-J~gOqXCv0zpz83CVngSkb--bVRuZ9R65OFg~ATKcuw8VJJwn1~A9p5jRt2NPj2EM7bu72O85-mFdBhcav8WHJtTbXb4cxNzZaQkbPQUv~gEnuEeMTc80KZVjilQ7wlTIM6GIY~ZJVHMKSIkEU87YBRtIt1R~BJcnaDAKBJv~oXv1PS-6iwQRFMynMEmipfpqDXBTkqaQ8ahiGWA41rY8d4jDhrzIgjvkzfxkkcCpFFOldwW8w8MEecUoRLuhKnY1sm8nnTjNlYLtc1Okeq-ba0mvwygSAf4wxovwY6n1Fuqt8yZe1PDVg +dsaGroup.p=AIYIrE9VNhM38qPjirGGT-PJjWZBHY0q-JxSYyDFQfZQeOhrx4SUpdc~SppnWD~UHymT7WyX28eV3YjwkVyc~--H5Tc83hPjx8qQc7kQbrMb~CJy7QBX~YSocKGfioO-pwfRZEDDguYtOJBHPqeenVDErGsfHTCxDDKgL2hYM8Ynj8Kes0OcUzOIVhShFSGbOAjJKjeg82XNXmG1hhdh2tnv8M4jJQ9ViEj425Mrh6O9jXovfPmcdYIr3C~3waHXjQvPgUiK4N5Saf~FOri48fK-PmwFZFc-YSgI9o2-70nVybSnBXlM96QkzU6x4CYFUuZ7-B~je0ofeLdX7xhehuk +dsaGroup.q=ALFDNoq81R9Y1kQNVBc5kzmk0VvvCWosXY5t9E9S1tN5 +dsaPubKey.y=Q-RXw568J3~j6i5W4Nr2oIm~Vejx8dClz7ULBJGH2RWdmlUVWE~8Jg4FJeTwYItawFDAx0DadKsT-MsVKVINyPQ4i8u9MDybkp~ELiRNdqa3px09QkPH28kLSKenhj7uRpGuiHHxh0Pw~sD4mLbBT1J7XV57rQ7he3wmcNHf0Jdg-WnKnju7ref8BjDs28HeV59bfub1qGNvJxPrjHUT4O73Z2TUepqsJsvEAas1E-~sb9W64OVksPcKJ8oN45ptFHxsQ8o6mwexSUHHiwAX-viu5gXpCw5NzvyGtAAtJDLfebEN3X9BPHzkl2wX4U94Rd4xmuxHU2jxl~hPMujJpg +ecdsa.P256.pub=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE~Eo5a~5zfJhSnkNx2VpJnEFWpjwjmgO7-Tt-4rgDJ1LwxAKKKxwbSlJDUTkd0RMGDQCGxOedvYrOclYuF3-FjQ +physical.udp==ZnJlZW5ldC5uZXJkeWJsb2tlLm5ldDozNDE1OzI1LjE1NC4xNjguMTY0OjM0MTU7MjEyLjE1OS4xNzcuMTk4OjM0MTU +End + +identity=6W8b11Iy5jjW2WmLN-wQIPcwnzHLdsrKDTbpO2nbQoA +lastGoodVersion==RnJlZCwwLjcsMS4wLDE0NjY +location==MC40NTY1NDI5OTIzMTY0OTE4Nw +opennet=true +sig=3b83f7a1a0a7f880d06a4870737d6d2e33155ff41672110c1ae4cdfd9757a3d2,4cb9f21fba50a9b68b3f5b8985f0ce961ed98575dab4b1dc30dd317ac57c32f9 +sigP256=MEUCIA9j0gwf5qQdXO-cgXN8RX9JmGZuShkRilHpdrY4oBCcAiEAwEQi48X-g9vJXJ9E0SDJpCkj~YOIIcLfVNpcpyXXKOE +version==RnJlZCwwLjcsMS4wLDE0NjY +ark.number=257 +ark.pubURI=SSK@ZiyMbzGNd09DCasOpcV7nSdsd99EyCS6ETU1hHmbH0k,i7Qi1zl-MpkiWg7MtouORGZsXaGx0wkDswG-DAmU3s8,AQACAAE/ark +auth.negTypes==OTsxMA +dsaGroup.g=UaRatnDByf0QvTlaaAXTMzn1Z15LDTXe-J~gOqXCv0zpz83CVngSkb--bVRuZ9R65OFg~ATKcuw8VJJwn1~A9p5jRt2NPj2EM7bu72O85-mFdBhcav8WHJtTbXb4cxNzZaQkbPQUv~gEnuEeMTc80KZVjilQ7wlTIM6GIY~ZJVHMKSIkEU87YBRtIt1R~BJcnaDAKBJv~oXv1PS-6iwQRFMynMEmipfpqDXBTkqaQ8ahiGWA41rY8d4jDhrzIgjvkzfxkkcCpFFOldwW8w8MEecUoRLuhKnY1sm8nnTjNlYLtc1Okeq-ba0mvwygSAf4wxovwY6n1Fuqt8yZe1PDVg +dsaGroup.p=AIYIrE9VNhM38qPjirGGT-PJjWZBHY0q-JxSYyDFQfZQeOhrx4SUpdc~SppnWD~UHymT7WyX28eV3YjwkVyc~--H5Tc83hPjx8qQc7kQbrMb~CJy7QBX~YSocKGfioO-pwfRZEDDguYtOJBHPqeenVDErGsfHTCxDDKgL2hYM8Ynj8Kes0OcUzOIVhShFSGbOAjJKjeg82XNXmG1hhdh2tnv8M4jJQ9ViEj425Mrh6O9jXovfPmcdYIr3C~3waHXjQvPgUiK4N5Saf~FOri48fK-PmwFZFc-YSgI9o2-70nVybSnBXlM96QkzU6x4CYFUuZ7-B~je0ofeLdX7xhehuk +dsaGroup.q=ALFDNoq81R9Y1kQNVBc5kzmk0VvvCWosXY5t9E9S1tN5 +dsaPubKey.y=fAkSEP5sc4QwSD9OhES1jxJ8PqnUIMaCCJ6Rdl8uHtYKv2jDTlBrhnxs7Waxpowtxjeuk~GMkq-AoJkHbtfqMfe1otpTRO6l0zDGpkkw1MCxSGGcHPAb2WD1XVicixuIS~qdyRCDl~odaT2yQVASUC9nQEsurON7~ZhIsVMC18nV05f0BL4Z4clI-9w2FWaVbJVCjbnUJAEvErD4~yFvJ9z1EYFEjSDycKFQn9Lyj8czjv7UaInsRgJYm-5S-xoCjytVJ328Co8C71PvyhXElDyt03odA2MWfQEsi2NDBY90kY1zKV7u6366~e~AxZ0uuu5M8NG0wKHbaOND2xOMKA +ecdsa.P256.pub=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEak4~fhdD5gTCnOkmyfJNt95yYtY3NkoRB-x6aMydjZT4D~Ppjh5o~NX7NEyI9ShiPj6S5HAoDnYlbCOKuqdjTw +physical.udp==NzguNDYuNjMuMjA6MTI4Ng +End + +identity=2vh9tO8Z8B9djfsEDf0~5J~sw9paO0T1gNy2eaG7BF4 +lastGoodVersion==RnJlZCwwLjcsMS4wLDE0NzU +location==MC4yMTI2NjU4MDQ0NjA0MDA5NQ +opennet=true +sigP256=MEUCIQDxOq56sYIA0VSEOA08rummiL54NY7mIbm~NVPZNH1zOwIgfVOjKTL3FNTTxsupj4JenUvMtPgGbYoj18t9Fu7pbrU +version==RnJlZCwwLjcsMS4wLDE0ODQ +ark.number=583 +ark.pubURI=SSK@ouMmz8KcGUbci~qdLTJDFSg~RkaV0vFHxDCJsLuzWMI,0vy-y7yDa5vRtmA475LIX-5KqDPmy9xattXBc1QgSrk,AQACAAE/ark +auth.negTypes=10 +ecdsa.P256.pub=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9r4SocX5yq1icEMJn8c85JlJM0i6ifDbEypEdE3WMu6VoDxcCGyElZLpvhtMRzAzsin6kTHvtTi-A~uLGb6zAg +physical.udp==a2F0aXNrYS5vcmc6NDk1MzI7ODAuNzUuMTAzLjg5OjQ5NTMy +End + +identity=skCoNetjkg0rBksZE-cvoZ9~IXhno6RW5SDtAO8TNXs +lastGoodVersion==RnJlZCwwLjcsMS4wLDE0NjY +location==MC4zMjc3NTc2NTUzNTY1NTg5 +opennet=true +sig=582ffa8f1b3cfa1297c1a63f24fb808ac716b372f787c298785bdecebe17b4b4,00834cd587d3bb2d7557f323fe73b8bc05af1f91371370dce3359e2feef07c9c81 +sigP256=MEUCIQC4a0rVLctowjUMTmspQvghbptUotsELLfmJzu69CaHGQIgbqtH0X46DOqdod99BTIYqEgY4nVvTVP1-LbF3LNXJuA +version==RnJlZCwwLjcsMS4wLDE0Njc +ark.number=2409 +ark.pubURI=SSK@tDjqJMxBPaRzOTQE~r3LAkL~jgxql637l1MY59wyxrw,CeTvd0XTtazWIA73Itk~h4QmmxHYhFFNQk3sBmjgLns,AQACAAE/ark +auth.negTypes==OTsxMA +dsaGroup.g=UaRatnDByf0QvTlaaAXTMzn1Z15LDTXe-J~gOqXCv0zpz83CVngSkb--bVRuZ9R65OFg~ATKcuw8VJJwn1~A9p5jRt2NPj2EM7bu72O85-mFdBhcav8WHJtTbXb4cxNzZaQkbPQUv~gEnuEeMTc80KZVjilQ7wlTIM6GIY~ZJVHMKSIkEU87YBRtIt1R~BJcnaDAKBJv~oXv1PS-6iwQRFMynMEmipfpqDXBTkqaQ8ahiGWA41rY8d4jDhrzIgjvkzfxkkcCpFFOldwW8w8MEecUoRLuhKnY1sm8nnTjNlYLtc1Okeq-ba0mvwygSAf4wxovwY6n1Fuqt8yZe1PDVg +dsaGroup.p=AIYIrE9VNhM38qPjirGGT-PJjWZBHY0q-JxSYyDFQfZQeOhrx4SUpdc~SppnWD~UHymT7WyX28eV3YjwkVyc~--H5Tc83hPjx8qQc7kQbrMb~CJy7QBX~YSocKGfioO-pwfRZEDDguYtOJBHPqeenVDErGsfHTCxDDKgL2hYM8Ynj8Kes0OcUzOIVhShFSGbOAjJKjeg82XNXmG1hhdh2tnv8M4jJQ9ViEj425Mrh6O9jXovfPmcdYIr3C~3waHXjQvPgUiK4N5Saf~FOri48fK-PmwFZFc-YSgI9o2-70nVybSnBXlM96QkzU6x4CYFUuZ7-B~je0ofeLdX7xhehuk +dsaGroup.q=ALFDNoq81R9Y1kQNVBc5kzmk0VvvCWosXY5t9E9S1tN5 +dsaPubKey.y=HHGmoASQb6hDv~CCQX38DFyWQvoihXmdcCT8dUFwRdVXEdBBplxZTC7JLIh9Ct34aEPThCE5VHz~Y~nEkO7GcP1wFFbnIqSwdP8hbRtuGoFauWWpPIsUofo-WYay8J1TF-~Mmb3lKuyp4HbkGaFdFiQzOK~~78wsPnuVYpfPXXa2w~c6Q2hrKENbdq~jU0Ili4t1CiGkZ6-aQaw5B6PIZWe10By~AcvLT1vCYBhB0W~FXHFDPgJ9hN8yga-NxPzkTMX58pwxu6UcRSZ2Hl3lSvfhAsNYGS-VPrA7ejKKyIjxnI7vJi7FO6Ac2a2p1nzxaxecTVxsJvCUSne4W-yc3g +ecdsa.P256.pub=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAI5mk35~trhSVzDEJ8~ylQHuxvZTTcq7Df0eD7VaMeMtSLcjkbXR~xiNF~l~RMbyo9Qe6qToH2zDZiqLy6LoWQ +physical.udp==Zm5ldC5tb29vLmNvbToxNDQxNjs5NS4yNS4xMjUuMjMxOjE0NDE2OzEwMC44MC4yMi4xMjQ6MTQ0MTY +End + +identity=FuS~37Rro5JRvwfLfJQlWSyE4dlNsXFohoNACS6c6dE +lastGoodVersion==RnJlZCwwLjcsMS4wLDE0NjY +location==MC44MTcxODkxMzQ5NjAyNTY2 +opennet=true +sig=0d0404194092fa17b06e8198236c116c28d87c75dbc7934e61912d67247258b5,0086fe4c23980aa702d5395eca70250e95e3173c620f056493c489687a9579e041 +sigP256=MEYCIQD7mKSoQAfFcmfCCTYGa-ikXA6P8jL4RC4XD-usHbgFSQIhAJIprPAJvPemykB5vLVZHVUMrVniZ7dBgR2R5qzBWjDW +version==RnJlZCwwLjcsMS4wLDE0Njc +ark.number=1063 +ark.pubURI=SSK@cmYYw-EA8wiQabmQzezvmETmuawJj2FNfjpboI9QUaI,2PI1w1PlKkIo5ujBxTZWVEhfUqAO~4ZqIujjbIZ300A,AQACAAE/ark +auth.negTypes==OTsxMA +dsaGroup.g=UaRatnDByf0QvTlaaAXTMzn1Z15LDTXe-J~gOqXCv0zpz83CVngSkb--bVRuZ9R65OFg~ATKcuw8VJJwn1~A9p5jRt2NPj2EM7bu72O85-mFdBhcav8WHJtTbXb4cxNzZaQkbPQUv~gEnuEeMTc80KZVjilQ7wlTIM6GIY~ZJVHMKSIkEU87YBRtIt1R~BJcnaDAKBJv~oXv1PS-6iwQRFMynMEmipfpqDXBTkqaQ8ahiGWA41rY8d4jDhrzIgjvkzfxkkcCpFFOldwW8w8MEecUoRLuhKnY1sm8nnTjNlYLtc1Okeq-ba0mvwygSAf4wxovwY6n1Fuqt8yZe1PDVg +dsaGroup.p=AIYIrE9VNhM38qPjirGGT-PJjWZBHY0q-JxSYyDFQfZQeOhrx4SUpdc~SppnWD~UHymT7WyX28eV3YjwkVyc~--H5Tc83hPjx8qQc7kQbrMb~CJy7QBX~YSocKGfioO-pwfRZEDDguYtOJBHPqeenVDErGsfHTCxDDKgL2hYM8Ynj8Kes0OcUzOIVhShFSGbOAjJKjeg82XNXmG1hhdh2tnv8M4jJQ9ViEj425Mrh6O9jXovfPmcdYIr3C~3waHXjQvPgUiK4N5Saf~FOri48fK-PmwFZFc-YSgI9o2-70nVybSnBXlM96QkzU6x4CYFUuZ7-B~je0ofeLdX7xhehuk +dsaGroup.q=ALFDNoq81R9Y1kQNVBc5kzmk0VvvCWosXY5t9E9S1tN5 +dsaPubKey.y=Uljye0KvEBtQ6xCaj6VhCEl-z4C6b7if0qSzvx6aqn0rxOeFVnbEKAZwHu~fLA8mpUwAhFLw9vfrE6U0ni5GFwzRnppP2kAg4XHgOgK8EVr-yK1pZ5UkmXsD5MmFNTSsPeapi1QqfVgO0Meq16jpFZsVyENtFZieB7CRlHmns9rkwp1iMuI1OiMktjkf2coTBAifkAQs0QHntOUmOl5fYSCF4pdyE1ZLJt6NFBqe7eJ5ng-f5FUIcXUDdI-aBWYj3viOqa0fJKN637IQh5PoF-A-ZWsEWzG2GGlo6hWf-wgTjTCAqr1MfmpQOTFaJZo1pkQGIsArcBFC1eysO4OwrQ +ecdsa.P256.pub=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnFZUXRtj6eaHBCZqhilMRsnLDqCTRIkPDm5zpfjNdL7oOVcq07QuVeyyJAf9v6vOrjlzxv2w194i3ger31-YLA +physical.udp==MTQ5LjE1NC4xNTkuMTcyOjYxMDc4 +End + +identity=-X2GrYYfJsKd0nAEMN6Bm79w~nljbKbR-x09eF8Rj2o +lastGoodVersion==RnJlZCwwLjcsMS4wLDE0NzU +location==MC4xNTY0OTk4NTYyODUzNTMxMg +opennet=true +sigP256=MEUCIQCERzO3ox7n0LrZzCIVvly9tGURjAstcQzApuwGxP-PwgIgLZUJajhqVKydkcFmY9H3gjlULUyy8m8acd2AY-iYcHk +version==RnJlZCwwLjcsMS4wLDE0ODU +ark.number=157 +ark.pubURI=SSK@f4zWd-e3t8Hc2wvkhGJdull2Iv1qCojENF3lN0Wt9L8,utyaE3HYWhIz-SZS745ONrDMt2yRo8BpEGoh-NGCjoY,AQACAAE/ark +auth.negTypes=10 +ecdsa.P256.pub=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9AhL1-WGRb0O8HYFxj0VeyYiGgCSHmTcO-fJ4ep6-1CnWlPv7Gxju~tVqNHNkTLQMlwCGYbFj2~lIXoIA5~zPQ +physical.udp==MTM4LjE5Ny4xNzMuNjg6Mjc0NTk +End + +identity=9KMO9Hrd7Jc4r8DCKCu2ZqlAZjAWCB5mhLi~A5n7wSM +lastGoodVersion==RnJlZCwwLjcsMS4wLDE0NzU +location==MC40NDgyODA1MDg0MDQ4ODIx +opennet=true +sigP256=MEYCIQC1nJdavubtomqtwI1ZUKWi9j2UFw4EozU8lghK2lJDzAIhANzuHi9mCd7eReURX1i3AQIiwv9LAgKBrJTL7hZG1-~J +version==RnJlZCwwLjcsMS4wLDE0ODQ +ark.number=5 +ark.pubURI=SSK@BeeoOzd-7PE~YFHiaVKLsYZoVT9BcbK-1Wcnkv4YlO8,3B~RxAwHwtORzVEOU71kiKlt1ci590T-EhycWoivTmA,AQACAAE/ark +auth.negTypes=10 +ecdsa.P256.pub=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3oQ0lNMwEdKWApYyeNkDBfgzOXi5-eFUpoG7BomRHYGaWFSdWB4nTCZXrFUb1yJ4rl-d6yW98NynaMXGIDlCfg +physical.udp==MTk1LjEzNS4xOTQuMTM1LDIwMDE6Njc4OjdkYzoxMzU6MDowOmNhZmU6Y2FmZTo1OTc0NzsxOTUuMTM1LjE5NC4xMzU6NTk3NDc +End + +identity=y885-nLCItbw5qD7Qq5xHKjwTm9RU6wrXM5t3BmCnUY +lastGoodVersion==RnJlZCwwLjcsMS4wLDE0NzU +location==MC42MzI1NTYxNDE0MDg0NjQ3 +opennet=true +sigP256=MEYCIQDYMGfsSpibZ0uKgdKQ3AWb8RHi5yvAPmQMhkGFci9VWwIhAM3SoawxuQgjArl2aRwDerTeHQ27KijKDZBNst58BozO +version==RnJlZCwwLjcsMS4wLDE0ODQ +ark.number=6 +ark.pubURI=SSK@AR2Fo2FDtZz~uYQzwopDgpCiHeCpzKXysohBhGnP9uQ,tJBUBJxaSGwx4DkYfTNiU5~9voibnV1jjgTHE2hHTOU,AQACAAE/ark +auth.negTypes=10 +ecdsa.P256.pub=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEiKkpl1ukJO2eBn7O3QbY4RL7Iqy26Sa75xHnI2dlDuEkZMgBn2zPn0li16j6J-0hN8cxrfw9P~VARBSXPoNuOg +physical.udp==MTk1LjEzNS4xOTQuNywyMDAxOjY3ODo3ZGM6NzowOjA6MDoyOjYzNjEwOzE5NS4xMzUuMTk0Ljc6NjM2MTA7MjAwMTo2Nzg6N2RjOjc6MDowOjA6Mjo2MzYxMA +End diff --git a/src/main/resources/freenet.ini b/src/main/resources/freenet.ini deleted file mode 100644 index 3cbe995..0000000 --- a/src/main/resources/freenet.ini +++ /dev/null @@ -1 +0,0 @@ -node.install.nodeDir= \ No newline at end of file diff --git a/src/test/java/org/freenetproject/mobile/NodeControllerTest.java b/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java similarity index 66% rename from src/test/java/org/freenetproject/mobile/NodeControllerTest.java rename to src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java index 68b7ed0..84130d1 100644 --- a/src/test/java/org/freenetproject/mobile/NodeControllerTest.java +++ b/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java @@ -1,7 +1,10 @@ package org.freenetproject.mobile; import org.junit.jupiter.api.*; +import org.junit.jupiter.api.extension.*; import org.junit.jupiter.api.io.*; +import org.mockito.*; +import org.mockito.junit.jupiter.*; import java.io.*; import java.nio.file.*; @@ -9,30 +12,33 @@ import static org.junit.jupiter.api.Assertions.*; -class NodeControllerTest { +@ExtendWith(MockitoExtension.class) +class NodeControllerImplTest { @Test public void installToPath(@TempDir Path path) throws IOException { - NodeController nc = new NodeController(path); - Files.exists(Path.of(path.toString(), "freenet.ini")); + NodeController nc = new NodeControllerImpl(path); + Files.exists(Path.of(path.toString(), "defaults/freenet.ini")); } @Test public void resourceDefault(@TempDir Path path) throws IOException { - NodeController nc = new NodeController(path); + NodeControllerImpl nc = new NodeControllerImpl(path); assertEquals(path.toString(), nc.getConfig("node.install.cfgDir")); assertEquals(path.toString(), nc.getConfig("node.install.cfgDir", "")); } @Test public void setConfig(@TempDir Path path) throws IOException { - NodeController nc = new NodeController(path); + Connector mockConnector = Mockito.mock(Connector.class); + NodeControllerImpl nc = new NodeControllerImpl(path, new Config(), mockConnector); nc.setConfig("node.install.cfgDir", "/path/to/config"); assertEquals("/path/to/config", nc.getConfig("node.install.cfgDir")); } @Test public void setConfigFile(@TempDir Path path, @TempDir File src) throws IOException { - NodeController nc = new NodeController(path); + Connector mockConnector = Mockito.mock(Connector.class); + NodeControllerImpl nc = new NodeControllerImpl(path, new Config(), mockConnector); assertEquals(path.toString(), nc.getConfig("node.install.cfgDir")); File seednodes = new File(src, "seednodes.fref"); From 9c84fa5bf09c6e193fc2b6c59d2af89e734a32eb Mon Sep 17 00:00:00 2001 From: DC* Date: Sun, 25 Apr 2021 01:59:00 +0100 Subject: [PATCH 3/8] Add missing docblocks and upgrade version --- build.gradle | 2 +- .../org/freenetproject/mobile/NodeController.java | 14 ++++++++++++++ .../freenetproject/mobile/NodeControllerImpl.java | 3 +++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b45072f..4ea7186 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'org.freenetproject.mobile' -version = '0.6' +version = '1.0' task sourcesJar(type: Jar) { from sourceSets.main.allJava diff --git a/src/main/java/org/freenetproject/mobile/NodeController.java b/src/main/java/org/freenetproject/mobile/NodeController.java index ecb6445..6348ddd 100644 --- a/src/main/java/org/freenetproject/mobile/NodeController.java +++ b/src/main/java/org/freenetproject/mobile/NodeController.java @@ -8,6 +8,7 @@ public interface NodeController { * * @param key Configuration name. * @param value Related value. + * @throws IOException Fails to write config. */ void setConfig(String key, String value) throws IOException; @@ -16,6 +17,7 @@ public interface NodeController { * * @param filename File name to save as. * @param file Actual file to copy. + * @throws IOException Fails to write config. */ void setConfig(String filename, File file) throws IOException; @@ -42,7 +44,19 @@ public interface NodeController { * @param args Arguments to pass to the node */ void start(String[] args); + + /** + * @throws IOException Fails to persist configuration. + */ void shutdown() throws IOException; + + /** + * @throws IOException Fails to communicate with FCP. + */ void pause() throws IOException; + + /** + * @throws IOException Fails to communicate with FCP. + */ void resume() throws IOException; } diff --git a/src/main/java/org/freenetproject/mobile/NodeControllerImpl.java b/src/main/java/org/freenetproject/mobile/NodeControllerImpl.java index 2c2ae26..44db2d3 100644 --- a/src/main/java/org/freenetproject/mobile/NodeControllerImpl.java +++ b/src/main/java/org/freenetproject/mobile/NodeControllerImpl.java @@ -19,6 +19,7 @@ public class NodeControllerImpl implements NodeController { * @param path Path to fred installation directory * @param config Configuration wrapper * @param connector FCP connection wrapper + * @throws IOException Fails to open configuration. */ public NodeControllerImpl(Path path, Config config, Connector connector) throws IOException { this.config = config; @@ -31,6 +32,7 @@ public NodeControllerImpl(Path path, Config config, Connector connector) throws * values under the given path. * * @param path Path to fred installation directory + * @throws IOException Fails to open configuration. */ public NodeControllerImpl(Path path) throws IOException { this(path, new Config(), new Connector()); @@ -41,6 +43,7 @@ public NodeControllerImpl(Path path) throws IOException { * * @param key Configuration name. * @param value Related value. + * @throws IOException Fails to set configuration. */ public void setConfig(String key, String value) throws IOException { connector.modifyConfiguration(key, value); From 152bcb272a5daec0f76eaee11a0be82df2b687d4 Mon Sep 17 00:00:00 2001 From: DC* Date: Sun, 25 Apr 2021 03:00:05 +0100 Subject: [PATCH 4/8] Java 8 support --- build.gradle | 6 ++++++ .../org/freenetproject/mobile/Config.java | 12 +++++++----- .../freenetproject/mobile/NodeController.java | 10 ++++++---- .../mobile/NodeControllerImpl.java | 19 ++++++++++++++----- .../mobile/NodeControllerImplTest.java | 4 ++-- 5 files changed, 35 insertions(+), 16 deletions(-) diff --git a/build.gradle b/build.gradle index 4ea7186..823f281 100644 --- a/build.gradle +++ b/build.gradle @@ -3,6 +3,12 @@ plugins { id 'maven-publish' } +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } +} + group = 'org.freenetproject.mobile' version = '1.0' diff --git a/src/main/java/org/freenetproject/mobile/Config.java b/src/main/java/org/freenetproject/mobile/Config.java index a5e8aa2..7c2d876 100644 --- a/src/main/java/org/freenetproject/mobile/Config.java +++ b/src/main/java/org/freenetproject/mobile/Config.java @@ -49,11 +49,12 @@ public String get(String key, String defaultValue) { * @param path Path where the node is located. */ public void loadOrDefault(Path path) throws IOException { - Path config = Path.of(path.toString(), properties); + Path config = Paths.get(path.toString(), properties); if (Files.exists(config)) { InputStream is = new FileInputStream(config.toFile()); - this.config = new Properties(is.read()); + this.config = new Properties(); + this.config.load(is); return; } @@ -65,7 +66,7 @@ public void loadOrDefault(Path path) throws IOException { * Stores the current configuration to filesystem. */ public void persist() throws IOException { - File dest = Path.of(this.config.getProperty("node.install.cfgDir"), properties).toFile(); + File dest = Paths.get(this.config.getProperty("node.install.cfgDir"), properties).toFile(); FileWriter writer = new FileWriter(dest); this.config.store(writer, dest.toString()); } @@ -80,10 +81,11 @@ private Properties getDefaultConfig(Path path) throws IOException { InputStream defaultConfig = getClass() .getClassLoader() .getResourceAsStream( - Path.of("defaults", properties).toString() + Paths.get("defaults", properties).toString() ); - Properties config = new Properties(defaultConfig.read()); + Properties config = new Properties(); + config.load(defaultConfig); String dir = path.toString(); config.setProperty("node.install.cfgDir", dir); config.setProperty("node.install.userDir", dir); diff --git a/src/main/java/org/freenetproject/mobile/NodeController.java b/src/main/java/org/freenetproject/mobile/NodeController.java index 6348ddd..c17bbbf 100644 --- a/src/main/java/org/freenetproject/mobile/NodeController.java +++ b/src/main/java/org/freenetproject/mobile/NodeController.java @@ -40,10 +40,7 @@ public interface NodeController { */ String getConfig(String key, String defaultValue); - /** - * @param args Arguments to pass to the node - */ - void start(String[] args); + void start(); /** * @throws IOException Fails to persist configuration. @@ -59,4 +56,9 @@ public interface NodeController { * @throws IOException Fails to communicate with FCP. */ void resume() throws IOException; + + /** + * @return Whether the node is up or not. + */ + boolean isRunning(); } diff --git a/src/main/java/org/freenetproject/mobile/NodeControllerImpl.java b/src/main/java/org/freenetproject/mobile/NodeControllerImpl.java index 44db2d3..323dd50 100644 --- a/src/main/java/org/freenetproject/mobile/NodeControllerImpl.java +++ b/src/main/java/org/freenetproject/mobile/NodeControllerImpl.java @@ -1,9 +1,11 @@ package org.freenetproject.mobile; import freenet.node.*; +import org.bouncycastle.jce.provider.*; import java.io.*; import java.nio.file.*; +import java.security.*; /** * Controls fred node (create and modify configuration, start/stop/pause node). @@ -58,7 +60,7 @@ public void setConfig(String key, String value) throws IOException { */ public void setConfig(String filename, File file) throws IOException { String nodeDir = config.get("node.install.cfgDir"); - Files.copy(file.toPath(), Path.of(nodeDir, filename)); + Files.copy(file.toPath(), Paths.get(nodeDir, filename)); } /** @@ -84,14 +86,21 @@ public String getConfig(String key, String defaultValue) { return config.get(key, defaultValue); } - /** - * @param args Arguments to pass to the node - */ - public void start(String[] args) { + public void start() { if (isRunning()) { return; } + Security.removeProvider("BC"); + Security.insertProviderAt(new BouncyCastleProvider(), 1); + + String[] args = { + Paths.get( + this.config.get("node.install.cfgDir"), + "freenet.ini" + ).toString() + }; + NodeStarter.start_osgi(args); } diff --git a/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java b/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java index 84130d1..4ef363b 100644 --- a/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java +++ b/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java @@ -17,7 +17,7 @@ class NodeControllerImplTest { @Test public void installToPath(@TempDir Path path) throws IOException { NodeController nc = new NodeControllerImpl(path); - Files.exists(Path.of(path.toString(), "defaults/freenet.ini")); + Files.exists(Paths.get(path.toString(), "defaults/freenet.ini")); } @Test @@ -47,7 +47,7 @@ public void setConfigFile(@TempDir Path path, @TempDir File src) throws IOExcept nc.setConfig("seednodes.fref", seednodes); - Path destPath = Path.of(path.toString(), "seednodes.fref"); + Path destPath = Paths.get(path.toString(), "seednodes.fref"); assertTrue(Files.exists(destPath)); assertEquals(content, Files.readAllLines(destPath)); From 86ded31b38ee8646e510af16ff00381c25c2941f Mon Sep 17 00:00:00 2001 From: DC* Date: Wed, 28 Apr 2021 00:32:48 +0100 Subject: [PATCH 5/8] Use custom config writer to avoid escaping special characters --- .../java/org/freenetproject/mobile/Config.java | 16 ++++++++++++++-- .../mobile/NodeControllerImplTest.java | 16 ++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/freenetproject/mobile/Config.java b/src/main/java/org/freenetproject/mobile/Config.java index 7c2d876..7fc6914 100644 --- a/src/main/java/org/freenetproject/mobile/Config.java +++ b/src/main/java/org/freenetproject/mobile/Config.java @@ -9,7 +9,7 @@ */ class Config { private final String properties = "freenet.ini"; - private Properties config; + private Properties config = new Properties(); /** * Set a given value under key. @@ -64,11 +64,23 @@ public void loadOrDefault(Path path) throws IOException { /** * Stores the current configuration to filesystem. + * + * This method saves the configuration options without using the Properties#store method. + * Thus avoiding the escaping of : (used for IPv6 for example) and other especial characters + * that freenet configuration contains. */ public void persist() throws IOException { File dest = Paths.get(this.config.getProperty("node.install.cfgDir"), properties).toFile(); FileWriter writer = new FileWriter(dest); - this.config.store(writer, dest.toString()); + this.config.forEach((k, v) -> { + try { + writer.write(String.format("%s=%s%n", k, v)); + } catch (IOException e) { + e.printStackTrace(); + } + }); + writer.write(String.format("%s%n", "End")); + writer.close(); } /** diff --git a/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java b/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java index 4ef363b..0baf350 100644 --- a/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java +++ b/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java @@ -52,4 +52,20 @@ public void setConfigFile(@TempDir Path path, @TempDir File src) throws IOExcept assertEquals(content, Files.readAllLines(destPath)); } + + @Test + public void setConfigEscaping(@TempDir Path path) throws IOException { + Config config = new Config(); + config.set("node.install.cfgDir", path.toString()); + config.set("node.install.testDir", "/path/to/test:/another/path/to/test"); + config.persist(); + + List expected = new ArrayList<>(); + expected.add("node.install.cfgDir=" + path); + expected.add("node.install.testDir=/path/to/test:/another/path/to/test"); + expected.add("End"); + + assertEquals(expected, Files.readAllLines(Paths.get(path.toString(), "freenet.ini"))); + } + } \ No newline at end of file From 5f1d40f9e0ea28ab636e72f697edf73caebe474a Mon Sep 17 00:00:00 2001 From: DC* Date: Wed, 28 Apr 2021 00:36:14 +0100 Subject: [PATCH 6/8] Add reading configuration test --- .../org/freenetproject/mobile/NodeControllerImplTest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java b/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java index 0baf350..b03dd69 100644 --- a/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java +++ b/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java @@ -65,7 +65,13 @@ public void setConfigEscaping(@TempDir Path path) throws IOException { expected.add("node.install.testDir=/path/to/test:/another/path/to/test"); expected.add("End"); - assertEquals(expected, Files.readAllLines(Paths.get(path.toString(), "freenet.ini"))); + Path file = Paths.get(path.toString(), "freenet.ini"); + assertEquals(expected, Files.readAllLines(file)); + + Config read = new Config(); + read.loadOrDefault(path); + assertEquals(path.toString(), read.get("node.install.cfgDir")); + assertEquals("/path/to/test:/another/path/to/test", read.get("node.install.testDir")); } } \ No newline at end of file From 799a48f77a4e3bcc8c8b57ed5f5e63c24cf3454e Mon Sep 17 00:00:00 2001 From: DC* Date: Fri, 30 Apr 2021 00:52:14 +0100 Subject: [PATCH 7/8] Add support for setConfig with InputStream --- .../freenetproject/mobile/NodeController.java | 9 +++++++++ .../mobile/NodeControllerImpl.java | 16 ++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/main/java/org/freenetproject/mobile/NodeController.java b/src/main/java/org/freenetproject/mobile/NodeController.java index c17bbbf..582ed89 100644 --- a/src/main/java/org/freenetproject/mobile/NodeController.java +++ b/src/main/java/org/freenetproject/mobile/NodeController.java @@ -21,6 +21,15 @@ public interface NodeController { */ void setConfig(String filename, File file) throws IOException; + /** + * Copy file into the node directory as "filename". + * + * @param filename File name to save as. + * @param file Actual file to copy. + * @throws IOException Fails to write config. + */ + void setConfig(String filename, InputStream file) throws IOException; + /** * Returns the value of the configuration key, defaults to "" * if the key is not present. diff --git a/src/main/java/org/freenetproject/mobile/NodeControllerImpl.java b/src/main/java/org/freenetproject/mobile/NodeControllerImpl.java index 323dd50..a577fbd 100644 --- a/src/main/java/org/freenetproject/mobile/NodeControllerImpl.java +++ b/src/main/java/org/freenetproject/mobile/NodeControllerImpl.java @@ -63,6 +63,22 @@ public void setConfig(String filename, File file) throws IOException { Files.copy(file.toPath(), Paths.get(nodeDir, filename)); } + /** + * Copy file into the node directory as "filename". + * + * @param filename File name to save as. + * @param file Actual file to copy. + */ + public void setConfig(String filename, InputStream file) throws IOException { + String nodeDir = config.get("node.install.cfgDir"); + byte[] buffer = new byte[file.available()]; + file.read(buffer); + + File dest = new File(Paths.get(nodeDir, filename).toString()); + OutputStream outStream = new FileOutputStream(dest); + outStream.write(buffer); + } + /** * Returns the value of the configuration key, defaults to "" * if the key is not present. From f0f2083c659a5f881277606779b06b8457561b68 Mon Sep 17 00:00:00 2001 From: DC* Date: Sat, 1 May 2021 00:20:11 +0100 Subject: [PATCH 8/8] Randomize default passwords on setup --- build.gradle | 3 +++ src/main/java/org/freenetproject/mobile/Config.java | 5 +++++ src/main/resources/defaults/freenet.ini | 8 ++++---- .../freenetproject/mobile/NodeControllerImplTest.java | 9 +++++++++ 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 823f281..e0e4702 100644 --- a/build.gradle +++ b/build.gradle @@ -64,6 +64,9 @@ dependencies { implementation 'com.github.Bombe:jFCPlib:v0.1.6' // End Freenet dependencies + // Random strings for ssl.sslKeyStorePass + implementation 'org.apache.commons:commons-lang3:3.9' + // Android compatible logging implementation 'co.trikita:log:1.1.5' diff --git a/src/main/java/org/freenetproject/mobile/Config.java b/src/main/java/org/freenetproject/mobile/Config.java index 7fc6914..4d85ad6 100644 --- a/src/main/java/org/freenetproject/mobile/Config.java +++ b/src/main/java/org/freenetproject/mobile/Config.java @@ -1,5 +1,7 @@ package org.freenetproject.mobile; +import org.apache.commons.lang3.*; + import java.io.*; import java.nio.file.*; import java.util.*; @@ -112,6 +114,9 @@ private Properties getDefaultConfig(Path path) throws IOException { config.setProperty("node.masterKeyFile", dir + "/master.keys"); config.setProperty("node.downloadsDir", dir + "/downloads"); + config.setProperty("ssl.sslKeyStorePass", RandomStringUtils.randomAscii(64)); + config.setProperty("ssl.sslKeyPass", RandomStringUtils.randomAscii(64)); + config.setProperty("logger.dirname", dir + "/logs"); return config; diff --git a/src/main/resources/defaults/freenet.ini b/src/main/resources/defaults/freenet.ini index 0ef2852..9d34529 100644 --- a/src/main/resources/defaults/freenet.ini +++ b/src/main/resources/defaults/freenet.ini @@ -13,11 +13,11 @@ fproxy.ssl=false fproxy.enabled=true fproxy.bindTo=127.0.0.1,0:0:0:0:0:0:0:1 fproxy.allowedHostsFullAccess=127.0.0.1,0:0:0:0:0:0:0:1 -logger.maxZippedLogsSize=10485760 -logger.priority=WARNING +logger.maxZippedLogsSize=1000000 +logger.priority=NONE pluginmanager.enabled=false -ssl.sslKeyStorePass=freenet -ssl.sslKeyPass=freenet +ssl.sslKeyStorePass= +ssl.sslKeyPass= ssl.sslKeyStore=datastore/certs ssl.sslEnable=false toadletsymlinker.symlinks=/sl/search/%23/plugins/plugins.Librarian/;/sl/gallery/%23/plugins/plugins.TestGallery/ diff --git a/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java b/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java index b03dd69..3bda254 100644 --- a/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java +++ b/src/test/java/org/freenetproject/mobile/NodeControllerImplTest.java @@ -27,6 +27,15 @@ public void resourceDefault(@TempDir Path path) throws IOException { assertEquals(path.toString(), nc.getConfig("node.install.cfgDir", "")); } + @Test + public void defaultValues(@TempDir Path path) throws IOException { + NodeControllerImpl nc = new NodeControllerImpl(path); + assertNotEquals("", nc.getConfig("ssl.sslKeyStorePass")); + assertEquals(64, nc.getConfig("ssl.sslKeyStorePass").length()); + assertNotEquals("", nc.getConfig("ssl.sslKeyPass")); + assertEquals(64, nc.getConfig("ssl.sslKeyPass").length()); + } + @Test public void setConfig(@TempDir Path path) throws IOException { Connector mockConnector = Mockito.mock(Connector.class);