JAL-3633 Memory only proxy auth password storage. Open Preferences->Connection tab...
[jalview.git] / src / jalview / gui / Preferences.java
index f337898..3cada85 100755 (executable)
@@ -127,6 +127,8 @@ public class Preferences extends GPreferences
 
   private static final int MAX_FONT_SIZE = 30;
 
+  private String previousProxyType;
+
   /**
    * Holds name and link separated with | character. Sequence ID must be
    * $SEQUENCE_ID$ or $SEQUENCE_ID=/.possible | chars ./=$
@@ -191,7 +193,12 @@ public class Preferences extends GPreferences
    */
   public Preferences()
   {
-    super();
+    new Preferences(0);
+  }
+
+  public Preferences(int selectTab)
+  {
+    super(selectTab);
     frame = new JInternalFrame();
     frame.setContentPane(this);
     if (!Platform.isJS())
@@ -537,15 +544,16 @@ public class Preferences extends GPreferences
     }
 
     String proxyTypeString = Cache.getDefault("USE_PROXY", "false");
+    previousProxyType = proxyTypeString;
     switch (proxyTypeString)
     {
-    case "none":
+    case Cache.PROXYTYPE_NONE:
       proxyType.setSelected(noProxy.getModel(), true);
       break;
-    case "false":
+    case Cache.PROXYTYPE_SYSTEM:
       proxyType.setSelected(systemProxy.getModel(), true);
       break;
-    case "true":
+    case Cache.PROXYTYPE_CUSTOM:
       proxyType.setSelected(customProxy.getModel(), true);
       break;
     default:
@@ -557,6 +565,13 @@ public class Preferences extends GPreferences
     proxyPortHttpTB.setText(Cache.getDefault("PROXY_PORT", ""));
     proxyServerHttpsTB.setText(Cache.getDefault("PROXY_SERVER_HTTPS", ""));
     proxyPortHttpsTB.setText(Cache.getDefault("PROXY_PORT_HTTPS", ""));
+    proxyAuth.setSelected(Cache.getDefault("PROXY_AUTH", false));
+    proxyAuthUsernameTB
+            .setText(Cache.getDefault("PROXY_AUTH_USERNAME", ""));
+    // we are not storing or retrieving proxy password from .jalview_properties
+    proxyAuthPasswordTB.setText(Cache.proxyAuthPassword == null ? ""
+            : Cache.proxyAuthPassword.toString());
+    setCustomProxyEnabled();
 
     defaultBrowser.setText(Cache.getDefault("DEFAULT_BROWSER", ""));
 
@@ -828,35 +843,8 @@ public class Preferences extends GPreferences
     Cache.applicationProperties.setProperty("DEFAULT_URL",
             sequenceUrlLinks.getPrimaryUrlId());
 
-    Cache.applicationProperties.setProperty("USE_PROXY",
-            customProxy.isSelected() ? "true"
-                    : noProxy.isSelected() ? "none" : "false");
-
-    Cache.setOrRemove("PROXY_SERVER", proxyServerHttpTB.getText());
-
-    Cache.setOrRemove("PROXY_PORT", proxyPortHttpTB.getText());
-
-    Cache.setOrRemove("PROXY_SERVER_HTTPS", proxyServerHttpsTB.getText());
-
-    Cache.setOrRemove("PROXY_PORT_HTTPS", proxyPortHttpsTB.getText());
-
-    if (noProxy.isSelected())
-    {
-      Cache.log.warn("Setting no proxy settings");
-      Cache.setProxyProperties(null, null, null, null);
-    }
-    else if (customProxy.isSelected())
-    {
-      Cache.log.warn("Setting custom proxy settings");
-      Cache.setProxyProperties(proxyServerHttpTB.getText(),
-              proxyPortHttpTB.getText(), proxyServerHttpsTB.getText(),
-              proxyPortHttpsTB.getText());
-    }
-    else // systemProxy should be selected and is sensible default
-    {
-      Cache.log.warn("Setting system proxy settings");
-      Cache.resetProxyProperties();
-    }
+    // Proxy settings
+    saveProxySettings();
 
     Cache.setProperty("VERSION_CHECK",
             Boolean.toString(versioncheck.isSelected()));
@@ -954,6 +942,58 @@ public class Preferences extends GPreferences
     }
   }
 
+  public void setProxyFromSettings()
+  {
+    String proxyType = Cache.getDefault("USE_PROXY",
+            Cache.PROXYTYPE_SYSTEM);
+    if (proxyType.equals(Cache.PROXYTYPE_NONE))
+    {
+      if (!previousProxyType.equals(proxyType))
+        Cache.log.info("Setting no proxy settings");
+      Cache.setProxyProperties(null, null, null, null, null, null, null,
+              null, null);
+    }
+    else if (proxyType.equals(Cache.PROXYTYPE_CUSTOM))
+    {
+      if (!previousProxyType.equals(proxyType))
+        Cache.log.info("Setting custom proxy settings");
+      boolean proxyAuthSet = Cache.getDefault("PROXY_AUTH", false);
+      Cache.setProxyProperties(Cache.getDefault("PROXY_SERVER", null),
+              Cache.getDefault("PROXY_PORT", null),
+              Cache.getDefault("PROXY_SERVER_HTTPS", null),
+              Cache.getDefault("PROXY_PORT_HTTPS", null),
+              proxyAuthSet ? Cache.getDefault("PROXY_AUTH_USERNAME", "")
+                      : null,
+              proxyAuthSet ? Cache.proxyAuthPassword : null,
+              proxyAuthSet ? Cache.getDefault("PROXY_AUTH_USERNAME", "")
+                      : null,
+              proxyAuthSet ? Cache.proxyAuthPassword : null, "localhost");
+    }
+    else // systemProxy should be selected and is sensible default anyway
+    {
+      if (!previousProxyType.equals(proxyType))
+        Cache.log.info("Setting system proxy settings");
+      Cache.resetProxyProperties();
+    }
+  }
+
+  public void saveProxySettings()
+  {
+    Cache.applicationProperties.setProperty("USE_PROXY",
+            customProxy.isSelected() ? Cache.PROXYTYPE_CUSTOM
+                    : noProxy.isSelected() ? Cache.PROXYTYPE_NONE
+                            : Cache.PROXYTYPE_SYSTEM);
+    Cache.setOrRemove("PROXY_SERVER", proxyServerHttpTB.getText());
+    Cache.setOrRemove("PROXY_PORT", proxyPortHttpTB.getText());
+    Cache.setOrRemove("PROXY_SERVER_HTTPS", proxyServerHttpsTB.getText());
+    Cache.setOrRemove("PROXY_PORT_HTTPS", proxyPortHttpsTB.getText());
+    Cache.setOrRemove("PROXY_AUTH",
+            Boolean.toString(proxyAuth.isSelected()));
+    Cache.setOrRemove("PROXY_AUTH_USERNAME", proxyAuthUsernameTB.getText());
+    Cache.proxyAuthPassword = proxyAuthPasswordTB.getPassword();
+    setProxyFromSettings();
+  }
+
   /**
    * Do any necessary validation before saving settings. Return focus to the
    * first tab which fails validation.