From: Ben Soares Date: Sun, 12 Jul 2020 23:31:13 +0000 (+0100) Subject: JAL-3633 Remember system set proxy properties. Add options in Preferences for No... X-Git-Tag: Develop-2_11_2_0-d20201215~15^2~23 X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=commitdiff_plain;h=a934d28336923f2966aeac29f7d1a877e5db1cec JAL-3633 Remember system set proxy properties. Add options in Preferences for No proxy, system proxy, or custom proxy servers. --- diff --git a/resources/lang/Messages.properties b/resources/lang/Messages.properties index 57c51f5..7918cd0 100644 --- a/resources/lang/Messages.properties +++ b/resources/lang/Messages.properties @@ -577,13 +577,16 @@ label.gap_symbol = Gap Symbol label.prot_alignment_colour = Protein Alignment Colour label.nuc_alignment_colour = Nucleotide Alignment Colour label.address = Address +label.host = Host label.port = Port label.default_browser_unix = Default Browser (Unix) label.send_usage_statistics = Send usage statistics label.check_for_questionnaires = Check for questionnaires label.check_for_latest_version = Check for latest version label.url_linkfrom_sequence_id = URL link from Sequence ID -label.use_proxy_server = Use a proxy server +label.no_proxy = No proxy servers +label.system_proxy = System proxy servers (http={0}; https={1}) +label.use_proxy_server = Use these proxy servers label.rendering_style = {0} rendering style label.append_start_end = Append /start-end (/15-380) label.full_sequence_id = Full Sequence Id diff --git a/resources/lang/Messages_es.properties b/resources/lang/Messages_es.properties index 09e597e..c9f6bac 100644 --- a/resources/lang/Messages_es.properties +++ b/resources/lang/Messages_es.properties @@ -531,13 +531,16 @@ label.database_references = Referencias a base de datos #label.scroll_highlighted_regions = Desplazarse hasta las regiones resaltadas label.gap_symbol = Símbolo del hueco label.address = Dirección +label.host = Host label.port = Puerto label.default_browser_unix = Navegador por defecto (Unix) label.send_usage_statistics = Enviar estadísticas de uso label.check_for_questionnaires = Comprobar los cuestionarios label.check_for_latest_version = Comprobar la última versión label.url_linkfrom_sequence_id = URL del enlace del ID de la secuencia -label.use_proxy_server = Utilizar un servidor proxy +label.no_proxy = Sin servidores proxy +label.system_proxy = Servidores proxy del sistema (http={0}; https={1}) +label.use_proxy_server = Utilizar estos servidores proxy label.rendering_style = Estilo de visualización {0} label.append_start_end = Añadir /inicio-fin (/15-380) label.full_sequence_id = ID de la secuencia completo diff --git a/src/jalview/bin/Cache.java b/src/jalview/bin/Cache.java index 40fccb0..621b74b 100755 --- a/src/jalview/bin/Cache.java +++ b/src/jalview/bin/Cache.java @@ -271,6 +271,13 @@ public class Cache */ public static Logger log; + // save the proxy properties set at startup + public final static String[] startupProxyProperties = { + System.getProperty("http.proxyHost"), + System.getProperty("http.proxyPort"), + System.getProperty("https.proxyHost"), + System.getProperty("https.proxyPort") }; + /** Jalview Properties */ public static Properties applicationProperties = new Properties() { @@ -394,16 +401,45 @@ public class Cache System.out.println("Error reading properties file: " + ex); } } + + /* TO BE REPLACED WITH PROXY_TYPE SETTINGS if (getDefault("USE_PROXY", false)) { String proxyServer = getDefault("PROXY_SERVER", ""), proxyPort = getDefault("PROXY_PORT", "8080"); + } + */ - System.out.println("Using proxyServer: " + proxyServer - + " proxyPort: " + proxyPort); - - System.setProperty("http.proxyHost", proxyServer); - System.setProperty("http.proxyPort", proxyPort); + // PROXY TYPE settings (now three options "none", "false", "true", but using + // backward compatible strings) + String proxyType = getDefault("USE_PROXY", "false"); + // default to upgrading old settings + switch (proxyType) + { + case "none": + setProxyProperties(null, null, null, null); + break; + case "false": // use system settings + resetProxyProperties(); + break; + case "true": // use specified proxy settings + String httpHost = getDefault("PROXY_SERVER", ""); + String httpPort = getDefault("PROXY_PORT", "8080"); + String httpsHost = getDefault("PROXY_SERVER_HTTPS", httpHost); + String httpsPort = getDefault("PROXY_PORT_HTTPS", httpPort); + setProxyProperties(httpHost, httpPort, httpsHost, httpsPort); + break; + default: + String message = "Incorrect PROXY_TYPE - should be 'none' (clear proxy properties), 'false' (system settings), 'true' (custom settings): " + + proxyType; + if (Cache.log == null) + { + System.out.println(message); + } + else + { + Cache.log.warn(message); + } } // LOAD THE AUTHORS FROM THE authors.props file @@ -1215,4 +1251,77 @@ public class Cache t.printStackTrace(pw); return sw.toString(); } + + // proxy properties methods + public static void resetProxyProperties() + { + setProxyProperties(startupProxyProperties[0], startupProxyProperties[1], + startupProxyProperties[2], startupProxyProperties[3]); + StringBuilder sb = new StringBuilder(); + sb.append("Setting proxy properties to: http.proxyHost=") + .append(startupProxyProperties[0]).append(", http.proxyPort=") + .append(startupProxyProperties[1]).append(", https.proxyHost=") + .append(startupProxyProperties[2]).append(", https.proxyPort=") + .append(startupProxyProperties[3]); + if (Cache.log == null) + { + System.err.println(sb.toString()); + } + else + { + Cache.log.debug(sb.toString()); + } + } + + public static void setProxyProperties(String host, String port) + { + setProxyProperties(host, port, host, port); + } + + public static void setProxyProperties(String httpHost, String httpPort, + String httpsHost, String httpsPort) + { + // cannot set property to null -- use clearProperty instead + + // http.proxyHost + if (httpHost == null) + { + System.clearProperty("http.proxyHost"); + } + else + { + System.setProperty("http.proxyHost", httpHost); + } + + // http.proxyPort + if (httpPort == null) + { + System.clearProperty("http.proxyPort"); + } + else + { + System.setProperty("http.proxyPort", httpPort); + } + + // https.proxyHost + if (httpsHost == null) + { + System.clearProperty("https.proxyHost"); + } + else + { + System.setProperty("https.proxyHost", httpsHost); + } + + // https.proxyPort + if (httpsPort == null) + { + System.clearProperty("https.proxyPort"); + } + else + { + System.setProperty("https.proxyPort", httpsPort); + } + + } } diff --git a/src/jalview/gui/Preferences.java b/src/jalview/gui/Preferences.java index c61c70e..f337898 100755 --- a/src/jalview/gui/Preferences.java +++ b/src/jalview/gui/Preferences.java @@ -536,10 +536,27 @@ public class Preferences extends GPreferences } } - useProxy.setSelected(Cache.getDefault("USE_PROXY", false)); - useProxy_actionPerformed(); // make sure useProxy is correctly initialised - proxyServerTB.setText(Cache.getDefault("PROXY_SERVER", "")); - proxyPortTB.setText(Cache.getDefault("PROXY_PORT", "")); + String proxyTypeString = Cache.getDefault("USE_PROXY", "false"); + switch (proxyTypeString) + { + case "none": + proxyType.setSelected(noProxy.getModel(), true); + break; + case "false": + proxyType.setSelected(systemProxy.getModel(), true); + break; + case "true": + proxyType.setSelected(customProxy.getModel(), true); + break; + default: + String message = "Incorrect PROXY_TYPE - should be 'none' (clear proxy properties), 'false' (system settings), 'true' (custom settings): " + + proxyTypeString; + Cache.log.warn(message); + } + proxyServerHttpTB.setText(Cache.getDefault("PROXY_SERVER", "")); + proxyPortHttpTB.setText(Cache.getDefault("PROXY_PORT", "")); + proxyServerHttpsTB.setText(Cache.getDefault("PROXY_SERVER_HTTPS", "")); + proxyPortHttpsTB.setText(Cache.getDefault("PROXY_PORT_HTTPS", "")); defaultBrowser.setText(Cache.getDefault("DEFAULT_BROWSER", "")); @@ -812,22 +829,35 @@ public class Preferences extends GPreferences sequenceUrlLinks.getPrimaryUrlId()); Cache.applicationProperties.setProperty("USE_PROXY", - Boolean.toString(useProxy.isSelected())); + customProxy.isSelected() ? "true" + : noProxy.isSelected() ? "none" : "false"); + + Cache.setOrRemove("PROXY_SERVER", proxyServerHttpTB.getText()); - Cache.setOrRemove("PROXY_SERVER", proxyServerTB.getText()); + Cache.setOrRemove("PROXY_PORT", proxyPortHttpTB.getText()); - Cache.setOrRemove("PROXY_PORT", proxyPortTB.getText()); + Cache.setOrRemove("PROXY_SERVER_HTTPS", proxyServerHttpsTB.getText()); - if (useProxy.isSelected()) + Cache.setOrRemove("PROXY_PORT_HTTPS", proxyPortHttpsTB.getText()); + + if (noProxy.isSelected()) { - System.setProperty("http.proxyHost", proxyServerTB.getText()); - System.setProperty("http.proxyPort", proxyPortTB.getText()); + Cache.log.warn("Setting no proxy settings"); + Cache.setProxyProperties(null, null, null, null); } - else + else if (customProxy.isSelected()) { - System.setProperty("http.proxyHost", ""); - System.setProperty("http.proxyPort", ""); + 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(); + } + Cache.setProperty("VERSION_CHECK", Boolean.toString(versioncheck.isSelected())); if (Cache.getProperty("USAGESTATS") != null || usagestats.isSelected()) diff --git a/src/jalview/jbgui/GPreferences.java b/src/jalview/jbgui/GPreferences.java index ae6727a..b40380a 100755 --- a/src/jalview/jbgui/GPreferences.java +++ b/src/jalview/jbgui/GPreferences.java @@ -229,17 +229,35 @@ public class GPreferences extends JPanel protected JButton userOnly = new JButton(); + protected JLabel httpLabel = new JLabel(); + + protected JLabel httpsLabel = new JLabel(); + protected JLabel portLabel = new JLabel(); protected JLabel serverLabel = new JLabel(); - protected JTextField proxyServerTB = new JTextField(); + protected JLabel portLabel2 = new JLabel(); + + protected JLabel serverLabel2 = new JLabel(); + + protected JTextField proxyServerHttpTB = new JTextField(); - protected JTextField proxyPortTB = new JTextField(); + protected JTextField proxyPortHttpTB = new JTextField(); + + protected JTextField proxyServerHttpsTB = new JTextField(); + + protected JTextField proxyPortHttpsTB = new JTextField(); protected JTextField defaultBrowser = new JTextField(); - protected JCheckBox useProxy = new JCheckBox(); + protected ButtonGroup proxyType = new ButtonGroup(); + + protected JRadioButton noProxy = new JRadioButton(); + + protected JRadioButton systemProxy = new JRadioButton(); + + protected JRadioButton customProxy = new JRadioButton(); protected JCheckBox usagestats = new JCheckBox(); @@ -880,39 +898,145 @@ public class GPreferences extends JPanel private JPanel initConnTabProxyPanel() { // Label for server text box - serverLabel.setText(MessageManager.getString("label.address")); + serverLabel.setText(MessageManager.getString("label.host") + ": "); serverLabel.setHorizontalAlignment(SwingConstants.RIGHT); serverLabel.setFont(LABEL_FONT); + serverLabel2.setText(MessageManager.getString("label.host") + ": "); + serverLabel2.setHorizontalAlignment(SwingConstants.RIGHT); + serverLabel2.setFont(LABEL_FONT); // Proxy server and port text boxes - proxyServerTB.setFont(LABEL_FONT); - proxyPortTB.setFont(LABEL_FONT); + proxyServerHttpTB.setFont(LABEL_FONT); + proxyServerHttpTB.setColumns(40); + proxyPortHttpTB.setFont(LABEL_FONT); + proxyPortHttpTB.setColumns(4); + proxyServerHttpsTB.setFont(LABEL_FONT); + proxyServerHttpsTB.setColumns(40); + proxyPortHttpsTB.setFont(LABEL_FONT); + proxyPortHttpsTB.setColumns(4); // Label for Port text box portLabel.setFont(LABEL_FONT); portLabel.setHorizontalAlignment(SwingConstants.RIGHT); - portLabel.setText(MessageManager.getString("label.port")); - - // Use proxy server checkbox - useProxy.setFont(LABEL_FONT); - useProxy.setHorizontalAlignment(SwingConstants.RIGHT); - useProxy.setHorizontalTextPosition(SwingConstants.LEADING); - useProxy.setText(MessageManager.getString("label.use_proxy_server")); - useProxy.addActionListener(new ActionListener() + portLabel.setText(MessageManager.getString("label.port") + ": "); + portLabel2.setFont(LABEL_FONT); + portLabel2.setHorizontalAlignment(SwingConstants.RIGHT); + portLabel2.setText(MessageManager.getString("label.port") + ": "); + + httpLabel.setText("HTTP"); + httpLabel.setFont(LABEL_FONT_BOLD); + httpLabel.setHorizontalAlignment(SwingConstants.LEFT); + httpsLabel.setText("HTTPS"); + httpsLabel.setFont(LABEL_FONT_BOLD); + httpsLabel.setHorizontalAlignment(SwingConstants.LEFT); + + // Proxy type radio buttons + noProxy.setFont(LABEL_FONT); + noProxy.setHorizontalAlignment(SwingConstants.LEFT); + // noProxy.setHorizontalTextPosition(SwingConstants.LEADING); + noProxy.setText(MessageManager.getString("label.no_proxy")); + systemProxy.setFont(LABEL_FONT); + systemProxy.setHorizontalAlignment(SwingConstants.LEFT); + // systemProxy.setHorizontalTextPosition(SwingConstants.LEADING); + systemProxy.setText(MessageManager.formatMessage("label.system_proxy", + displayHostPort(Cache.startupProxyProperties[0], + Cache.startupProxyProperties[1]), + displayHostPort(Cache.startupProxyProperties[2], + Cache.startupProxyProperties[3]))); + customProxy.setFont(LABEL_FONT); + customProxy.setHorizontalAlignment(SwingConstants.LEFT); + // customProxy.setHorizontalTextPosition(SwingConstants.LEADING); + customProxy.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - useProxy_actionPerformed(); + customProxy_actionPerformed(); } }); + customProxy.setText( + MessageManager.getString("label.use_proxy_server") + ":"); + proxyType.add(noProxy); + proxyType.add(systemProxy); + proxyType.add(customProxy); // Make proxy server panel JPanel proxyPanel = new JPanel(); TitledBorder titledBorder1 = new TitledBorder( MessageManager.getString("label.proxy_server")); proxyPanel.setBorder(titledBorder1); + GridBagConstraints gbc = new GridBagConstraints(); proxyPanel.setLayout(new GridBagLayout()); + + gbc.gridx = 0; + gbc.gridy = 0; + gbc.weightx = 1.0; + gbc.gridheight = 1; + gbc.anchor = GridBagConstraints.WEST; + gbc.fill = GridBagConstraints.BOTH; + + gbc.gridwidth = 5; + proxyPanel.add(noProxy, gbc); + + gbc.gridy++; + proxyPanel.add(systemProxy, gbc); + + gbc.gridy++; + proxyPanel.add(customProxy, gbc); + + gbc.gridwidth = 1; + gbc.gridy++; + gbc.gridx = 0; + gbc.weightx = 0.1; + proxyPanel.add(httpLabel, gbc); + + gbc.gridx++; + gbc.anchor = GridBagConstraints.EAST; + gbc.weightx = 0.15; + proxyPanel.add(serverLabel, gbc); + + gbc.gridx++; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 0.5; + proxyPanel.add(proxyServerHttpTB, gbc); + + gbc.gridx++; + gbc.anchor = GridBagConstraints.EAST; + gbc.weightx = 0.15; + proxyPanel.add(portLabel, gbc); + + gbc.gridx++; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 0.1; + proxyPanel.add(proxyPortHttpTB, gbc); + + gbc.gridy++; + gbc.gridx = 0; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 0.1; + proxyPanel.add(httpsLabel, gbc); + + gbc.gridx++; + gbc.anchor = GridBagConstraints.EAST; + gbc.weightx = 0.15; + proxyPanel.add(serverLabel2, gbc); + + gbc.gridx++; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 0.5; + proxyPanel.add(proxyServerHttpsTB, gbc); + + gbc.gridx++; + gbc.anchor = GridBagConstraints.EAST; + gbc.weightx = 0.15; + proxyPanel.add(portLabel2, gbc); + + gbc.gridx++; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 0.1; + proxyPanel.add(proxyPortHttpsTB, gbc); + + /* proxyPanel.add(serverLabel, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, @@ -933,10 +1057,30 @@ public class GPreferences extends JPanel new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 2, 2, 0), 263, 1)); + */ return proxyPanel; } + private String displayHostPort(String host, String port) + { + boolean hostBlank = (host == null || host.isEmpty()); + boolean portBlank = (port == null || port.isEmpty()); + if (hostBlank && portBlank) + { + return MessageManager.getString("label.none"); + } + + StringBuilder sb = new StringBuilder(); + sb.append(hostBlank ? "" : host); + if (!portBlank) + { + sb.append(":"); + sb.append(port); + } + return sb.toString(); + } + /** * Initialises the checkboxes in the Connections tab */ @@ -2823,13 +2967,17 @@ public class GPreferences extends JPanel } - public void useProxy_actionPerformed() + public void customProxy_actionPerformed() { - boolean enabled = useProxy.isSelected(); + boolean enabled = customProxy.isSelected(); portLabel.setEnabled(enabled); serverLabel.setEnabled(enabled); - proxyServerTB.setEnabled(enabled); - proxyPortTB.setEnabled(enabled); + httpLabel.setEnabled(enabled); + httpsLabel.setEnabled(enabled); + proxyServerHttpTB.setEnabled(enabled); + proxyPortHttpTB.setEnabled(enabled); + proxyServerHttpsTB.setEnabled(enabled); + proxyPortHttpsTB.setEnabled(enabled); } /**