Changeset 31880


Ignore:
Timestamp:
2017-08-14T22:23:04+12:00 (4 years ago)
Author:
ak19
Message:

All the changes that were required to set up multiple proxy servers, one for HTTP, one for HTTPS, one for FTP. Still need to test on Windows

Location:
main/trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/gli/classes/dictionary.properties

    r31875 r31880  
    10041004Preferences.Connection.No_Check_Certificate: No certificate checking (effective on 'https' URLs)
    10051005Preferences.Connection.No_Check_Certificate_Tooltip:Tick to download even from 'https' URLs that don't have a (valid) security certificate.
    1006 Preferences.Connection.Proxy_Host:Proxy Host:
    1007 Preferences.Connection.Proxy_Host_Tooltip:The address of your proxy server
    1008 Preferences.Connection.Proxy_Port:Proxy Port:
    1009 Preferences.Connection.Proxy_Port_Tooltip:The port number of your proxy server
    1010 Preferences.Connection.Proxy_Host_Missing:Enter a value for the proxy host or turn off Use Proxy Connection in the Connection tab.
     1006Preferences.Connection.HTTP_Proxy_Host:HTTP Proxy Host:
     1007Preferences.Connection.HTTP_Proxy_Host_Tooltip:The address of your HTTP proxy server
     1008Preferences.Connection.HTTP_Proxy_Port_Tooltip:The port number of your HTTP proxy server
     1009Preferences.Connection.HTTPS_Proxy_Host:HTTPS Proxy Host:
     1010Preferences.Connection.HTTPS_Proxy_Host_Tooltip:The address of your HTTPS proxy server
     1011Preferences.Connection.HTTPS_Proxy_Port_Tooltip:The port number of your HTTPS proxy server
     1012Preferences.Connection.FTP_Proxy_Host:FTP Proxy Host:
     1013Preferences.Connection.FTP_Proxy_Host_Tooltip:The address of your FTP proxy server
     1014Preferences.Connection.FTP_Proxy_Port_Tooltip:The port number of your FTP proxy server
     1015Preferences.Connection.Proxy_Host_Missing:Enter a value for at least one proxy host or turn off Use Proxy Connection in the Connection tab.
     1016Preferences.Connection.Proxy_Port:Port:
    10111017Preferences.Connection.Servlet:Servlet:
    10121018Preferences.Connection.Servlet_Tooltip:The servlet to use to view your site
  • main/trunk/gli/src/org/greenstone/gatherer/Gatherer.java

    r31814 r31880  
    14531453        try {// Can throw several exceptions
    14541454            if(Configuration.get("general.use_proxy", true)) {
     1455                // These are Java properties, therefore see
     1456                // https://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html
     1457                // https://docs.oracle.com/javase/8/docs/technotes/guides/net/proxies.html
     1458                // https://stackoverflow.com/questions/14243590/proxy-settings-in-java
     1459
     1460                // Not sure what proxyType is. And proxySet ceased to exist since JDK 6 or before
    14551461                System.setProperty("http.proxyType", "4");
    1456                 System.setProperty("http.proxyHost", Configuration.getString("general.proxy_host", true));
    1457                 System.setProperty("http.proxyPort", Configuration.getString("general.proxy_port", true));
    1458                 System.setProperty("http.proxySet", "true");
     1462                System.setProperty("http.proxyHost", Configuration.getString("general.HTTP_proxy_host", true));
     1463                System.setProperty("http.proxyPort", Configuration.getString("general.HTTP_proxy_port", true));
     1464                //System.setProperty("http.proxySet", "true");
     1465               
     1466                System.setProperty("https.proxyHost", Configuration.getString("general.HTTPS_proxy_host", true));
     1467                System.setProperty("https.proxyPort", Configuration.getString("general.HTTPS_proxy_port", true));
     1468
     1469                System.setProperty("ftp.proxyHost", Configuration.getString("general.FTP_proxy_host", true));
     1470                System.setProperty("ftp.proxyPort", Configuration.getString("general.FTP_proxy_port", true));
     1471               
    14591472            } else {
    14601473                System.setProperty("http.proxyHost", "");
    14611474                System.setProperty("http.proxyPort", "");
    1462                 System.setProperty("http.proxySet", "false");
     1475                //System.setProperty("http.proxySet", "false");
     1476                System.setProperty("https.proxyHost", "");
     1477                System.setProperty("https.proxyPort", "");
     1478                System.setProperty("ftp.proxyHost", "");
     1479                System.setProperty("ftp.proxyPort", "");
    14631480            }
    14641481        } catch (Exception error) {
  • main/trunk/gli/src/org/greenstone/gatherer/download/DownloadJob.java

    r31878 r31880  
    107107    private final String mode;
    108108   
    109     private String proxy_url; // only the main thread (where DownloadJob runs) modifies this, so no synching needed
     109    private Properties proxy_urls; // only the main thread (where DownloadJob runs) modifies this, so no synching needed
    110110   
    111111    /**
    112112     */
    113     public DownloadJob(Download download, String proxy_pass, String proxy_user, DownloadScrollPane mummy, String mode, String proxy_url) {
     113    public DownloadJob(Download download, String proxy_pass, String proxy_user, DownloadScrollPane mummy, String mode, Properties proxy_urls) {
    114114    URL url = null;
    115115    int folder_hash;
    116116
    117         this.proxy_url =  proxy_url;
     117        this.proxy_urls =  proxy_urls;
    118118   
    119119        download_option = downloadToHashMap(download);
     
    310310        Process prcs = null;
    311311
    312         if (proxy_url != null && !proxy_url.equals("")) {           
     312        if (proxy_urls.size() != 0) {
    313313        // Specify proxies as environment variables
    314314        // Need to manually specify GSDLHOME and GSDLOS also
     315        env = new String[4+proxy_urls.size()];
    315316       
    316         proxy_url = proxy_url.replaceAll("http://","");
    317        
    318         env = new String[7];
    319        
    320         env[0] = "http_proxy=http://"+proxy_url;
    321         env[1] = "https_proxy=http://"+proxy_url; // yes, HTTP protocol for https:// too
    322         // see also https://wiki.archlinux.org/index.php/proxy_settings
    323         env[2] = "ftp_proxy=ftp://"+proxy_url;
    324         env[3] = "GSDLHOME=" + Configuration.gsdl_path;
    325         env[4] = "GSDLOS=" + Gatherer.client_operating_system;
     317        env[0] = "GSDLHOME=" + Configuration.gsdl_path;
     318        env[1] = "GSDLOS=" + Gatherer.client_operating_system;
    326319        // teach it where the wgetrc file lives, in gs2build/bin/<os>:
    327         env[5] = "WGETRC=" + LocalGreenstone.getBinOSDirectoryPath(Gatherer.client_operating_system)+"wgetrc";
     320        env[2] = "WGETRC=" + LocalGreenstone.getBinOSDirectoryPath(Gatherer.client_operating_system)+"wgetrc";
    328321        // Issue discovered on Windows: If PATH is not made available to perl, so that wget or something else needed by
    329322        // WgetDownload.pm's open3()  call is not on the PATH, then the perl open() call to run wget fails.
    330323        // So make PATH available to get open3() working:
    331         env[6] = "PATH="+System.getenv("PATH");     
     324        env[3] = "PATH="+System.getenv("PATH");
     325
     326        int next_index = 4;
     327        String proxy_url = proxy_urls.getProperty("HTTP");
     328        if(proxy_url != null) {
     329            env[next_index] = "http_proxy="+proxy_url;
     330            next_index++;
     331        }
     332        proxy_url = proxy_urls.getProperty("HTTPS");
     333        if(proxy_url != null) {
     334            env[next_index] = "https_proxy="+proxy_url;
     335            next_index++;
     336        }
     337        proxy_url = proxy_urls.getProperty("FTP");
     338        if(proxy_url != null) {
     339            env[next_index] = "ftp_proxy="+proxy_url;
     340            next_index++;
     341        }               
    332342       
    333343        prcs = rt.exec(cmd, env);
     
    623633        String [] env = null;
    624634
    625         if (proxy_url != null && !proxy_url.equals("")) {           
     635        if (proxy_urls.size() != 0) {
    626636        // Specify proxies as environment variables
    627637        // Need to manually specify GSDLHOME and GSDLOS also
     638        env = new String[4+proxy_urls.size()];
    628639       
    629         proxy_url = proxy_url.replaceAll("http://","");
    630        
    631         env = new String[7];
    632        
    633         env[0] = "http_proxy=http://"+proxy_url;
    634         env[1] = "https_proxy=http://"+proxy_url; // yes, HTTP protocol for https:// too
    635         // see also https://wiki.archlinux.org/index.php/proxy_settings
    636         env[2] = "ftp_proxy=ftp://"+proxy_url;
    637         env[3] = "GSDLHOME=" + Configuration.gsdl_path;
    638         env[4] = "GSDLOS=" + Gatherer.client_operating_system;
     640        env[0] = "GSDLHOME=" + Configuration.gsdl_path;
     641        env[1] = "GSDLOS=" + Gatherer.client_operating_system;
    639642        // teach it where the wgetrc file lives, in gs2build/bin/<os>:
    640         env[5] = "WGETRC=" + LocalGreenstone.getBinOSDirectoryPath(Gatherer.client_operating_system)+"wgetrc";
     643        env[2] = "WGETRC=" + LocalGreenstone.getBinOSDirectoryPath(Gatherer.client_operating_system)+"wgetrc";
    641644        // Issue discovered on Windows: If PATH is not made available to perl, so that wget or something else needed by
    642645        // WgetDownload.pm's open3()  call is not on the PATH, then the perl open() call to run wget fails.
    643646        // So make PATH available to get open3() working:
    644         env[6] = "PATH="+System.getenv("PATH");     
     647        env[3] = "PATH="+System.getenv("PATH");
     648
     649        int next_index = 4;
     650        String proxy_url = proxy_urls.getProperty("HTTP");
     651        if(proxy_url != null) {
     652            env[next_index] = "http_proxy="+proxy_url;         
     653            next_index++;
     654        }
     655        proxy_url = proxy_urls.getProperty("HTTPS");
     656        if(proxy_url != null) {
     657            env[next_index] = "https_proxy="+proxy_url;
     658            next_index++;
     659        }
     660        proxy_url = proxy_urls.getProperty("FTP");
     661        if(proxy_url != null) {
     662            env[next_index] = "ftp_proxy="+proxy_url;
     663            next_index++;
     664        }               
    645665       
    646666        prcs = new SafeProcess(cmd, env, null);
    647         } 
     667        }
    648668        else if(Gatherer.isGsdlRemote && Gatherer.isDownloadEnabled && !Utility.isWindows()) {
    649669        // Not Windows, but running client with download panel
  • main/trunk/gli/src/org/greenstone/gatherer/download/DownloadScrollPane.java

    r31822 r31880  
    183183    }
    184184
    185     public void newDownloadJob(Download download, String mode, String proxy_url) {
     185    public void newDownloadJob(Download download, String mode, Properties proxy_urls) {
    186186    // Create the job and fill in the details from gatherer.config.
    187187
    188188    DebugStream.println("About to create a new job");
    189189   
    190         DownloadJob new_job = new DownloadJob(download, Configuration.proxy_pass, Configuration.proxy_user, this, mode, proxy_url);
     190        DownloadJob new_job = new DownloadJob(download, Configuration.proxy_pass, Configuration.proxy_user, this, mode, proxy_urls);
    191191    // Tell it to run as soon as possible
    192192
  • main/trunk/gli/src/org/greenstone/gatherer/download/ServerInfoDialog.java

    r31878 r31880  
    88import java.io.*;
    99import java.util.ArrayList;
     10import java.util.Properties;
    1011import org.greenstone.gatherer.cdm.Argument;
    1112import org.greenstone.gatherer.Configuration;
     
    2728    private JDialog info_dialog;
    2829    private Download download;
    29     private String proxy_url;
     30    private Properties proxy_urls;
    3031   
    31     public ServerInfoDialog(String url, String proxy_url, String mode, Download download) {
     32    public ServerInfoDialog(String url, Properties proxy_urls, String mode, Download download) {
    3233    super();
    3334    this.url = url;
    3435    this.mode = mode;
    3536        this.download = download;
    36         this.proxy_url = proxy_url;
     37        this.proxy_urls = proxy_urls;
    3738    this.info_dialog = this;
    3839   
     
    106107    try {       
    107108        SafeProcess prcs = null;
    108        
    109         if (proxy_url != null && !proxy_url.equals("")) {
    110             // Specify proxies as environment variables
    111             // Need to manually specify GSDLHOME and GSDLOS also
    112            
    113             proxy_url = proxy_url.replaceAll("http://","");
    114            
    115             String [] env = new String[7];
    116            
    117             env[0] = "http_proxy=http://"+proxy_url;
    118             env[1] = "https_proxy=http://"+proxy_url; // yes, HTTP protocol for https:// too
    119             // see also https://wiki.archlinux.org/index.php/proxy_settings
    120             env[2] = "ftp_proxy=ftp://"+proxy_url;
    121             env[3] = "GSDLHOME=" + Configuration.gsdl_path;
    122             env[4] = "GSDLOS=" + Gatherer.client_operating_system;
    123             // teach it where the wgetrc file lives, in gs2build/bin/<os>:
    124             env[5] = "WGETRC=" + LocalGreenstone.getBinOSDirectoryPath(Gatherer.client_operating_system)+"wgetrc";
    125             // Issue discovered on Windows: If PATH is not made available to perl, so that wget or something else needed by
    126             // WgetDownload.pm's open3()  call is not on the PATH, then the perl open() call to run wget fails.
    127             // So make PATH available to get open3() working:
    128             env[6] = "PATH="+System.getenv("PATH");
    129            
    130             prcs = new SafeProcess(command, env, null);
    131         }
    132         else {
    133             // Will inherit the GLI's environment, with GSDLHOME and GSDLOS set
    134             prcs = new SafeProcess(command);
     109
     110        if (proxy_urls.size() != 0) {
     111        // Specify proxies as environment variables
     112        // Need to manually specify GSDLHOME and GSDLOS also
     113        String[] env = new String[4+proxy_urls.size()];
     114
     115        env[0] = "GSDLHOME=" + Configuration.gsdl_path;
     116        env[1] = "GSDLOS=" + Gatherer.client_operating_system;
     117        // teach it where the wgetrc file lives, in gs2build/bin/<os>:
     118        env[2] = "WGETRC=" + LocalGreenstone.getBinOSDirectoryPath(Gatherer.client_operating_system)+"wgetrc";
     119        // Issue discovered on Windows: If PATH is not made available to perl, so that wget or something else needed by
     120        // WgetDownload.pm's open3()  call is not on the PATH, then the perl open() call to run wget fails.
     121        // So make PATH available to get open3() working:
     122        env[3] = "PATH="+System.getenv("PATH");     
     123
     124        int next_index = 4;
     125        String proxy_url = proxy_urls.getProperty("HTTP");
     126        if(proxy_url != null) {
     127            env[next_index] = "http_proxy="+proxy_url;
     128            next_index++;
    135129        }
     130        proxy_url = proxy_urls.getProperty("HTTPS");
     131        if(proxy_url != null) {
     132            env[next_index] = "https_proxy="+proxy_url;
     133            next_index++;
     134        }
     135        proxy_url = proxy_urls.getProperty("FTP");
     136        if(proxy_url != null) {
     137            env[next_index] = "ftp_proxy="+proxy_url;
     138            next_index++;
     139        }               
     140       
     141        prcs = new SafeProcess(command, env, null);
     142        } else {
     143        // Will inherit the GLI's environment, with GSDLHOME and GSDLOS set
     144        prcs = new SafeProcess(command);
     145        }
    136146       
    137147        // special processing of Process' stderr stream:
  • main/trunk/gli/src/org/greenstone/gatherer/gui/DownloadPane.java

    r31877 r31880  
    9191    private String mode = null;
    9292    private TreePath previous_path;
    93     private String proxy_url = "";
     93    private Properties proxy_urls = new Properties(); // proxy_urls for each of HTTP, HTTPS, FTP
    9494    private Proxy proxyObject = null;
    9595       
     
    601601        }
    602602       
    603         getter.newDownloadJob((Download)download_map.get(mode) ,mode,proxy_url);
     603        getter.newDownloadJob((Download)download_map.get(mode) ,mode,proxy_urls);
    604604        }
    605605    }
     
    723723    }
    724724
    725     // TODO: Still need to read up on and test how to set wget proxy on windows
    726     // Need to be on a windows machine that requires proxy, and get wget to work on cmdline
    727     // If that works, then need to check https URLS also work.
    728     // See https://superuser.com/questions/526710/how-to-set-http-proxy-address-for-wget-under-windows
    729     private boolean checkProxy(){
     725   
     726    // SOME READING:
     727    // https://superuser.com/questions/526710/how-to-set-http-proxy-address-for-wget-under-windows
     728    // https://arstechnica.com/civis/viewtopic.php?f=10&t=1281165
     729    // "http or https to an https proxy?"
     730    // About "CONNECT": https://daniel.haxx.se/docs/sshproxy.html
     731    // "You need an SSH client that can issue CONNECT requests through the company HTTP proxy." Seems to imply http? Also uses it for ftp.
     732    // https://forum.ivorde.com/set-up-ftp-proxy-via-command-line-in-linux-freebsd-t19733.html sets ftp_proxy to a http url.
     733    // So it's seems to be just whatever protocol the proxy server has. When the proxy supports all three protocols
     734    // (apparently the common case as per page below describing firefox prefs), then wiki.archlinux sets all three ftp_proxy/http_proxy/https_proxy to the same.
     735    // See https://forums.freebsd.org/threads/57378/
     736    // "I believe that ftp(1) only uses HTTP-type proxies for fetching URLs. I.e. you can't do traditional open->cd->get interactive style of FTP with it via a HTTP proxy. If you do something like ftp ftp://ftp.example.com/path/file, it should work with your proxy setup. For traditional interactive FTP, you need to be directly talking to the remote server or using the less common FTP proxy/gate functionality."   
     737    // https://wiki.archlinux.org/index.php/Proxy_settings
     738    // This does https_proxy = http_proxy, and explicitly prefixes "https://" to http_proxy.
     739    // https://www.howtogeek.com/293213/how-to-configure-a-proxy-server-in-firefox/
     740    /* You’ll usually want to click the “Use the proxy server for all protocols” option. Firefox will also use your HTTP proxy server for SSL-encrypted HTTPS connections and File Transfer Protocol (FTP) connections.
     741Uncheck this box if you want to enter separate proxy servers for HTTP, HTTPS, and FTP connections. This isn’t common.
     742If you’re configuring a SOCKS proxy, leave the HTTP Proxy, SSL Proxy, and FTP Proxy boxes empty. Enter the address of the SOCKS proxy into the “SOCKS Host” and its port into the “Port” box.
     743    */   
     744    private boolean checkProxy(){   
     745   
     746    proxy_urls.clear();
     747   
     748    Download current_download = (Download)download_map.get(mode);
     749   
     750        Argument arg = current_download.getArgument("proxy_on");
     751 
     752    if (arg == null) return true;
     753   
     754    // Determine if we have to use a proxy.
     755    if(Configuration.get("general.use_proxy", true)) {
     756       
     757        boolean http_proxy_set = setProxyURLFor("HTTP");
     758        boolean https_proxy_set = setProxyURLFor("HTTPS");
     759        boolean ftp_proxy_set = setProxyURLFor("FTP");
     760       
     761        if(proxy_urls.size() == 0 ||
     762           (!http_proxy_set && !https_proxy_set && !ftp_proxy_set)) {
     763       
     764        // if checkProxy() failed for all protocols
     765        // OR if none of the proxies were setup by user, then turn off proxying
     766        arg = current_download.getArgument("proxy_on");
     767        arg.setValue("false");
     768        arg.setAssigned(false);
     769        proxy_urls.clear();
     770        return false;
     771        } else { // proxy details have been successfully set for at least one proxy protocol
     772        return true;
     773        }   
     774
     775    } else { // if proxy_on was off
     776        // unset proxy_on argument too
     777        arg = current_download.getArgument("proxy_on");
     778        arg.setValue("false");
     779        arg.setAssigned(false);
     780    }
     781   
     782    return true;
     783    }
     784
     785    private boolean setProxyURLFor(String protocol) {
     786    String proxy_host = Configuration.getString("general."+protocol+"_proxy_host", true);
     787    if(proxy_host.equals("")) { // no proxy details for this protocol
     788        ///System.err.println("### general."+protocol+"proxy_host was empty");
     789        return true;
     790    }
     791   
     792    String proxy_port = Configuration.getString("general."+protocol+"_proxy_port", true);
     793    // Find out whether the user has already authenticated themselves
     794   
     795    // remove the protocol prefix from proxy_host, and store it
     796    String proxy_protocol = "";
     797    int proxy_protocol_index = proxy_host.indexOf("://");
     798    if(proxy_protocol_index != -1) {
     799        proxy_protocol_index += "://".length();
     800        proxy_protocol = proxy_host.substring(0, proxy_protocol_index);
     801        proxy_host = proxy_host.substring(proxy_protocol_index);
     802    } else { // no explicit protocol for proxy host specified,
     803        // then set explicit protocol to be the same as the protocol param: http|https|ftp
     804        proxy_protocol = protocol.toLowerCase()+"://";
     805    }
     806   
     807    String user_pass = "";
     808    String address = proxy_host + ":" + proxy_port;
     809   
     810    int count = 0;
     811    // Only for wget, need to avoid a second automatic authentication popup (first asks
     812    // the proxy authentication for wget, and the second will ask the same for the realm)
     813    // Once the authentication has been reused, it will set the GAuthenticator state back to REGULAR
     814    GAuthenticator.setMode(GAuthenticator.DOWNLOAD);
     815    while(count < 3 && (user_pass = (String) GAuthenticator.authentications.get(address)) == null) {
     816        Authenticator.requestPasswordAuthentication(proxy_host, null, Integer.parseInt(proxy_port), "http://", Dictionary.get("WGet.Prompt"), "HTTP");
     817        count++;
     818    }
     819    if(count >= 3) {
     820        return false;
     821    }
     822   
     823    // https://askubuntu.com/questions/664777/systemwide-proxy-settings-in-ubuntu
     824    // http://www.rgagnon.com/javadetails/java-0085.html
     825    // how-do-i-make-httpurlconnection-use-a-proxy
     826    // https://stackoverflow.com/questions/8030908/how-to-check-if-proxy-is-working-in-java
     827   
     828    //proxyObject = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy_host, Integer.parseInt(proxy_port))); // proxyObject only used by getRedirectURL(), which we're no longer calling
     829   
     830    Download current_download = (Download)download_map.get(mode);
     831    Argument arg = current_download.getArgument("proxy_on");
     832   
     833    if(user_pass.indexOf("@") != -1) {
     834       
     835        arg.setValue("true"); // proxy_on argument
     836        arg.setAssigned(true);
     837       
     838        arg = current_download.getArgument(protocol.toLowerCase()+"_proxy_host");
     839        arg.setValue(proxy_host);
     840        arg.setAssigned(true);
     841       
     842        arg = current_download.getArgument(protocol.toLowerCase()+"_proxy_port");
     843        arg.setValue(proxy_port);
     844        arg.setAssigned(true);
     845
     846        // Write the use proxy command - we don't do this anymore, instead we set environment
     847        // variables as these do work for windows after all (Aug 2017). Hopefully these can't
     848        // be spied on like the following can (using ps/task manager. If going back to the
     849        // following, be aware: can't add protocol+user_name and protocol+user_password as
     850        // accepted parameters in WgetDownload.pm for HTTP, HTTPS and FTP protocols. Only
     851        // one set of username and password can be set for wget's --proxy-user and
     852        // --proxy-password flags. No separate flags for each protocol.
     853        /*if (Utility.isWindows()) {
     854         
     855          arg = current_download.getArgument("user_name");
     856          arg.setValue(user_pass.substring(0, user_pass.indexOf("@")));
     857          arg.setAssigned(true);
     858         
     859          arg = current_download.getArgument("user_password");
     860          arg.setValue(user_pass.substring(user_pass.indexOf("@") + 1));
     861          arg.setAssigned(true);
     862          }
     863         
     864          else{*/
     865        String user_name = user_pass.substring(0, user_pass.indexOf("@"));
     866        String user_pwd = user_pass.substring(user_pass.indexOf("@") + 1);
     867        /*}*/
     868       
     869        // construct proxy_url and prefix the stored proxy protocol to it
     870        String proxy_url = proxy_protocol+user_name+":"+user_pwd+"@"+proxy_host+":"+proxy_port+"/";     
     871        proxy_urls.setProperty(protocol, proxy_url);
     872        return true;
     873    }
     874    else{
     875        return false;
     876    }   
     877    }
     878   
     879   
     880    private boolean old_checkProxy(){
    730881     
    731     proxy_url = null;
    732 
     882    String proxy_url = null; // ORIGINALLY A MEMBER VAR
     883   
    733884    Download current_download = (Download)download_map.get(mode);
    734885   
     
    8601011        }
    8611012
    862         server_info = new ServerInfoDialog(str_url ,proxy_url, mode,(Download)download_map.get(mode));
     1013        server_info = new ServerInfoDialog(str_url ,proxy_urls, mode,(Download)download_map.get(mode));
    8631014       
    8641015    }
  • main/trunk/gli/src/org/greenstone/gatherer/gui/Preferences.java

    r31861 r31880  
    5656    extends ModalDialog
    5757{
     58    static final public String HTTP = "HTTP";
     59    static final public String HTTPS = "HTTPS";
     60    static final public String FTP = "FTP";
     61   
    5862    static final public String CONNECTION_PREFS = "connection";
    5963    static final public String GENERAL_PREFS = "general";
     
    8690    private JRadioButton expert_mode_radio_button;
    8791    private JRadioButton librarian_mode_radio_button;
    88     private JSpinner proxy_port_field;
     92    private JSpinner http_proxy_port_field;
     93    private JSpinner https_proxy_port_field;
     94    private JSpinner ftp_proxy_port_field;
    8995    private JTabbedPane tab_pane;
    9096    private JTextArea mode_description_textarea;
     
    9399    private JTextField library_path_field;
    94100    private JTextField program_field;
    95     private JTextField proxy_host_field;
     101    private JTextField http_proxy_host_field;
     102    private JTextField https_proxy_host_field;
     103    private JTextField ftp_proxy_host_field;
    96104    private JTextField collect_dir_field;
    97105
     
    337345    use_proxy_checkbox.setPreferredSize(ROW_SIZE);
    338346   
    339         JPanel proxy_host_pane = new JPanel();
    340         proxy_host_pane.setComponentOrientation(Dictionary.getOrientation());
    341     proxy_host_pane.setPreferredSize(ROW_SIZE);
    342        
    343     JLabel proxy_host_label = new JLabel(Dictionary.get("Preferences.Connection.Proxy_Host"));
    344         proxy_host_label.setComponentOrientation(Dictionary.getOrientation());
    345     proxy_host_label.setPreferredSize(LABEL_SIZE);
    346    
    347     proxy_host_field = new JTextField(Configuration.getString("general.proxy_host", true));
    348     proxy_host_field.setEnabled(currently_enabled);
    349     proxy_host_field.setToolTipText(Dictionary.get("Preferences.Connection.Proxy_Host_Tooltip"));
    350     proxy_host_field.setComponentOrientation(Dictionary.getOrientation());
    351        
    352     JPanel proxy_port_pane = new JPanel();
    353         proxy_port_pane.setComponentOrientation(Dictionary.getOrientation());
    354     proxy_port_pane.setPreferredSize(ROW_SIZE);
    355        
    356     JLabel proxy_port_label = new JLabel(Dictionary.get("Preferences.Connection.Proxy_Port"));
    357     proxy_port_label.setPreferredSize(LABEL_SIZE);
    358         proxy_port_label.setComponentOrientation(Dictionary.getOrientation());
    359    
    360     String port_value = Configuration.getString("general.proxy_port", true);
    361     if(port_value.length() > 0) {
    362        proxy_port_field = new JSpinner(new SpinnerNumberModel((new Integer(port_value)).intValue(), 0, 65535, 1));
    363     }
    364     else {
    365        proxy_port_field = new JSpinner(new SpinnerNumberModel(0, 0, 65535, 1));
    366     }
    367     proxy_port_field.setEnabled(currently_enabled);
    368     proxy_port_field.setToolTipText(Dictionary.get("Preferences.Connection.Proxy_Port_Tooltip"));
    369347   
    370348    // Connection
     
    405383    collect_dir_pane.add(chdir_button, BorderLayout.LINE_END);
    406384
    407     proxy_host_pane.setLayout(new BorderLayout());
    408     proxy_host_pane.add(proxy_host_label, BorderLayout.LINE_START);
    409     proxy_host_pane.add(proxy_host_field, BorderLayout.CENTER);
    410 
    411     proxy_port_pane.setLayout(new BorderLayout());
    412     proxy_port_pane.add(proxy_port_label, BorderLayout.LINE_START);
    413     proxy_port_pane.add(proxy_port_field, BorderLayout.CENTER);
    414385
    415386    connection_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    416     connection_pane.setLayout(new GridLayout(9,1,0,2));
     387    connection_pane.setLayout(new GridLayout(10,1,0,2));
    417388    connection_pane.add(program_pane);
    418389    connection_pane.add(library_path_pane);
     
    428399    connection_pane.add(no_check_certificate_checkbox);
    429400    connection_pane.add(use_proxy_checkbox);
    430     connection_pane.add(proxy_host_pane);
    431     connection_pane.add(proxy_port_pane);
     401   
     402    // set up the proxy host and port fields for each of http, https and ftp   
     403        setupProxyHostPane(HTTP, connection_pane, currently_enabled, http_proxy_host_field, http_proxy_port_field);
     404    setupProxyHostPane(HTTPS, connection_pane, currently_enabled, https_proxy_host_field, https_proxy_port_field);
     405    setupProxyHostPane(FTP, connection_pane, currently_enabled, ftp_proxy_host_field, ftp_proxy_port_field);
    432406
    433407    return connection_pane;
     
    570544    return general_pane;
    571545    }
     546
     547    private void setupProxyHostPane(String protocol, JPanel connection_pane, boolean isEnabled,
     548                    JTextField proxy_host_field, JSpinner proxy_port_field)
     549    {
     550    final Dimension WIDER_LABEL_SIZE = new Dimension(180, 25);
     551    final Dimension NARROWER_LABEL_SIZE = new Dimension(60, 25);
     552    final Dimension WIDER_ROW_SIZE = new Dimension(480, 25);
     553    final Dimension NARROWER_ROW_SIZE = new Dimension(120, 25);
     554   
     555    JPanel proxy_host_pane = new JPanel();
     556        proxy_host_pane.setComponentOrientation(Dictionary.getOrientation());
     557    proxy_host_pane.setPreferredSize(WIDER_ROW_SIZE);
     558       
     559    JLabel proxy_host_label = new JLabel(Dictionary.get("Preferences.Connection."+protocol+"_Proxy_Host"));
     560        proxy_host_label.setComponentOrientation(Dictionary.getOrientation());
     561    proxy_host_label.setPreferredSize(WIDER_LABEL_SIZE);
     562   
     563    proxy_host_field = new JTextField(Configuration.getString("general."+protocol+"_proxy_host", true));
     564    proxy_host_field.setEnabled(isEnabled);
     565    proxy_host_field.setToolTipText(Dictionary.get("Preferences.Connection."+protocol+"_Proxy_Host_Tooltip"));
     566    proxy_host_field.setComponentOrientation(Dictionary.getOrientation());
     567       
     568    JPanel proxy_port_pane = new JPanel();
     569        proxy_port_pane.setComponentOrientation(Dictionary.getOrientation());
     570    proxy_port_pane.setPreferredSize(NARROWER_ROW_SIZE);
     571       
     572    JLabel proxy_port_label = new JLabel(Dictionary.get("Preferences.Connection.Proxy_Port"));
     573    proxy_port_label.setPreferredSize(NARROWER_LABEL_SIZE);
     574        proxy_port_label.setComponentOrientation(Dictionary.getOrientation());
     575   
     576    String port_value = Configuration.getString("general."+protocol+"_proxy_port", true);
     577    if(port_value.length() > 0) {
     578       proxy_port_field = new JSpinner(new SpinnerNumberModel((new Integer(port_value)).intValue(), 0, 65535, 1));
     579    }
     580    else {
     581       proxy_port_field = new JSpinner(new SpinnerNumberModel(0, 0, 65535, 1));
     582    }
     583    proxy_port_field.setEnabled(isEnabled);
     584    proxy_port_field.setToolTipText(Dictionary.get("Preferences.Connection."+protocol+"_Proxy_Port_Tooltip"));
     585
     586
     587    // Since the actual object member vars were null when this method is called
     588    // need to ensure they are assigned the correct value now, else those refs will remain null
     589    if(protocol.equals(HTTP)) {
     590        http_proxy_host_field = proxy_host_field;
     591        http_proxy_port_field = proxy_port_field;
     592    } else if (protocol.equals(HTTPS)) {
     593        https_proxy_host_field = proxy_host_field;
     594        https_proxy_port_field = proxy_port_field;
     595    } else if(protocol.equals(FTP)) {
     596        ftp_proxy_host_field = proxy_host_field;
     597        ftp_proxy_port_field = proxy_port_field;
     598    }
     599   
     600    proxy_host_pane.setLayout(new BorderLayout());
     601    proxy_host_pane.add(proxy_host_label, BorderLayout.LINE_START);
     602    proxy_host_pane.add(proxy_host_field, BorderLayout.CENTER);
     603
     604    proxy_port_pane.setLayout(new BorderLayout());
     605    proxy_port_pane.add(proxy_port_label, BorderLayout.LINE_START);
     606    proxy_port_pane.add(proxy_port_field, BorderLayout.CENTER);
     607
     608    //connection_pane.add(proxy_host_pane);
     609    //connection_pane.add(proxy_port_pane);
     610
     611    JPanel proxy_panel = new JPanel();
     612    proxy_panel.setLayout(new BorderLayout()); 
     613    proxy_panel.add(proxy_host_pane, BorderLayout.WEST);
     614    proxy_panel.add(proxy_port_pane, BorderLayout.CENTER);
     615
     616    connection_pane.add(proxy_panel);
     617    }
     618   
    572619
    573620    /** Generate the controls for altering the detail mode.
     
    786833        this.close = close;
    787834    }
     835
     836    private void setProxyHostForProtocol(String protocol,
     837                         JTextField proxy_host_field,
     838                         JSpinner proxy_port_field)
     839    {       
     840        Configuration.setString("general."+protocol+"_proxy_host", true, proxy_host_field.getText());
     841        Configuration.setString("general."+protocol+"_proxy_port", true, proxy_port_field.getValue() + "");
     842    }
     843   
    788844    public void actionPerformed(ActionEvent event)
    789845    {
     
    876932       
    877933        Configuration.set("general.use_proxy", true, use_proxy_checkbox.isSelected());
    878         Configuration.setString("general.proxy_host", true, proxy_host_field.getText());
    879         Configuration.setString("general.proxy_port", true, proxy_port_field.getValue() + "");
     934        setProxyHostForProtocol(HTTP, http_proxy_host_field, http_proxy_port_field);
     935        setProxyHostForProtocol(HTTPS, https_proxy_host_field, https_proxy_port_field);
     936        setProxyHostForProtocol(FTP, ftp_proxy_host_field, ftp_proxy_port_field);
    880937        Gatherer.setProxy();
    881938
     
    9751032
    9761033        // If proxy is on but proxy details are incomplete, then can't continue
    977         if (use_proxy_checkbox.isSelected() && proxy_host_field.getText().equals("")) {
     1034        if (use_proxy_checkbox.isSelected()
     1035        && http_proxy_host_field.getText().equals("")
     1036        && https_proxy_host_field.getText().equals("")
     1037        && ftp_proxy_host_field.getText().equals("")) {
    9781038        JOptionPane.showMessageDialog(Gatherer.g_man, Dictionary.get("Preferences.Connection.Proxy_Host_Missing"),
    9791039                          Dictionary.get("General.Error"), JOptionPane.ERROR_MESSAGE);
     
    11441204        Configuration.set("general.use_proxy", true, enabled);
    11451205        // Fortunately this is already driven by the event thread.
    1146         proxy_host_field.setEnabled(enabled);
    1147         proxy_port_field.setEnabled(enabled);
     1206        http_proxy_host_field.setEnabled(enabled);
     1207        http_proxy_port_field.setEnabled(enabled);
     1208        https_proxy_host_field.setEnabled(enabled);
     1209        https_proxy_port_field.setEnabled(enabled);
     1210        ftp_proxy_host_field.setEnabled(enabled);
     1211        ftp_proxy_port_field.setEnabled(enabled);
    11481212    }
    11491213    }
  • main/trunk/greenstone2/perllib/downloaders/WebDownload.pm

    r31878 r31880  
    193193    my $strBaseCMD = $strOptions." --tries=2 -q -O - \"$self->{'url'}\"";
    194194
    195     #&util::print_env(STDERR, "https_proxy", "http_proxy", "HTTPS_PROXY", "HTTP_PROXY", "ftp_proxy", "FTP_PROXY");
     195    #&util::print_env(STDERR, "https_proxy", "http_proxy", "ftp_proxy");
    196196    #&util::print_env(STDERR); 
    197197   
     
    201201   
    202202    print STDERR "Server information is unavailable.\n";
    203 
    204     #&util::print_env(STDERR, "https_proxy", "http_proxy");
    205    
    206     if ($self->{'proxy_on'} && $self->{'proxy_host'} && $self->{'proxy_port'}) { # if proxying set, the settings may be wrong
    207         &gsprintf::gsprintf_multiline(STDERR, "{WebDownload.proxied_connect_failed_info}\n", $self->{'proxy_host'}, $self->{'proxy_port'});
     203   
     204    if ($self->{'proxy_on'}) { # if proxying set, the settings may be wrong
     205        &gsprintf::gsprintf_multiline(STDERR, "{WebDownload.proxied_connect_failed_info}\n");
     206       
     207        if($self->{'http_proxy_host'} && defined $self->{'http_proxy_port'}) {
     208        &gsprintf::gsprintf_multiline(STDERR, "{WebDownload.http_proxy_settings}\n", $self->{'http_proxy_host'}, $self->{'http_proxy_port'});
     209        }
     210        if($self->{'https_proxy_host'} && defined $self->{'https_proxy_port'}) {
     211        &gsprintf::gsprintf_multiline(STDERR, "{WebDownload.https_proxy_settings}\n", $self->{'https_proxy_host'}, $self->{'https_proxy_port'});
     212        }
     213        if($self->{'ftp_proxy_host'} && defined $self->{'ftp_proxy_port'}) {
     214        &gsprintf::gsprintf_multiline(STDERR, "{WebDownload.ftp_proxy_settings}\n", $self->{'ftp_proxy_host'}, $self->{'ftp_proxy_port'});
     215        }
    208216    } else { # else no proxy set, the user may need proxy settings
    209217        &gsprintf::gsprintf_multiline(STDERR, "{WebDownload.proxyless_connect_failed_info}\n");
  • main/trunk/greenstone2/perllib/downloaders/WgetDownload.pm

    r31878 r31880  
    5151    'reqd' => "no",
    5252    'hiddengli' => "yes"},
    53       { 'name' => "proxy_host", 
    54     'desc' => "{WgetDownload.proxy_host}",         
    55     'type' => "string",
    56     'reqd' => "no",
    57     'hiddengli' => "yes"},
    58       { 'name' => "proxy_port",
    59     'desc' => "{WgetDownload.proxy_port}",         
     53      { 'name' => "http_proxy_host",
     54    'desc' => "{WgetDownload.http_proxy_host}",
     55    'type' => "string",
     56    'reqd' => "no",
     57    'hiddengli' => "yes"},
     58      { 'name' => "http_proxy_port",
     59    'desc' => "{WgetDownload.http_proxy_port}",
     60    'type' => "string",
     61    'reqd' => "no",
     62    'hiddengli' => "yes"},
     63      { 'name' => "https_proxy_host", 
     64    'desc' => "{WgetDownload.https_proxy_host}",         
     65    'type' => "string",
     66    'reqd' => "no",
     67    'hiddengli' => "yes"},
     68      { 'name' => "https_proxy_port",
     69    'desc' => "{WgetDownload.https_proxy_port}",         
     70    'type' => "string",
     71    'reqd' => "no",
     72    'hiddengli' => "yes"},
     73      { 'name' => "ftp_proxy_host", 
     74    'desc' => "{WgetDownload.ftp_proxy_host}",         
     75    'type' => "string",
     76    'reqd' => "no",
     77    'hiddengli' => "yes"},
     78      { 'name' => "ftp_proxy_port",
     79    'desc' => "{WgetDownload.ftp_proxy_port}",         
    6080    'type' => "string",
    6181    'reqd' => "no",
    6282    'hiddengli' => "yes"},
    6383      { 'name' => "user_name", 
    64     'desc' => "{WgetDownload.user_name}",         
     84    'desc' => "{WgetDownload.user_name}",
    6585    'type' => "string",
    6686    'reqd' => "no",
    6787    'hiddengli' => "yes"},
    6888      { 'name' => "user_password",
    69     'desc' => "{WgetDownload.user_password}",         
     89    'desc' => "{WgetDownload.user_password}",
    7090    'type' => "string",
    7191    'reqd' => "no",
     
    171191    my ($self) = @_;
    172192    my $strOptions = "";
    173    
    174     if ($self->{'proxy_on'} && $self->{'proxy_host'} && $self->{'proxy_port'})
     193
     194    if($self->{'http_proxy_host'} && $self->{'http_proxy_port'}) {
     195    $strOptions .= " -e http_proxy=$self->{'http_proxy_host'}:$self->{'http_proxy_port'} ";
     196    }
     197    if($self->{'https_proxy_host'} && $self->{'https_proxy_port'}) {
     198    $strOptions .= " -e https_proxy=$self->{'https_proxy_host'}:$self->{'https_proxy_port'} ";
     199    }
     200    if($self->{'ftp_proxy_host'} && $self->{'ftp_proxy_port'}) {
     201    $strOptions .= " -e ftp_proxy=$self->{'ftp_proxy_host'}:$self->{'ftp_proxy_port'} ";
     202    }
     203   
     204    # For wget, there is only one set pair of proxy-user and proxy-passwd, so wget seems to assume
     205    # that all 3 proxy protocols (http|https|ftp) will use the same username and pwd combination?
     206    # Note that this only matters when passing the proxying details as flags to wget, not when
     207    # the proxies are setup as environment variables.
     208    if ($self->{'user_name'} && $self->{'user_password'})
    175209    {
    176     $strOptions .= " -e https_proxy=$self->{'proxy_host'}:$self->{'proxy_port'} "; 
    177     $strOptions .= " -e http_proxy=$self->{'proxy_host'}:$self->{'proxy_port'} ";       
    178    
    179     if ($self->{'user_name'} && $self->{'user_password'})
    180     {
    181         $strOptions .= "--proxy-user=$self->{'user_name'}"." --proxy-passwd=$self->{'user_password'}";
    182     }
    183     }
    184    
    185     if ($self->{'proxy_on'}) {
    186     $strOptions .= " --proxy ";
    187     }
     210    $strOptions .= "--proxy-user=$self->{'user_name'}"." --proxy-passwd=$self->{'user_password'}";     
     211    # how is "--proxy-passwd" instead of "--proxy-password" even working????       
     212    # see https://www.gnu.org/software/wget/manual/html_node/Proxies.html
     213    # and https://www.gnu.org/software/wget/manual/wget.html
     214    # Not touching this, in case the manual is simply wrong. Since our code works in
     215    # practice (when we were still using wget proxy username/pwd flags for windows).
     216    }   
    188217   
    189218    return $strOptions;
     
    202231    # http://www.perlmonks.org/?node=what%20is%20true%20and%20false%20in%20Perl%3F
    203232   
    204     if (!$ENV{'http_proxy'} && !$ENV{'https_proxy'}) {
    205     $strOptions .= $self->addProxySettingsAsWgetFlags();
    206     } # else wget will use proxy settings in environment, assume enough settings have been provided
     233    if ($self->{'proxy_on'}) {
     234    if(!$ENV{'http_proxy'} && !$ENV{'https_proxy'} && !$ENV{'ftp_proxy'}) {
     235        $strOptions .= $self->addProxySettingsAsWgetFlags();
     236    } # else wget will use proxy settings in environment, assume enough settings have been provided
     237    # either way, we're using the proxy
     238    $strOptions .= " --proxy ";
     239    }
    207240   
    208241    if($self->{'no_check_certificate'}) { # URL may be http that gets redirected to https, so if no_check_certificate is on, turn it on even if URL is http
  • main/trunk/greenstone2/perllib/strings.properties

    r31875 r31880  
    13361336WebDownload.html_only:Download only HTML files, and ignore associated files e.g images and stylesheets
    13371337WebDownload.html_only_disp:Only HTML files
    1338 WebDownload.proxied_connect_failed_info:Current proxy settings are:\n- host=%s\n- port=%s
     1338WebDownload.proxied_connect_failed_info:Current proxy settings are:
     1339WebDownload.http_proxy_settings:- HTTP host=%s : port=%s
     1340WebDownload.https_proxy_settings:- HTTPS host=%s : port=%s
     1341WebDownload.ftp_proxy_settings:- FTP host=%s : port=%s
    13391342WebDownload.proxyless_connect_failed_info:- The external server might not be responding\n- or you might need to switch on proxy settings
    13401343WebDownload.connect_failed_info:- or try ticking No Certificate Checking (affects 'https' URLs)\nin File > Preferences > Connection
     
    13421345WgetDownload.desc: Base class that handles calls to wget
    13431346WgetDownload.proxy_on:Proxy on
    1344 WgetDownload.proxy_host:Proxy host
    1345 WgetDownload.proxy_port:Proxy port
     1347WgetDownload.http_proxy_host:HTTP proxy host
     1348WgetDownload.http_proxy_port:HTTP proxy port
     1349WgetDownload.https_proxy_host:HTTPS proxy host
     1350WgetDownload.https_proxy_port:HTTPS proxy port
     1351WgetDownload.ftp_proxy_host:FTP proxy host
     1352WgetDownload.ftp_proxy_port:FTP proxy port
    13461353WgetDownload.user_name:User name
    13471354WgetDownload.user_password:User password
Note: See TracChangeset for help on using the changeset viewer.