package org.ecgine.gradle.extensions; import java.io.IOException; import java.security.cert.X509Certificate; import java.util.HashMap; import java.util.Map; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLException; import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSocket; import org.apache.http.client.HttpClient; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.X509HostnameVerifier; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.ssl.SSLContextBuilder; import org.apache.http.ssl.SSLContexts; import org.apache.http.ssl.TrustStrategy; import org.gradle.api.GradleException; import org.gradle.api.Project; import groovy.lang.Closure; /** * Extension to configure the Ecgine project */ public class EcgineExtension { private static final String MASTER_BUNDLE = "com.vimukti.ecgine.master"; private static final String BUNDLE_DOWNLOAD = "/api/download/bundle"; private static final String DEPENDENCY = "/api/dependencies"; private static final String CREATE_EBUNDLE = "/api/createebundle"; private static final String CREATE_PACKAGE = "/api/createpackage"; private static final String CREATE_PACKAGE_VERSION = "/api/createpackageversion"; private static final String LOGIN = "/apikey"; public static final String DEFAULT_JRE_VERSION = "jre-8u77"; public static final String NAME = "ecgine"; /** * This is master server address */ private String url = "https://vimukti.ecgine.com/"; /** * This directory is used store all downloaded bundles */ private String plugins = "plugins"; private Package pkg = new Package(); private String setup; private Map<String, String> bundles = new HashMap<>(); private Configuration client = new Configuration(8000, 0, "64m", "1g", null); private Configuration server = new Configuration(4000, 0, "64m", "1g", null); private Master master = new Master(); private Project project; private HttpClient httpClient; public EcgineExtension(Project project) { this.project = project; } public String getPlugins() { return plugins; } public void plugins(String destDir) { this.plugins = destDir; } public String getUrl() { return url; } public void bundle(String name, String version) { this.bundles.put(name, version); } public void bundle(String nameAndVersion) { String[] split = nameAndVersion.split("_"); this.bundles.put(split[0], split[1]); } public Map<String, String> getBundles() { return bundles; } public void setup(String setup) { this.setup = setup; } public String getSetup() { if (setup == null) { setup = System.getProperty("user.home") + "/.ecgine/setup"; } return setup; } public void master(Closure<Master> master) { project.configure(this.master, master); } public void server(Closure<Configuration> server) { project.configure(this.server, server); } public void client(Closure<Configuration> client) { project.configure(this.client, client); } public void pkg(Closure<Package> pkg) { project.configure(this.pkg, pkg); } public Configuration getClient() { return client; } public Package getPkg() { return pkg; } public Configuration getServer() { return server; } public Master getMaster() { return master; } public HttpClient getHttpClient() { if (httpClient == null) { try { SSLContextBuilder builder = SSLContexts.custom(); builder.loadTrustMaterial(null, new TrustStrategy() { @Override public boolean isTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException { return true; } }); SSLContext sslContext = builder.build(); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new X509HostnameVerifier() { @Override public void verify(String host, SSLSocket ssl) throws IOException { } @Override public void verify(String host, String[] cns, String[] subjectAlts) throws SSLException { } @Override public boolean verify(String s, SSLSession sslSession) { return true; } @Override public void verify(String host, X509Certificate cert) throws SSLException { } }); Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder .<ConnectionSocketFactory> create().register("https", sslsf).build(); PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry); httpClient = HttpClients.custom().setConnectionManager(cm).build(); } catch (Exception e) { throw new GradleException(e.getMessage(), e); } } return httpClient; } public String getDependenciesUrl() { StringBuilder b = new StringBuilder(); b.append(getUrl()); b.append(MASTER_BUNDLE); b.append(DEPENDENCY); return b.toString(); } public String getDownloadUrl() { StringBuilder b = new StringBuilder(); b.append(getUrl()); b.append(MASTER_BUNDLE); b.append(BUNDLE_DOWNLOAD); return b.toString(); } public String getConfigUrl() { StringBuilder b = new StringBuilder(); b.append(getUrl()); b.append(MASTER_BUNDLE); b.append("/ecgine.config"); return b.toString(); } public String getEcgineStartUrl() { StringBuilder b = new StringBuilder(); b.append(getUrl()); b.append(MASTER_BUNDLE); b.append("/ecgine-start.jar"); return b.toString(); } public String getUploadBundleUrl() { StringBuilder b = new StringBuilder(); b.append(getUrl()); b.append(MASTER_BUNDLE); b.append(CREATE_EBUNDLE); return b.toString(); } public String getCreatePackageVersionUrl() { StringBuilder b = new StringBuilder(); b.append(getUrl()); b.append(MASTER_BUNDLE); b.append(CREATE_PACKAGE_VERSION); return b.toString(); } public String getCreatePackageUrl() { StringBuilder b = new StringBuilder(); b.append(getUrl()); b.append(MASTER_BUNDLE); b.append(CREATE_PACKAGE); return b.toString(); } public String getLoginUrl() { StringBuilder b = new StringBuilder(); b.append(getUrl()); b.append(MASTER_BUNDLE); b.append(LOGIN); return b.toString(); } public String getApiKey() { return (String) project.getProperties().get("ecgine.apikey"); } public String getCertificateUrl() { return "http://s1.infra.ecgine.com/certificate/vimukti_codegen_bundle.crt"; } public static boolean isLinux() { return System.getProperty("os.name").equalsIgnoreCase("Linux"); } public static boolean isWindows() { return System.getProperty("os.name").toLowerCase().contains("windows"); } public String getJre(String jreName) { if (isLinux()) { jreName = jreName + "-linux"; } String model = System.getProperty("sun.arch.data.model"); return jreName + "-x" + model + ".zip"; } /** * def jres_download_url="http://192.168.0.2/ecgine/jres"; * * println * "downloading jre: {jres_download_url}/${jre_version}-${jre_platform}.zip" * * * @return URL Of JRE */ public String getJREURL(String jre) { return "http://s1.infra.ecgine.com/ecgine/jres/" + jre; } }