package org.zaproxy.zap.utils; import java.awt.Desktop; import java.net.URI; import org.apache.log4j.Logger; import org.parosproxy.paros.model.Model; import edu.stanford.ejalbert.BrowserLauncher; import edu.stanford.ejalbert.exception.BrowserLaunchingInitializingException; import edu.stanford.ejalbert.exception.UnsupportedOperatingSystemException; public class DesktopUtils { private static enum BrowserInvoker {desktop, browserlauncher, none}; private static BrowserInvoker DEFAULT_INVOKER = BrowserInvoker.desktop; // Initialize the default invoker to desktop, if it's supported static { if (Desktop.isDesktopSupported()) DEFAULT_INVOKER = BrowserInvoker.desktop; else DEFAULT_INVOKER = BrowserInvoker.browserlauncher; } private static BrowserInvoker invoker = null; private static BrowserLauncher launcher = null; private static Logger log = Logger.getLogger(DesktopUtils.class); public static boolean openUrlInBrowser (URI uri) { try { switch (getInvoker()) { case desktop: if (Desktop.isDesktopSupported()) { Desktop.getDesktop().browse(uri); return true; } break; case browserlauncher: getBrowserLauncher().openURLinBrowser(uri.toString()); return true; case none: break; } } catch (Exception e) { log.error(e.getMessage(), e); invoker = BrowserInvoker.none; } return false; } public static boolean openUrlInBrowser (String uri) { try { return openUrlInBrowser(new URI(uri)); } catch (Exception e) { log.error(e.getMessage(), e); invoker = BrowserInvoker.none; } return false; } public static boolean openUrlInBrowser (org.apache.commons.httpclient.URI uri) { try { return openUrlInBrowser(uri.toString()); } catch (Exception e) { log.error(e.getMessage(), e); invoker = BrowserInvoker.none; } return false; } public static boolean canOpenUrlInBrowser () { switch (getInvoker()) { case desktop: return Desktop.isDesktopSupported(); case browserlauncher: return true; case none: return false; default: return false; } } private static BrowserInvoker getInvoker() { if (invoker == null) { try { invoker = BrowserInvoker.valueOf( Model.getSingleton().getOptionsParam().getConfig().getString("TBA", DEFAULT_INVOKER.name())); } catch (Exception e) { log.error(e.getMessage(), e); invoker = DEFAULT_INVOKER; } } return invoker; } private static BrowserLauncher getBrowserLauncher() throws BrowserLaunchingInitializingException, UnsupportedOperatingSystemException { if (launcher == null) { createBrowserLauncher(); } return launcher; } private static synchronized void createBrowserLauncher() throws BrowserLaunchingInitializingException, UnsupportedOperatingSystemException { if (launcher == null) { launcher = new BrowserLauncher(); } } }