Skip to content

Instantly share code, notes, and snippets.

@yuercl
Created July 20, 2018 08:15
Show Gist options
  • Save yuercl/62f486030bed556430bc001c8ae7b409 to your computer and use it in GitHub Desktop.
Save yuercl/62f486030bed556430bc001c8ae7b409 to your computer and use it in GitHub Desktop.
export navicat<ncx export file> into sequel pro
package com.chinaway;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import org.apache.commons.lang3.RandomUtils;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.util.List;
/**
* @see https://github.com/DoubleLabyrinth/how-does-navicat-encrypt-password
*/
public class ExportFromNavicatIntoSequelPro {
private static DocumentBuilder db = null;
static {
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
db = dbFactory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
public static List<JSONObject> convert(String fileName) throws Exception {
Document document = db.parse(fileName);
NodeList connections = document.getElementsByTagName("Connection");
StringBuilder sb = new StringBuilder();
StringBuilder passwordTable = new StringBuilder();
for (int i = 0; i < connections.getLength(); i++) {
Node node = connections.item(i);
NamedNodeMap namedNodeMap = node.getAttributes();
String connectionName = namedNodeMap.getNamedItem("ConnectionName").getNodeValue();
String host = namedNodeMap.getNamedItem("Host").getNodeValue();
String port = namedNodeMap.getNamedItem("Port").getNodeValue();
String userName = namedNodeMap.getNamedItem("UserName").getNodeValue();
String password = namedNodeMap.getNamedItem("Password").getNodeValue();
String originPassword = Navicat12Cipher.class.newInstance().DecryptStringForNCX(password);
String SSH_PrivateKey = namedNodeMap.getNamedItem("SSH_PrivateKey").getNodeValue();
String SSH_UserName = namedNodeMap.getNamedItem("SSH_UserName").getNodeValue();
String SSH_Host = namedNodeMap.getNamedItem("SSH_Host").getNodeValue();
String SSH_Port = namedNodeMap.getNamedItem("SSH_Port").getNodeValue();
String x = plist(connectionName, host, port, userName, originPassword, SSH_PrivateKey, SSH_UserName, SSH_Host, SSH_Port);
passwordTable.append(connectionName).append("\t").append(originPassword).append("\n");
sb.append(x);
}
System.out.println(sb.toString());
System.out.println(passwordTable.toString());
return Lists.newArrayList();
}
private static String plist(String connectionName, String host, String port, String userName, String originPassword, String SSH_PrivateKey, String SSH_UserName, String SSH_Host, String SSH_Port) {
String x = "<dict>\n" +
" <key>colorIndex</key>\n" +
" <integer>-1</integer>\n" +
" <key>database</key>\n" +
" <string></string>\n" +
" <key>host</key>\n" +
" <string>" + host + "</string>\n" +
" <key>id</key>\n" +
" <integer>" + RandomUtils.nextLong(0, Long.MAX_VALUE) + "</integer>\n" +
" <key>name</key>\n" +
" <string>" + connectionName + "</string>\n" +
" <key>port</key>\n" +
" <string>" + port + "</string>\n" +
" <key>socket</key>\n" +
" <string></string>\n" +
" <key>sshHost</key>\n" +
" <string>" + SSH_Host + "</string>\n" +
" <key>sshKeyLocation</key>\n" +
" <string>" + SSH_PrivateKey + "</string>\n" +
" <key>sshKeyLocationEnabled</key>\n" +
" <integer>0</integer>\n" +
" <key>sshPort</key>\n" +
" <string>" + SSH_Port + "</string>\n" +
" <key>sshUser</key>\n" +
" <string>" + SSH_UserName + "</string>\n" +
" <key>sslCACertFileLocation</key>\n" +
" <string></string>\n" +
" <key>sslCACertFileLocationEnabled</key>\n" +
" <integer>0</integer>\n" +
" <key>sslCertificateFileLocation</key>\n" +
" <string></string>\n" +
" <key>sslCertificateFileLocationEnabled</key>\n" +
" <integer>0</integer>\n" +
" <key>sslKeyFileLocation</key>\n" +
" <string></string>\n" +
" <key>sslKeyFileLocationEnabled</key>\n" +
" <integer>0</integer>\n" +
" <key>type</key>\n" +
" <integer>0</integer>\n" +
" <key>useSSL</key>\n" +
" <integer>0</integer>\n" +
" <key>user</key>\n" +
" <string>" + userName + "</string>\n" +
" </dict>";
return x;
}
public static void main(String args[]) throws Exception {
String fileName = "/Users/.../Desktop/connections.ncx";
List<JSONObject> list = ExportFromNavicatIntoSequelPro.convert(fileName);
for (JSONObject book : list) {
System.out.println(book.toJSONString());
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment