diff --git a/plugin-src/src/net/i2p/itoopie/plugin/Itoopie.java b/plugin-src/src/net/i2p/itoopie/plugin/Itoopie.java index 4b183138a..5f8938d5b 100644 --- a/plugin-src/src/net/i2p/itoopie/plugin/Itoopie.java +++ b/plugin-src/src/net/i2p/itoopie/plugin/Itoopie.java @@ -14,6 +14,7 @@ package net.i2p.itoopie.plugin; * */ +import java.io.File; import javax.swing.UIManager; import net.i2p.I2PAppContext; @@ -21,6 +22,7 @@ import net.i2p.app.*; import static net.i2p.app.ClientAppState.*; import net.i2p.util.Log; +import net.i2p.itoopie.configuration.ConfigurationManager; import net.i2p.itoopie.gui.GUIHelper; import net.i2p.itoopie.gui.TrayManager; import net.i2p.itoopie.gui.WindowHandler; @@ -41,6 +43,10 @@ public class Itoopie implements ClientApp { _log = ctx.logManager().getLog(Itoopie.class); _mgr = mgr; _state = INITIALIZED; + // Set the conf dir so ConfigurationManager can find it + File d = new File(ctx.getConfigDir(), "plugins"); + d = new File(d, "itoopie"); + System.setProperty(ConfigurationManager.PROP_CONF_DIR, d.getAbsolutePath()); } /** diff --git a/src/net/i2p/itoopie/configuration/ConfigurationManager.java b/src/net/i2p/itoopie/configuration/ConfigurationManager.java index 968ab7291..49125eb84 100644 --- a/src/net/i2p/itoopie/configuration/ConfigurationManager.java +++ b/src/net/i2p/itoopie/configuration/ConfigurationManager.java @@ -26,6 +26,10 @@ public class ConfigurationManager { private static final String DEFAULT_CONFIG_NAME = "itoopie.conf"; private static final Log _log = LogFactory.getLog(ConfigurationManager.class); private static final String APP_DIR_NAME = "itoopie"; + /** + * For plugin + */ + public static final String PROP_CONF_DIR = "itoopie.confdir"; private static ConfigurationManager instance; @@ -65,17 +69,18 @@ public class ConfigurationManager { * Reads configuration from file itoopie.conf, every line is parsed as key=value. */ public static void readConfFile(){ + File f = new File(getAppConfDir(), DEFAULT_CONFIG_NAME); try { - BufferedReader br = new BufferedReader(new FileReader(getAppConfDir() + DEFAULT_CONFIG_NAME)); + BufferedReader br = new BufferedReader(new FileReader(f)); String input; while ((input = br.readLine()) != null){ parseConfigStr(input); } br.close(); } catch (FileNotFoundException e) { - _log.info("Unable to find config file, " + getAppConfDir() + DEFAULT_CONFIG_NAME); + _log.info("Unable to find config file " + f); } catch (IOException e) { - _log.error("Unable to read from config file, " + getAppConfDir() + DEFAULT_CONFIG_NAME); + _log.error("Unable to read from config file " + f); } } @@ -93,14 +98,15 @@ public class ConfigurationManager { for (Entry e : booleanConfigurations.entrySet()){ tree.put(e.getKey(), e.getValue().toString()); } + File f = new File(getAppConfDir(), DEFAULT_CONFIG_NAME); try { - BufferedWriter bw = new BufferedWriter(new FileWriter(getAppConfDir() + DEFAULT_CONFIG_NAME)); + BufferedWriter bw = new BufferedWriter(new FileWriter(f)); for (Entry e : tree.entrySet()){ bw.write(e.getKey() + "=" + e.getValue() + "\r\n"); } bw.close(); } catch (IOException e1) { - _log.error("Couldn't open file, " + getAppConfDir() + DEFAULT_CONFIG_NAME + " for writing config."); + _log.error("Couldn't open file " + f + " for writing config."); } } @@ -213,17 +219,21 @@ public class ConfigurationManager { * Get the file path to the configuration directory. If the directory does not yet exist, creates it. * @return Application configuration directory. */ - public static String getAppConfDir(){ + public static File getAppConfDir() { String dir; - if (System.getenv("APPDATA") != null && !System.getenv("APPDATA").equals("")){ - dir = System.getenv("APPDATA")+ File.separator + APP_DIR_NAME + File.separator; // Windows path + // for plugin + String override = System.getProperty(PROP_CONF_DIR); + if (override != null) { + dir = override; + } else if (System.getenv("APPDATA") != null && !System.getenv("APPDATA").equals("")) { + dir = System.getenv("APPDATA")+ File.separator + APP_DIR_NAME; // Windows path } else { - dir = System.getProperties().getProperty("user.home") + File.separator + "." + APP_DIR_NAME + File.separator; // Linux/mac path + dir = System.getProperty("user.home") + File.separator + "." + APP_DIR_NAME; // Linux/mac path } File dirFile = new File(dir); if (!dirFile.exists()){ dirFile.mkdirs(); } - return dir; + return dirFile; } -} \ No newline at end of file +} diff --git a/src/net/i2p/itoopie/security/CertificateManager.java b/src/net/i2p/itoopie/security/CertificateManager.java index 973c02817..0a41d0096 100644 --- a/src/net/i2p/itoopie/security/CertificateManager.java +++ b/src/net/i2p/itoopie/security/CertificateManager.java @@ -162,12 +162,13 @@ public class CertificateManager { if (_ks == null){ try { _ks = KeyStore.getInstance(DEFAULT_KEYSTORE_TYPE); - if ((new File(ConfigurationManager.getAppConfDir() + DEFAULT_KEYSTORE_LOCATION)).exists()){ - InputStream is = new FileInputStream(ConfigurationManager.getAppConfDir() + DEFAULT_KEYSTORE_LOCATION); + File f = new File(ConfigurationManager.getAppConfDir(), DEFAULT_KEYSTORE_LOCATION); + if (f.exists()) { + InputStream is = new FileInputStream(f); _ks.load(is, DEFAULT_KEYSTORE_PASSWORD.toCharArray()); return _ks; } else { - throw new IOException("KeyStore file " + ConfigurationManager.getAppConfDir() + DEFAULT_KEYSTORE_LOCATION + "wasn't readable"); + throw new IOException("KeyStore file " + f + " wasn't readable"); } } catch (Exception e) { // Ignore. Not an issue. Let's just create a new keystore instead. @@ -188,7 +189,7 @@ public class CertificateManager { private static void saveKeyStore(KeyStore ks){ try { - ks.store(new FileOutputStream(ConfigurationManager.getAppConfDir() + DEFAULT_KEYSTORE_LOCATION), DEFAULT_KEYSTORE_PASSWORD.toCharArray()); + ks.store(new FileOutputStream(new File(ConfigurationManager.getAppConfDir(), DEFAULT_KEYSTORE_LOCATION)), DEFAULT_KEYSTORE_PASSWORD.toCharArray()); } catch (KeyStoreException e) { // TODO Auto-generated catch block e.printStackTrace();