/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.dun.utils; import com.dun.config.SshConfig; import com.dun.file.FileUtil; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.logging.Level; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.SubnodeConfiguration; import org.apache.commons.configuration.XMLConfiguration; import org.apache.log4j.Logger; /** * * @author dubach */ public class FinalConfigProcessor { private String[] config; private boolean keepTargets; private boolean recipher; private File outPut; private int version; private static Logger log = Logger.getLogger(FinalConfigProcessor.class); /* * Vars del weylogic **/ private static final String workingDir = System.getProperty("user.dir"); private static final String[] jdbcOpts = {"CapacityIncrement", "DriverName", "InactiveConnectionTimeoutSeconds", "InitialCapacity", "MaxCapacity", "Name", "PasswordEncrypted", "Properties", "ShrinkFrequencySeconds", "StatementCacheSize", "Targets", "TestConnectionsOnCreate", "TestConnectionsOnRelease", "TestConnectionsOnReserve", "TestFrequencySeconds", "TestTableName", "URL"}; private static final String[] dsOpts = {"Name","EnableTwoPhaseCommit", "JNDIName", "PoolName", "Targets"}; private static final String[] dsSimpleOpts = {"Name", "JNDIName", "PoolName", "Targets"}; public FinalConfigProcessor(String[] config, boolean keepTargets, boolean recipher, File outPut) { this.config = config; this.keepTargets = keepTargets; this.recipher = recipher; this.outPut = outPut; this.version = RemoteFiles.getWeblogicVersion(new File(config[0])); try { FileUtil.copy(this.config[1], workingDir + File.separatorChar + "SerializedSystemIni.dat"); } catch (IOException ex) { System.exit(666); log.fatal("No hay Serialized que copiar... no ma... checale wey! " + ex); } startParse(); } private ArrayList startParse() { if (version == 8) { System.out.println("es un 8"); weyLogi8Parse(); } else if (version >= 9) { System.out.println("es un 9 o 10"); weyLogic910Parse(); } else { System.out.println("WTF?"); } return new ArrayList(); } private void weyLogi8Parse() { XMLConfiguration config8 = new XMLConfiguration(); try { config8.load(new File(config[0])); } catch (ConfigurationException ex) { log.debug(ex); } StringBuffer complete = new StringBuffer(100); if (config8.containsKey("JDBCConnectionPool[@Name]") && (config8.getList("JDBCConnectionPool[@Name]")).size() != 0) { System.out.println("multiples valores..."); complete.append(parseMultiJDBCWL8(config8).toString()); complete.append(parseMultiDSWL8(config8).toString()); complete.append(parseMultiDSSimpleWL8(config8).toString()); FileWriter fw = null; try { fw = new FileWriter(outPut); fw.write(complete.toString()); } catch (IOException ex) { log.fatal(ex); } finally { try { fw.close(); } catch (IOException ex) { log.fatal(ex); } } } else if (config8.containsKey("JDBCConnectionPool[@Name]")) { System.out.println("solo contiene 1 DataDource"); FileWriter fw = null; try { fw = new FileWriter(outPut); fw.write(parseSinglePoolDS(config8)); } catch (IOException ex) { log.fatal(ex); } finally { try { fw.close(); } catch (IOException ex) { log.fatal(ex); } } } } private String parseSinglePoolDS(XMLConfiguration config) { StringBuffer single = new StringBuffer(2); String targets = ""; if (config.containsKey("JDBCConnectionPool")) { single.append("<JDBCConnectionPool\n"); for (int j = 0; j < jdbcOpts.length; j++) { List lista = config.getList("JDBCConnectionPool.[@" + jdbcOpts[j] + "]"); if (lista.size() > 1) { for (Object o : lista) { targets += (String) o + ","; } targets = targets.substring(0, targets.length() - 1); single.append("" + jdbcOpts[j] + "=\"" + targets + "\"\n "); targets = ""; } else if (lista.size() == 1) { if (jdbcOpts[j].equals("PasswordEncrypted") && recipher) { single.append("" + jdbcOpts[j] + "=\"" + recipherJDBCWL8(ClearEncryption.clear((String) lista.get(0))) + "\"\n "); } else { single.append("" + jdbcOpts[j] + "=\"" + ClearEncryption.clear((String) lista.get(0)) + "\"\n "); } } else { log.debug("chale aqui no paso nada :S " + jdbcOpts[j]); } } single.append("/>\n"); } else if (config.containsKey("JDBCTxDataSource")) { single.append("<JDBCTxDataSource\n"); for (int j = 0; j < dsOpts.length; j++) { List lista = config.getList("JDBCTxDataSource.[@" + dsOpts[j] + "]"); if (lista.size() > 1) { for (Object o : lista) { targets += (String) o + ","; } targets = targets.substring(0, targets.length() - 1); single.append("" + dsOpts[j] + "=\"" + targets + "\"\n "); targets = ""; } else if (lista.size() == 1) { single.append("" + dsOpts[j] + "=\"" + (String) lista.get(0) + "\"\n "); } else { log.debug("chale aqui no paso nada :S " + dsOpts[j]); } } single.append("/>\n"); System.out.println(single.toString()); } else if (config.containsKey("JDBCDataSource")) { single.append("<JDBCDataSource\n"); for (int j = 0; j < dsSimpleOpts.length; j++) { List lista = config.getList("JDBCDataSource.[@" + dsSimpleOpts[j] + "]"); if (lista.size() > 1) { for (Object o : lista) { targets += (String) o + ","; } targets = targets.substring(0, targets.length() - 1); single.append("" + dsSimpleOpts[j] + "=\"" + targets + "\"\n "); targets = ""; } else if (lista.size() == 1) { single.append("" + dsSimpleOpts[j] + "=\"" + (String) lista.get(0) + "\"\n "); } else { log.debug("chale aqui no paso nada :S " + dsSimpleOpts[j]); } } single.append("/>\n"); } System.out.println(single.toString()); return single.toString(); } private StringBuffer parseMultiJDBCWL8(XMLConfiguration config) { StringBuffer sb = new StringBuffer(20); String targets = ""; List jdbc = config.getList("JDBCConnectionPool[@Name]"); for (int i = 0; i < jdbc.size(); i++) { log.debug("Processing: " + jdbc.get(i)); sb.append("<JDBCConnectionPool "); for (int j = 0; j < jdbcOpts.length; j++) { List lista = config.getList("JDBCConnectionPool(" + i + ").[@" + jdbcOpts[j] + "]"); if (lista.size() > 1) { for (Object o : lista) { targets += (String) o + ","; } targets = targets.substring(0, targets.length() - 1); sb.append("" + jdbcOpts[j] + "=\"" + targets + "\" "); targets = ""; } else if (lista.size() == 1) { if (jdbcOpts[j].equals("PasswordEncrypted") && recipher) { sb.append("" + jdbcOpts[j] + "=\"" + recipherJDBCWL8(ClearEncryption.clear((String) lista.get(0))) + "\"\n "); } else { sb.append("" + jdbcOpts[j] + "=\"" + ClearEncryption.clear((String) lista.get(0)) + "\" "); } } else { log.debug("chale aqui no paso nada :S " + jdbcOpts[j]); } } sb.append("/>\n"); } System.out.println(sb.toString()); return sb; } private StringBuffer parseMultiDSWL8(XMLConfiguration config) { StringBuffer sb = new StringBuffer(20); String targets = ""; List jdbc = config.getList("JDBCTxDataSource[@Name]"); System.out.println(">>>>>>>>>>>>>>>>>>>>>Imprimiendo " +jdbc.size()+"<<<<<<<<<<<<<<<<<<<<<<<<<"); for (int i = 0; i < jdbc.size(); i++) { log.debug("Processing: " + jdbc.get(i)); sb.append("<JDBCTxDataSource "); for (int j = 0; j < dsOpts.length; j++) { List lista = config.getList("JDBCTxDataSource(" + i + ").[@" + dsOpts[j] + "]"); if (lista.size() > 1) { for (Object o : lista) { targets += (String) o + ","; } targets = targets.substring(0, targets.length() - 1); sb.append("" + dsOpts[j] + "=\"" + targets + "\" "); targets = ""; } else if (lista.size() == 1) { sb.append("" + dsOpts[j] + "=\"" + (String) lista.get(0) + "\" "); } else { log.debug("chale aqui no paso nada :S " + dsOpts[j]); } } sb.append("/>\n"); } System.out.println(sb.toString()); return sb; } private StringBuffer parseMultiDSSimpleWL8(XMLConfiguration config) { StringBuffer sb = new StringBuffer(20); String targets = ""; List jdbc = config.getList("JDBCDataSource[@Name]"); System.out.println(">>>>>>>>>>>>>>>>>>>>>Imprimiendo " +jdbc.size()+"<<<<<<<<<<<<<<<<<<<<<<<<<"); for (int i = 0; i < jdbc.size(); i++) { log.debug("Processing: " + jdbc.get(i)); sb.append("<JDBCDataSource "); for (int j = 0; j < dsSimpleOpts.length; j++) { List lista = config.getList("JDBCDataSource(" + i + ").[@" + dsSimpleOpts[j] + "]"); if (lista.size() > 1) { for (Object o : lista) { targets += (String) o + ","; } targets = targets.substring(0, targets.length() - 1); sb.append("" + dsSimpleOpts[j] + "=\"" + targets + "\" "); targets = ""; } else if (lista.size() == 1) { sb.append("" + dsSimpleOpts[j] + "=\"" + (String) lista.get(0) + "\" "); } else { log.debug("chale aqui no paso nada :S " + dsSimpleOpts[j]); } } sb.append("/>\n"); } System.out.println(sb.toString()); return sb; } private ArrayList<String> decipherJDBCWL8(XMLConfiguration config) { ArrayList<String> descifrados = new ArrayList<String>(10); try { FileUtil.copy(this.config[1], workingDir + File.separatorChar + "SerializedSystemIni.dat"); } catch (IOException ex) { java.util.logging.Logger.getLogger(FinalConfigProcessor.class.getName()).log(Level.SEVERE, null, ex); } List jdbc = config.getList("JDBCConnectionPool[@PasswordEncrypted]"); for (int i = 0; i < jdbc.size(); i++) { descifrados.add(config.getString("JDBCDataSource(" + i + ").[@Name]") + "->" + ClearEncryption.clear(config.getString("JDBCDataSource(" + i + ").[@PasswordEncrypted]"))); } return descifrados; } private String recipherJDBCWL8(String pass) { String cifrados = ""; try { FileUtil.copy(SshConfig.getTempDir() + File.separator + "new" + File.separator + "SerializedSystemIni.dat", workingDir + File.separatorChar + "SerializedSystemIni.dat"); } catch (IOException ex) { java.util.logging.Logger.getLogger(FinalConfigProcessor.class.getName()).log(Level.SEVERE, null, ex); } cifrados = ClearEncryption.encryptPassword(pass); try { FileUtil.copy(this.config[1], workingDir + File.separatorChar + "SerializedSystemIni.dat"); } catch (IOException ex) { java.util.logging.Logger.getLogger(FinalConfigProcessor.class.getName()).log(Level.SEVERE, null, ex); } return cifrados; } private void weyLogic910Parse() { XMLConfiguration config9 = new XMLConfiguration(); try { config9.load(new File(config[0])); } catch (ConfigurationException ex) { log.debug(ex); } File jdbcDir = new File(workingDir + File.separator + "jdbc"); File[] toDelete = null; if (!jdbcDir.exists()) { jdbcDir.mkdir(); } else { toDelete = jdbcDir.listFiles(); for (int i = 0; i < toDelete.length; i++) { if (toDelete[i].delete()) { System.out.println(toDelete[i].toString() + " borrado satisfactoriamente"); } else { System.out.println("pedos al borrar " + toDelete[i].toString()); } } } startWeyLogic9Parse(config9, jdbcDir); } private void startWeyLogic9Parse(XMLConfiguration config, File jdbcDir) { if(! new File(outPut.toString() + "testing.this.shit").exists()){ } XMLConfiguration configOut = null; try { configOut = new XMLConfiguration(new File(outPut.toString() + "testing.this.shit")); } catch (ConfigurationException ex) { java.util.logging.Logger.getLogger(FinalConfigProcessor.class.getName()).log(Level.SEVERE, null, ex); } List obj = config.configurationsAt("jdbc-system-resource"); Iterator it = config.getKeys("jdbc-system-resource"); ArrayList<File> descriptors = new ArrayList<File>(1); ArrayList<String> configJDBC = new ArrayList<String>(3); ArrayList<String> jdbcKey = new ArrayList<String>(1); while (it.hasNext()) { String tempKey = it.next().toString(); jdbcKey.add( tempKey.substring(tempKey.lastIndexOf(".") + 1, tempKey.length())); } if (obj instanceof Collection) { System.out.println("son " + ((Collection) obj).size() + " keys de configuracion"); } else { System.out.println(config.getString("jdbc-system-resource.name")); } for (Object sc : obj) { SubnodeConfiguration sub = (SubnodeConfiguration) sc; for (int i = 0; i < jdbcKey.size(); i++) { configJDBC.add(jdbcKey.get(i) + ":" + sub.getString(jdbcKey.get(i))); } } int y = 0; for (int i = 0; i < configJDBC.size(); i++) { if (i % 3 == 0 && i > 0) { System.out.println("_________________________________________"); y++; } String key = configJDBC.get(i).substring(0, configJDBC.get(i).lastIndexOf(":")); String value = configJDBC.get(i).substring(configJDBC.get(i).lastIndexOf(":") + 1, configJDBC.get(i).length()); if (key.equals("descriptor-file-name")) { descriptors.add(new File(config.getFile().getParent() + File.separatorChar + value)); } configOut.setProperty("jdbc-system-resource(" + y + ")." + key, value); System.out.println(key + " => " + value); } try { configOut.save(outPut); } catch (ConfigurationException ex) { } StringBuffer web9Passwords = new StringBuffer(40); for (File f : descriptors) { if (f.exists()) { System.out.println("Procesando " + f.getName()); String encrypted = "", decrypted = ""; XMLConfiguration descriptorconfig = new XMLConfiguration(); try { FileUtil.copy(SshConfig.getTempDir() + File.separator + "jdbc" + File.separator + f.getName(), jdbcDir.toString() + File.separator + f.getName()); } catch (IOException ex) { } try { descriptorconfig.load(new File(jdbcDir.toString() + File.separator + f.getName())); } catch (ConfigurationException ex) { } String pass = descriptorconfig.getString("jdbc-driver-params.password-encrypted"); if(pass != null ){ decrypted = ClearEncryption.clear(pass); }else{ decrypted = "no me lo se"; } if(recipher){ descriptorconfig.setProperty("jdbc-driver-params.password-encrypted", recipherJDBCWL8(decrypted)); }else{ descriptorconfig.setProperty("jdbc-driver-params.password-encrypted", decrypted); } // descriptorconfig.setProperty("jdbc-driver-params.password-encrypted", " "); web9Passwords.append(f.getName() + ":" + decrypted + "\n"); try { descriptorconfig.save(jdbcDir.toString() + File.separator + f.getName() + ".emp"); } catch (ConfigurationException ex) { } System.out.println(f.toString()); } else { System.out.println(" :( "); } } } }