/******************************************************************************* * Copyright (c) 2011 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.openshift.express.internal.ui.wizard.domain; import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.SocketTimeoutException; import java.net.URL; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.text.MessageFormat; import javax.net.ssl.HttpsURLConnection; import org.eclipse.osgi.util.NLS; import org.jboss.tools.common.ui.databinding.ObservableUIPojo; import org.jboss.tools.openshift.common.core.connection.ConnectionsRegistrySingleton; import org.jboss.tools.openshift.common.core.utils.UrlUtils; import org.jboss.tools.openshift.express.core.util.ExpressConnectionUtils; import org.jboss.tools.openshift.express.internal.core.connection.ExpressConnection; import org.jboss.tools.openshift.express.internal.ui.ExpressUIActivator; import org.jboss.tools.openshift.express.internal.ui.utils.Logger; import com.openshift.client.IDomain; import com.openshift.client.IUser; import com.openshift.client.OpenShiftException; /** * @author André Dietisheim * @author Xavier Coulon */ public class DomainWizardModel extends ObservableUIPojo { public static final String PROPERTY_DOMAIN_ID = "domainId"; private static final String OPENSHIFT_ENTERPRISE_WEBUI_DOMAINPAGE = "{0}/console/domain/{1}"; private static final String OPENSHIFT_ORIGIN_WEBUI_DOMAINPAGE = "{0}/app/console/domain/{1}"; private String domainId; private final IDomain domain; private ExpressConnection connection; public DomainWizardModel(ExpressConnection connection) { this(null, connection); } public DomainWizardModel(IDomain domain) { this(domain, null); } protected DomainWizardModel(IDomain domain, ExpressConnection connection) { this.domain = domain; this.connection = connection; if (domain == null) { return; } setDomainId(domain.getId()); } public String getDomainId() { return this.domainId; } public void setDomainId(String domainId) { firePropertyChange(PROPERTY_DOMAIN_ID, this.domainId, this.domainId = domainId); } public void renameDomain() throws OpenShiftException, SocketTimeoutException { if (domain == null) { Logger.warn("Attempting to rename missing user domain..."); return; } domain.rename(domainId); fireConnectionChanged(domain, connection); } private void fireConnectionChanged(IDomain domain, ExpressConnection connection) { if (connection == null) { connection = ExpressConnectionUtils.getByResource(domain.getUser(), ConnectionsRegistrySingleton.getInstance()); } ConnectionsRegistrySingleton.getInstance().fireConnectionChanged(connection); } public boolean isCurrentDomainId(String domainId) { try { if (domain == null) { return false; } return domain.getId().equals(domainId); } catch (Exception e) { ExpressUIActivator.log(e); return true; } } public IDomain getDomain() { return domain; } public ExpressConnection getConnection() { return connection; } public String getWebUIDomainPageUrl() { if (getDomain() == null || getDomain().getUser() == null) { return null; } String domainWebUIUrl = getOriginWebUIDomainPageUrl(); if (isUrlAvailable(domainWebUIUrl)) { return domainWebUIUrl; } domainWebUIUrl = getEnterpsiseWebUIDomainPageUrl(); if (isUrlAvailable(domainWebUIUrl)) { return domainWebUIUrl; } return null; } public String getOriginWebUIDomainPageUrl() { if (getDomain() == null) { return null; } String host = getDomain().getUser().getServer(); return MessageFormat.format(OPENSHIFT_ORIGIN_WEBUI_DOMAINPAGE, host, domainId); } public String getEnterpsiseWebUIDomainPageUrl() { if (getDomain() == null) { return null; } String host = getDomain().getUser().getServer(); return MessageFormat.format(OPENSHIFT_ENTERPRISE_WEBUI_DOMAINPAGE, host, domainId); } private boolean isUrlAvailable(String domainWebUIUrl) { try { URL url = new URL(domainWebUIUrl); try { HttpURLConnection connection = (HttpURLConnection) url.openConnection(); if (connection instanceof HttpsURLConnection) { UrlUtils.setupPermissiveSSLHandlers((HttpsURLConnection) connection); } IUser user = getDomain().getUser(); UrlUtils.addBasicAuthorization(user.getRhlogin(), user.getPassword(), connection); connection.connect(); return connection.getResponseCode() == 200; } catch (KeyManagementException e) { ExpressUIActivator.log(NLS.bind( "Could not install permissive trust manager and hostname verifier for connection {0}", url), e); return false; } catch (NoSuchAlgorithmException e) { ExpressUIActivator.log(NLS.bind( "Could not install permissive trust manager and hostname verifier for connection {0}", url), e); return false; } catch (IOException e) { return false; } } catch (MalformedURLException e) { return false; } } }