KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sslexplorer > install > forms > ConfigureProxiesForm


1 /*
2  * SSL-Explorer
3  *
4  * Copyright (C) 2003-2006 3SP LTD. All Rights Reserved
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2 of
9  * the License, or (at your option) any later version.
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public
16  * License along with this program; if not, write to the Free Software
17  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  */

19             
20 package com.sslexplorer.install.forms;
21
22 import java.net.Authenticator JavaDoc;
23 import java.net.InetAddress JavaDoc;
24 import java.net.PasswordAuthentication JavaDoc;
25 import java.net.UnknownHostException JavaDoc;
26 import java.util.Iterator JavaDoc;
27
28 import javax.servlet.http.HttpServletRequest JavaDoc;
29
30 import org.apache.commons.logging.Log;
31 import org.apache.commons.logging.LogFactory;
32 import org.apache.struts.Globals;
33 import org.apache.struts.action.ActionErrors;
34 import org.apache.struts.action.ActionMapping;
35 import org.apache.struts.action.ActionMessage;
36
37 import com.sslexplorer.boot.ContextKey;
38 import com.sslexplorer.boot.PropertyList;
39 import com.sslexplorer.extensions.store.ExtensionStore;
40 import com.sslexplorer.properties.Property;
41 import com.sslexplorer.wizard.AbstractWizardSequence;
42 import com.sslexplorer.wizard.forms.DefaultWizardForm;
43
44 /**
45  */

46 public class ConfigureProxiesForm extends DefaultWizardForm {
47     
48     final static Log log = LogFactory.getLog(ConfigureProxiesForm.class);
49
50     // Private statics for sequence attributes
51
/**
52      */

53     public final static String JavaDoc ATTR_USE_SOCKS_PROXY = "useSOCKSProxy";
54     /**
55      */

56     public final static String JavaDoc ATTR_USE_HTTP_PROXY = "useHTTPProxy";
57     /**
58      */

59     public final static String JavaDoc ATTR_SOCKS_PROXY_HOSTNAME = "SOCKSProxyHostname";
60     /**
61      */

62     public final static String JavaDoc ATTR_SOCKS_PROXY_PORT = "SOCKSProxyPort";
63     /**
64      */

65     public final static String JavaDoc ATTR_SOCKS_PROXY_USERNAME = "SOCKSProxyUsername";
66     /**
67      */

68     public final static String JavaDoc ATTR_SOCKS_PROXY_PASSWORD = "SOCKSProxyPassword";
69     /**
70      */

71     public final static String JavaDoc ATTR_HTTP_PROXY_HOSTNAME = "HTTPProxyHostname";
72     /**
73      */

74     public final static String JavaDoc ATTR_HTTP_PROXY_PORT = "HTTPProxyPort";
75     /**
76      */

77     public final static String JavaDoc ATTR_HTTP_PROXY_USERNAME = "HTTPProxyUsername";
78     /**
79      */

80     public final static String JavaDoc ATTR_HTTP_PROXY_PASSWORD = "HTTPProxyPassword";
81     /**
82      */

83     public final static String JavaDoc ATTR_EXTENSION_STORE_EXCEPTION = "extensionStoreException";
84     /**
85      */

86     public final static Object JavaDoc ATTR_HTTP_NON_PROXY_HOSTS = "HTTPNonProxyHosts";
87     
88     // Private instance variables
89
private boolean useSOCKSProxy;
90     private boolean useHTTPProxy;
91     private String JavaDoc socksProxyHostname;
92     private String JavaDoc socksProxyPort;
93     private String JavaDoc socksProxyUsername;
94     private String JavaDoc socksProxyPassword;
95     private String JavaDoc httpProxyHostname;
96     private String JavaDoc httpProxyPort;
97     private String JavaDoc httpProxyUsername;
98     private String JavaDoc httpProxyPassword;
99     private PropertyList httpNonProxyHosts;
100
101     /**
102      */

103     public ConfigureProxiesForm() {
104         super(true, true, "/WEB-INF/jsp/content/install/configureProxies.jspf",
105             "useHTTPProxy", true, false, "configureProxies", "install", "installation.configureProxies", 5);
106     }
107
108     /*
109      * (non-Javadoc)
110      * @see com.sslexplorer.wizard.forms.AbstractWizardForm#init(com.sslexplorer.wizard.AbstractWizardSequence)
111      */

112     public void init(AbstractWizardSequence sequence, HttpServletRequest JavaDoc request) throws Exception JavaDoc {
113         try {
114             if(sequence.getAttribute(ATTR_SOCKS_PROXY_HOSTNAME, null) == null) {
115                 socksProxyHostname = Property.getProperty(new ContextKey("proxies.socksProxyHost"));
116                 if(socksProxyHostname.equals("")) {
117                     socksProxyUsername = "";
118                     socksProxyPort = "";
119                     socksProxyPassword = "";
120                 }
121                 else {
122                     useSOCKSProxy = true;
123                     socksProxyUsername = Property.getProperty(new ContextKey("proxies.socksProxyUser"));
124                     socksProxyPassword = Property.getProperty(new ContextKey("proxies.socksProxyPassword"));
125                     socksProxyPort = Property.getProperty(new ContextKey("proxies.socksProxyPort"));
126                 }
127             }
128             else {
129                 useSOCKSProxy = ((String JavaDoc)sequence.getAttribute(ATTR_USE_SOCKS_PROXY,
130                     String.valueOf(Property.getProperty(new ContextKey("webServer.port"))))).equals("true");
131                 socksProxyHostname = (String JavaDoc)sequence.getAttribute(ATTR_SOCKS_PROXY_HOSTNAME, "");
132                 socksProxyPort = (String JavaDoc)sequence.getAttribute(ATTR_SOCKS_PROXY_PORT, "");
133                 socksProxyUsername = (String JavaDoc)sequence.getAttribute(ATTR_SOCKS_PROXY_USERNAME, "");
134                 socksProxyPassword = (String JavaDoc)sequence.getAttribute(ATTR_SOCKS_PROXY_PASSWORD, "");
135             }
136
137             if(sequence.getAttribute(ATTR_HTTP_PROXY_HOSTNAME, null) == null) {
138                 httpProxyHostname = Property.getProperty(new ContextKey("proxies.http.proxyHost"));
139                 httpNonProxyHosts = Property.getPropertyList(new ContextKey("proxies.http.nonProxyHosts"));
140                 if(httpProxyHostname.equals("")) {
141                     httpProxyUsername = "";
142                     httpProxyPort = "";
143                     httpProxyPassword = "";
144                     httpNonProxyHosts.clear();
145                 }
146                 else {
147                     useHTTPProxy = true;
148                     httpProxyUsername = Property.getProperty(new ContextKey("proxies.http.proxyUser"));
149                     httpProxyPassword = Property.getProperty(new ContextKey("proxies.http.proxyPassword"));
150                     httpProxyPort = Property.getProperty(new ContextKey("proxies.http.proxyPort"));
151                 }
152             }
153             else {
154                 useHTTPProxy = ((String JavaDoc)sequence.getAttribute(ATTR_USE_HTTP_PROXY,
155                     String.valueOf(Property.getPropertyBoolean(new ContextKey("webServer.port"))))).equals("true");
156                 httpProxyHostname = (String JavaDoc)sequence.getAttribute(ATTR_HTTP_PROXY_HOSTNAME, "");
157                 httpProxyPort = (String JavaDoc)sequence.getAttribute(ATTR_HTTP_PROXY_PORT, "");
158                 httpProxyUsername = (String JavaDoc)sequence.getAttribute(ATTR_HTTP_PROXY_USERNAME, "");
159                 httpProxyPassword = (String JavaDoc)sequence.getAttribute(ATTR_HTTP_PROXY_PASSWORD, "");
160                 httpNonProxyHosts = (PropertyList)sequence.getAttribute(ATTR_HTTP_NON_PROXY_HOSTS, null);
161             }
162         }
163         catch(Exception JavaDoc e) {
164             log.error("Failed to initialise form.");
165         }
166     }
167
168     /*
169      * (non-Javadoc)
170      * @see com.sslexplorer.wizard.forms.AbstractWizardForm#apply(com.sslexplorer.wizard.AbstractWizardSequence)
171      */

172     public void apply(AbstractWizardSequence sequence) throws Exception JavaDoc {
173         sequence.putAttribute(ATTR_USE_SOCKS_PROXY, String.valueOf(useSOCKSProxy));
174         sequence.putAttribute(ATTR_USE_HTTP_PROXY, String.valueOf(useHTTPProxy));
175         sequence.putAttribute(ATTR_SOCKS_PROXY_HOSTNAME, socksProxyHostname);
176         sequence.putAttribute(ATTR_SOCKS_PROXY_PORT, socksProxyPort);
177         sequence.putAttribute(ATTR_SOCKS_PROXY_USERNAME, socksProxyUsername);
178         sequence.putAttribute(ATTR_SOCKS_PROXY_PASSWORD, socksProxyPassword);
179         sequence.putAttribute(ATTR_HTTP_PROXY_HOSTNAME, httpProxyHostname);
180         sequence.putAttribute(ATTR_HTTP_PROXY_PORT, httpProxyPort);
181         sequence.putAttribute(ATTR_HTTP_PROXY_USERNAME, httpProxyUsername);
182         sequence.putAttribute(ATTR_HTTP_PROXY_PASSWORD, httpProxyPassword);
183         sequence.putAttribute(ATTR_HTTP_NON_PROXY_HOSTS, httpNonProxyHosts);
184
185         
186         String JavaDoc socksUsername = null, socksPassword = null, httpUsername = null, httpPassword = null;
187         
188     // Configure proxy settings as entered in the wizard sequence.
189
if(sequence.getAttribute(ConfigureProxiesForm.ATTR_USE_SOCKS_PROXY, "").equals("true")) {
190             if (log.isInfoEnabled())
191                 log.info("Configuring outgoing TCP/IP connections to use a SOCKS proxy server.");
192             System.setProperty("socksProxyHost", (String JavaDoc)sequence.getAttribute(ConfigureProxiesForm.ATTR_SOCKS_PROXY_HOSTNAME, ""));
193             System.setProperty("socksProxyPort", (String JavaDoc)sequence.getAttribute(ConfigureProxiesForm.ATTR_SOCKS_PROXY_PORT, "1080"));
194             socksUsername = (String JavaDoc)sequence.getAttribute(ConfigureProxiesForm.ATTR_SOCKS_PROXY_USERNAME, "");
195             socksPassword = (String JavaDoc)sequence.getAttribute(ConfigureProxiesForm.ATTR_SOCKS_PROXY_PASSWORD, "");
196         }
197         if(sequence.getAttribute(ConfigureProxiesForm.ATTR_USE_HTTP_PROXY, "").equals("true")) {
198             if (log.isInfoEnabled())
199                 log.info("Configuring outgoing web connections to use a HTTP proxy server.");
200             System.setProperty("http.proxyHost", (String JavaDoc)sequence.getAttribute(ConfigureProxiesForm.ATTR_HTTP_PROXY_HOSTNAME, ""));
201             System.setProperty("com.maverick.ssl.https.HTTPProxyHostname", (String JavaDoc)sequence.getAttribute(ConfigureProxiesForm.ATTR_HTTP_PROXY_HOSTNAME, ""));
202             System.setProperty("http.proxyPort", (String JavaDoc)sequence.getAttribute(ConfigureProxiesForm.ATTR_HTTP_PROXY_PORT, "3128"));
203             System.setProperty("com.maverick.ssl.https.HTTPProxyPort", (String JavaDoc)sequence.getAttribute(ConfigureProxiesForm.ATTR_HTTP_PROXY_PORT, "3128"));
204             PropertyList list =(PropertyList)sequence.getAttribute(ConfigureProxiesForm.ATTR_HTTP_NON_PROXY_HOSTS, null);
205             StringBuffer JavaDoc hosts = new StringBuffer JavaDoc();
206             for (Iterator JavaDoc i = list.iterator(); i.hasNext();) {
207                 if (hosts.length() != 0) {
208                     hosts.append("|");
209                 }
210                 hosts.append(i.next());
211             }
212             System.setProperty("http.nonProxyHosts", hosts.toString());
213             System.setProperty("com.maverick.ssl.https.HTTPProxyNonProxyHosts", hosts.toString());
214             httpUsername = (String JavaDoc)sequence.getAttribute(ConfigureProxiesForm.ATTR_HTTP_PROXY_USERNAME, "");
215             httpPassword = (String JavaDoc)sequence.getAttribute(ConfigureProxiesForm.ATTR_HTTP_PROXY_PASSWORD, "");
216             System.setProperty("com.maverick.ssl.https.HTTPProxySecure", "false");
217         }
218         if(httpUsername != null || socksUsername != null) {
219             Authenticator.setDefault(new ProxyAuthenticator(socksUsername, socksPassword, httpUsername, httpPassword));
220         }
221         
222         ExtensionStore.getInstance().resetExtensionStoreUpdate();
223         try {
224             ExtensionStore.getInstance().getDownloadableExtensionStoreDescriptor(true);
225             sequence.removeAttribute(ATTR_EXTENSION_STORE_EXCEPTION);
226         }
227         catch(Exception JavaDoc e) {
228             log.error("Failed to connect to extension store.", e);
229             sequence.putAttribute(ATTR_EXTENSION_STORE_EXCEPTION, e);
230         }
231     }
232
233     /*
234      * (non-Javadoc)
235      * @see org.apache.struts.action.ActionForm#validate(org.apache.struts.action.ActionMapping, javax.servlet.http.HttpServletRequest)
236      */

237     public ActionErrors validate(ActionMapping mapping, HttpServletRequest JavaDoc request) {
238         ActionErrors errs = new ActionErrors();
239         if (isCommiting() && (useHTTPProxy || useSOCKSProxy)) {
240             validateHostAndPortValues(errs);
241             validateHostnames(errs);
242         }
243         return errs;
244     }
245     
246     private void validateHostAndPortValues(ActionErrors errs) {
247         String JavaDoc hostName = useHTTPProxy ? httpProxyHostname : socksProxyHostname;
248         String JavaDoc portString = useHTTPProxy ? httpProxyPort : socksProxyPort;
249
250         if ("".equals(hostName)) {
251             errs.add(Globals.ERROR_KEY, new ActionMessage("installation.configureProxies.error.emptyHostName", hostName));
252         }
253         
254         if ("".equals(portString)) {
255             errs.add(Globals.ERROR_KEY, new ActionMessage("installation.configureProxies.error.emptyPort", hostName));
256         } else {
257             try {
258                 int port = Integer.parseInt(portString);
259                 if(!isPortValid(port)) {
260                     errs.add(Globals.ERROR_KEY, new ActionMessage("installation.configureProxies.error.invalidPort"));
261                 }
262             } catch (NumberFormatException JavaDoc e) {
263                 errs.add(Globals.ERROR_KEY, new ActionMessage("installation.configureProxies.error.invalidPort"));
264             }
265         }
266     }
267     
268     private static boolean isPortValid(int port) {
269         return port >= 1 && port <= 65535;
270     }
271
272     private void validateHostnames(ActionErrors errs) {
273         String JavaDoc hostName = useHTTPProxy ? httpProxyHostname : socksProxyHostname;
274         if (!isValidIpAddress(hostName)) {
275             errs.add(Globals.ERROR_KEY, new ActionMessage("installation.configureProxies.error.invalidHostName", hostName));
276         }
277
278         for (String JavaDoc address : httpNonProxyHosts) {
279             if (!isValidIpAddress(address)) {
280                 errs.add(Globals.ERROR_KEY, new ActionMessage("installation.configureProxies.error.invalidHttpNonProxyHost", address));
281             }
282         }
283     }
284
285     private static boolean isValidIpAddress(String JavaDoc ipAddress) {
286         try {
287             InetAddress.getByName(ipAddress);
288             return true;
289         } catch (UnknownHostException JavaDoc e) {
290             return false;
291         }
292     }
293     
294     /**
295      * @return Returns the useHTTPProxy.
296      */

297     public boolean getUseHTTPProxy() {
298         return useHTTPProxy;
299     }
300
301     /**
302      * @param useHTTPProxy The useHTTPProxy to set.
303      */

304     public void setUseHTTPProxy(boolean useHTTPProxy) {
305         this.useHTTPProxy = useHTTPProxy;
306     }
307
308     /**
309      * @return Returns the useSOCKSProxy.
310      */

311     public boolean getUseSOCKSProxy() {
312         return useSOCKSProxy;
313     }
314
315     /**
316      * @param useSOCKSProxy The useSOCKSProxy to set.
317      */

318     public void setUseSOCKSProxy(boolean useSOCKSProxy) {
319         this.useSOCKSProxy = useSOCKSProxy;
320     }
321
322     /**
323      * @return Returns the httpProxyHostname.
324      */

325     public String JavaDoc getHttpProxyHostname() {
326         return httpProxyHostname;
327     }
328
329     /**
330      * @param httpProxyHostname The httpProxyHostname to set.
331      */

332     public void setHttpProxyHostname(String JavaDoc httpProxyHostname) {
333         this.httpProxyHostname = httpProxyHostname;
334     }
335
336     /**
337      * @return String
338      */

339     public String JavaDoc getHttpNonProxyHosts() {
340         return httpNonProxyHosts.getAsTextFieldText();
341     }
342
343     /**
344      * @param httpNonProxyHosts
345      */

346     public void setHttpNonProxyHosts(String JavaDoc httpNonProxyHosts) {
347         this.httpNonProxyHosts.setAsTextFieldText(httpNonProxyHosts);
348     }
349
350     /**
351      * @return Returns the httpProxyPassword.
352      */

353     public String JavaDoc getHttpProxyPassword() {
354         return httpProxyPassword;
355     }
356
357     /**
358      * @param httpProxyPassword The httpProxyPassword to set.
359      */

360     public void setHttpProxyPassword(String JavaDoc httpProxyPassword) {
361         this.httpProxyPassword = httpProxyPassword;
362     }
363
364     /**
365      * @return Returns the httpProxyPort.
366      */

367     public String JavaDoc getHttpProxyPort() {
368         return httpProxyPort;
369     }
370
371     /**
372      * @param httpProxyPort The httpProxyPort to set.
373      */

374     public void setHttpProxyPort(String JavaDoc httpProxyPort) {
375         this.httpProxyPort = httpProxyPort;
376     }
377
378     /**
379      * @return Returns the httpProxyUsername.
380      */

381     public String JavaDoc getHttpProxyUsername() {
382         return httpProxyUsername;
383     }
384
385     /**
386      * @param httpProxyUsername The httpProxyUsername to set.
387      */

388     public void setHttpProxyUsername(String JavaDoc httpProxyUsername) {
389         this.httpProxyUsername = httpProxyUsername;
390     }
391
392     /**
393      * @return Returns the socksProxyHostname.
394      */

395     public String JavaDoc getSocksProxyHostname() {
396         return socksProxyHostname;
397     }
398
399     /**
400      * @param socksProxyHostname The socksProxyHostname to set.
401      */

402     public void setSocksProxyHostname(String JavaDoc socksProxyHostname) {
403         this.socksProxyHostname = socksProxyHostname;
404     }
405
406     /**
407      * @return Returns the socksProxyPassword.
408      */

409     public String JavaDoc getSocksProxyPassword() {
410         return socksProxyPassword;
411     }
412
413     /**
414      * @param socksProxyPassword The socksProxyPassword to set.
415      */

416     public void setSocksProxyPassword(String JavaDoc socksProxyPassword) {
417         this.socksProxyPassword = socksProxyPassword;
418     }
419
420     /**
421      * @return Returns the socksProxyPort.
422      */

423     public String JavaDoc getSocksProxyPort() {
424         return socksProxyPort;
425     }
426
427     /**
428      * @param socksProxyPort The socksProxyPort to set.
429      */

430     public void setSocksProxyPort(String JavaDoc socksProxyPort) {
431         this.socksProxyPort = socksProxyPort;
432     }
433
434     /**
435      * @return Returns the socksProxyUsername.
436      */

437     public String JavaDoc getSocksProxyUsername() {
438         return socksProxyUsername;
439     }
440
441     /**
442      * @param socksProxyUsername The socksProxyUsername to set.
443      */

444     public void setSocksProxyUsername(String JavaDoc socksProxyUsername) {
445         this.socksProxyUsername = socksProxyUsername;
446     }
447     
448     class ProxyAuthenticator extends Authenticator JavaDoc {
449         
450         String JavaDoc socksUsername, socksPassword, httpUsername, httpPassword;
451         
452         ProxyAuthenticator(String JavaDoc socksUsername, String JavaDoc socksPassword,
453             String JavaDoc httpUsername, String JavaDoc httpPassword) {
454             this.socksUsername = socksUsername;
455             this.socksPassword = socksPassword;
456             this.httpUsername = httpUsername;
457             this.httpPassword = httpPassword;
458         }
459
460         public PasswordAuthentication JavaDoc getPasswordAuthentication() {
461             if (log.isInfoEnabled())
462                 log.info("Requesting " + getRequestingProtocol() + " proxy authentication for " + getRequestingSite() + " ("
463                             + getRequestingHost() + ":" + getRequestingPort() + "), prompt = " + getRequestingPrompt());
464             String JavaDoc user = null;
465             String JavaDoc pass = null;
466             try {
467                 if (getRequestingProtocol().startsWith("SOCKS")) {
468                     user = socksUsername;
469                     pass = socksPassword;
470                 } else {
471                     user = httpUsername;
472                     pass = httpPassword;
473                 }
474             } catch (Exception JavaDoc e) {
475                 log.error("Failed to get proxy authentication details.");
476                 return null;
477             }
478             return new PasswordAuthentication JavaDoc(user, pass.toCharArray());
479         }
480
481     }
482
483     public void reset(ActionMapping mapping, HttpServletRequest JavaDoc request) {
484         super.reset(mapping, request);
485         useSOCKSProxy = false;
486         useHTTPProxy = false;
487     }
488 }
Popular Tags